作为 Linux 用户,我非常习惯使用ALT+left或在 vim/nano 中从一个单词跳转到另一个单词right。
这似乎无法在使用 iTerm 时正常工作,我正在使用 zsh,我尝试添加;
bindkey -e
bindkey '^[[1;9C' forward-word
bindkey '^[[1;9D' backward-word
它确实有效,但仅限于 zsh 内部,然后我注释了这些行并在 iTerm 中添加了键盘快捷键;
它确实有效,但只适用于ALTleft
我怎样才能让它也适用于右箭头?
答案1
在 iTerm 的属性中,转到配置文件 -> 密钥并在那里进行设置
- 用于⌥→发送转义序列
[1;5C
- 用于⌥←发送转义序列
[1;5D
答案2
首先查看终端发送给 vim 的键代码:
$ sed -n l
^[[1;9D
在上面的例子中,我运行了 sed 命令并按下Alt + Left。
这^[[1;9D
是发送到 vim 的转义序列,因此我们可以使用它进行映射。
添加至 vimrc:
map <Esc>[1;9D :tabn<CR>
macOS 的替代解决方案
如果sed -nl
没有按预期工作,请尝试 CTRL + V
您可以使用“control-V 技巧”来确定当前映射:首先按 control-V,然后按您要检查的按键。这将打印发送到终端的字符。 http://www.macfreek.nl/memory/Backspace_and_Delete_key_reversed
例如输入 control-V + delete
prints ^?
。我仅在 macOS 11 上验证了这一点。
答案3
我读了另一篇文章,其中描述了对于 option-left 和 option right,您需要分别将它们绑定到操作 ^[b 和 ^[f。也就是说,将它们绑定到“发送转义序列”并绑定键 b 和 f。
http://elweb.co/making-iterm-2-work-with-normal-mac-osx-keyboard-shortcuts/
答案4
还有另一种可能的解决方案,vim 本身提供了单词动作,请参阅:
:help word-motions