为什么 cmd-r 会搞乱 Mac 上的 Vim?它实际上想做什么?

为什么 cmd-r 会搞乱 Mac 上的 Vim?它实际上想做什么?

因为我是一名 Web 开发人员,所以经常遇到这种情况,“cmd-r”的副作用是在任何模式下箭头键都无法工作,但我无法想象这是目的并且我还没有找到任何关于它实际上应该做什么的文档。

编辑:显然这实际上是一个 mac 终端命令,‘Send Reset’,所以我想现在的问题是“send reset 命令有什么用途?” 这也解释了为什么我无法在 vim 文档中找到它。

答案1

为了避免这种烦恼,我在 iTerm 键映射中将 Command-R 重新映射到“忽略”。

在此处输入图片描述

答案2

即使不使用屏幕,也会发生这种情况,我发现通过清除运行 vim 的终端可以恢复正常(我也使用 tmux 测试过,但没有使用屏幕:

:!clear

答案3

这个问题已经在这里得到解答:在 OSX 上运行屏幕时,command+r 会使 vim 中的所有屏幕中的箭头键混乱

复制答案:

作为一名优秀的 Vim 拥护者,我有责任告诉您学习使用 hjkl 作为光标键。在探索问题的过程中,我以为它已经神秘地自行修复,直到我意识到我正在使用 hjkl 而不是实际的箭头键进行测试。

无论如何,现在来看一下真​​正的答案。

您无需关闭所有屏幕并重新启动,而是可以利用屏幕在终端之间移动的功能。按 CTRL+A CTRL+D 将屏幕从终端分离,然后运行 ​​screen -D -R 重新连接。这应该会使您的箭头键再次起作用。

如果您不在屏幕上,而只是在 Vim 中,那么您可以按 CTRL+Z 并输入 fg 来获得相同的效果。

您也可以解决 Vim 中的光标键问题,但重置可能会改变其他终端选项,因此按照上述方法操作更为安全,以免出现其他随机显示/键盘问题。如果您仍然需要重新映射,请看这里:

map <Esc>[A <Up>
map <Esc>[B <Down>
map <Esc>[C <Right>
map <Esc>[D <Left>

肮脏的细节:

Vim 和 screen 都使用 ncurses 库来管理终端。ncurses 在控制兼容 VT100 的终端时所做的一件事是将箭头键切换到“应用程序模式”,这会更改它们发出的代码。例如,向上箭头键从 Esc [ A 更改为 Esc O A。它为此发出的 VT100 控制代码是 Esc [ ? 1 h。Command+R 发送的终端重置命令将光标键重置为默认值。

分离并重新连接屏幕会导致 ncurses 重新控制终端,并重新应用它喜欢的所有设置,所以这可能是恢复正常的最便携和最可靠的方法。

VT100 控制代码:http://www.handshake.de/infobase/dfue/prgrmmer/t322.htm

答案4

谢谢 @本杰明·卡尔森对于上面的评论中的这个解决方案!

使用Ctrl + z接下来的fd + enter技巧

相关内容