在vim中,默认情况下, Ctrl + [的行为类似于 Esc 。但是,我想重新绑定 Ctrl + [来执行自定义操作。 (具体来说,对于 Ctrl-t ,因为我发现 [和] 更自然地为ctags提供补充操作。)
但是,当我执行命令时:
:nnoremap <C-[> <C-t>
然后我的箭头键导航搞砸了。我不确定会发生什么,但很明显,这不是理想的做法。
我试图取消绑定 Ctrl + [但是vim报告说它没有绑定,我尝试了一些技巧首先绑定 Ctrl + [到自身然后解除绑定。总是一样的结果。
附注:有趣的是,当我将它添加到我的.vimrc
(作为最后一个命令)时,情况会更糟。发生了一些不确定的事情,vim会在以下三种状态之一中随机打开:
底部状态行显示&#34; E73:标记堆栈为空&#34;,表示它收到 Ctrl + t -esque命令,但是如果我点击像 j 这样的导航键,它会删除当前和底线,然后将我置于插入模式。 (约占70%的时间。)
有时它处于替换模式。 (约占15%的时间。)
有时它处于正常模式。 (约占15%的时间。)
如何正确地将 Ctrl + [重新映射到.vimrc
中的其他功能?
答案 0 :(得分:3)
您无法重新绑定 Ctrl [。按终端中的退出键发送 Ctrl [,就像按Tab键发送 Ctrl I 一样。没有单独的 Esc 代码。
当你尝试这个时,Vim可能会疯狂地行动,因为基本上每个ANSI键序列都以 Ctrl [开头,因此你的重新绑定会在所有终端输入< / em>,以及键序列中的其他内容看起来像vim的更多命令。
答案 1 :(得分:2)
由于内部处理键盘输入的方式,遗憾的是,即使在GVIM中,这在今天也是不可能的。某些组合键,例如 Ctrl +非字母无法映射, Ctrl + letter vs. Ctrl + Shift +字母无法区分。 (除非您的终端为其发送不同的 termcap 代码,但大多数代码都没有。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/插入,则无法使用该组合键。这也适用于<Tab>
/ <C-I>
,<CR>
/ <C-M>
/ <Esc>
/ <C-[>
等。(只有<BS>
例外/ <C-H>
。)这是一个众所周知的痛点,也是关于vim_dev和#vim IRC频道的各种讨论的主题。
有些人(最重要的是Paul LeoNerd Evans)希望解决这个问题(即使是支持Vim的终端中的控制台Vim),并提出了各种提案,cp。 http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
但截至今天,尚未有任何补丁或志愿者挺身而出,尽管许多人表示希望在未来的Vim 8主要版本中有这个。