换行间歇中断(R、tmux、readline)

换行间歇中断(R、tmux、readline)

我经常在工作时在桌面上运行多个 R 命令行交互会话,并使用 vim-r-plugin(有点像 ESS)链接到 vim。我使用 tmux 远程连接到它们,也因为 vim-r-plugin 依赖于它。然而,有时在远程连接时,R 提示符下的长行将无法正确换行:光标不会分成多行,而是会开始覆盖行首的内容。换行位置不一定与我当前终端的边缘相同。所有命令似乎都按预期工作,所以这只是显示问题。

其他可能有助于诊断问题的详细信息:退格超出行首将要实际上返回一行,因此前一行中不相关的内容将开始消失/被覆盖。箭头键将正常地“绕行”到该行的末尾,但会偏离一行:向左移动到行首之后,光标将移到上一行(不相关的)的右侧。此外,在命令历史记录中向后翻页时,任何太长的命令都将以同样不正确的方式绕行,随后向后翻页将使光标向上移动一行。

将终端调整得比中断发生的位置更窄会导致进一步的问题。文本出现正确地换行到下一行,但仍然有奇怪的小问题:如果我返回并编辑第一行,然后尝试转到最后一行,光标将不再换行到第一行的右侧。翻阅历史记录看起来更奇怪:长命令被分成多行,但中间缺少字符,最后一行仍然有覆盖。这有点像两种换行同时进行。编辑第一行会导致不可预测的“重绘”更新,使命令无法读取。

$TERM 是屏幕 256 色。我使用 Terminator 作为终端仿真器,使用 bash 作为 shell。R 版本是 3.3.1。

我尝试过的方法:向 tmux 发送“detach-client -a”和“set assault-resize”;更改我的 .bashrc 中的 PS1 变量。没有效果。退出并重新进入 R 会话是可行的,但很麻烦,因为我通常有大型工作区,需要几分钟才能保存和恢复。

我很确定 R 正在使用 GNU readline 进行命令行交互式会话,所以我也将其添加为标签。

有什么修复或解决方法吗?谢谢大家!

答案1

此问题已在 R 3.3.2 中得到修复/改进。请参阅新闻文件已报告错误

安装和包含的软件:

* Versions of the readline library >= 6.3 had been changed so that
  terminal window resizes were not signalled to readline: code has
  been added using a explicit signal handler to work around that
  (when R is compiled against readline >= 6.3).  (PR#16604)

相关内容