为什么 cmd-r 会在 Mac 上搞乱 Vim?它究竟想做什么?

Gly*_*yph 24 terminal macos

由于我是一名 Web 开发人员,因此不断遇到这个问题,'cmd-r' 具有阻止箭头键在任何模式下工作的副作用,但我无法想象这是目的,我一直无法找到关于它实际应该做什么的任何文档。

编辑:显然这实际上是一个 mac 终端命令,“发送重置”,所以我猜现在这是一个“发送重置命令有什么目的?”的问题。解释了为什么我无法在 vim 文档中找到它。

Chr*_*ong 22

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

在此处输入图片说明


小智 12

即使不使用 screen 也会发生这种情况,我发现我可以通过清除运行 vim 的终端来恢复正常状态(我也用 tmux 但不是 screen 测试了这个:

:!clear
Run Code Online (Sandbox Code Playgroud)

  • 另一种选择:^Z 后跟 `fg`。 (2认同)

小智 7

此问题已在此处得到解答:在 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>
Run Code Online (Sandbox Code Playgroud)

肮脏的细节:

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

分离和重新附加屏幕会导致 ncurses 重新控制终端,它会重新应用它喜欢的所有设置,因此这可能是将事情恢复正常的最便携和最可靠的方法。

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