如何重新绑定Ctrl-[in.vimrc

如何重新绑定Ctrl-[in.vimrc,vim,Vim,在vim中,Ctrl+[默认情况下与Esc类似。但是,我想重新绑定Ctrl+[以执行自定义操作。(特别是Ctrl-t,因为我发现,[和]对CTAG具有补充操作更为自然。) 但是,当我执行命令时: :nnoremap 我不知道会发生什么,但显然这不是一个理想的方法 我试着解除Ctrl+[但vim报告说它没有绑定,我尝试了一些技巧,比如先将Ctrl+[绑定到自身,然后解除绑定。结果总是一样的 旁注:有趣的是,当我将它添加到我的.vimrc(作为最后一个命令)中时,情况更糟。发生了一些不确定的情况,v

在vim中,Ctrl+[默认情况下与Esc类似。但是,我想重新绑定Ctrl+[以执行自定义操作。(特别是Ctrl-t,因为我发现,[和]对CTAG具有补充操作更为自然。)

但是,当我执行命令时:

:nnoremap

我不知道会发生什么,但显然这不是一个理想的方法

我试着解除Ctrl+[但vim报告说它没有绑定,我尝试了一些技巧,比如先将Ctrl+[绑定到自身,然后解除绑定。结果总是一样的

旁注:有趣的是,当我将它添加到我的
.vimrc
(作为最后一个命令)中时,情况更糟。发生了一些不确定的情况,vim在以下三种状态中随机打开:

  • 底部状态行显示“E73:tag stack empty”,这意味着它收到了一个Ctrl+t-esque命令,但是如果我按了像j这样的导航键,它会删除当前行和底部行,然后将我置于插入模式(大约70%的情况下发生)

  • 有时它处于替换模式(发生率约为15%)

  • 有时是在正常模式下(发生率约为15%)

如何正确地将Ctrl+[重新映射到
.vimrc
中的不同功能?

您不能重新绑定Ctrl[。在终端中按Escape键发送Ctrl[,就像按Tab键发送CtrlI一样。没有单独的Esc代码


当您尝试此操作时,Vim可能表现得很疯狂,因为基本上每个ANSI键序列都以Ctrl开头[,因此您的重新绑定将在所有终端输入上启动,而键序列中的任何其他内容看起来都像是对vim的更多命令。

由于键盘输入是在内部处理的,不幸的是,这在今天通常是不可能的,即使在GVIM中也是如此。一些组合键,如Ctrl+非字母键,无法映射,而Ctrl+字母键vs.Ctrl+Shift+字母无法区分。(除非您的终端为其发送了一个不同的termcap代码,而大多数终端都不这样做。)在插入或命令行模式下,尝试键入组合键。如果没有发生任何情况/插入,则无法使用该组合键。这也适用于
/
/
/
等。(唯一的例外是
/
)这是一个已知的痛点,也是关于vim_dev和#vim IRC通道的各种讨论的主题

一些人(最重要的是Paul LeoNerd Evans)希望解决这一问题(即使是支持这一点的终端中的console Vim),并提出了各种建议,cp


但是到今天为止,还没有补丁或志愿者出现,尽管许多人表示希望在未来的Vim 8主要版本中使用它。

没有“充当
”,它是
,箭头键被编码为
A
…无论你映射到
什么,只要Vim希望
在我的机器上默认映射到
:pop
,就会执行。@roomainl:你能解释一下“is
”吗?@B-Con转义键在tty上按字面编码为
C-[
。按
Esc
和按
C-[
之间绝对没有区别。vim无法分辨区别,因为没有区别。而且,基本上所有ANSI键码都以
Esc
/
C开头-[
,重新映射它会让vim对所有终端输入做出疯狂的反应。谢谢,我不知道。看来重新绑定
C-[
是不可能的。如果你写了这个,这是一个有效的答案。