Vim:如何映射Ctrl-M而不影响Return keypress?

ust*_*sta 16 vim

我要地图Ctrl- MCtrl- N插入模式.如果我根本就imap <C-M> <C-N>那么Ctrl- M也开始表现就像Ctrl- N,但随后按Enter不一样的好.我想按Return键继续插入新行,同时make Ctrl- M插入下一个关键字完成匹配就像Ctrl- N确实如此.那可能吗?

编辑:我设法修改Vim的源代码,无条件地处理Ctrl- Mas Ctrl- N而不影响Return.在这样做的同时,我也意识到在没有源代码更改的情况下确实没有办法做到这一点,因为实际上被压缩的东西之间的区别 - EnterCtrl- M似乎在按键处理中过早消失.它发生在依赖于平台的UI模块中,并且按键处理中的可移植代码部分已经不知道是否Ctrl- M或者实际按下了返回导致密钥代码13的返回.

我的修改是在FreeBSD(GTK)和Windows的GUI模块中,因为那些是我最常用的gvim平台.

PS如果有人想要实现同样的目标,请随时给我留言.

PPS对所有提供这个问题答案的人:非常感谢!你的评论给了我很多帮助.

Ben*_*oit 6

:help key-notation明确指出CTRL-M等同于Enter.这是因为回车符是ASCII字符号.13和M是字母表的第13个字母.


Kim*_*son 2

如果您使用的是 Windows,并且活动窗口是 vim,则可以在插入模式下使用 Autohotkey 重新映射 Ctrl-M。

ahk 脚本可能看起来像这样:

 #IfWinActive, Write: ahk_class GVIM
 ^M::^N
Run Code Online (Sandbox Code Playgroud)

或者,您可以考虑提高盲打技能(我怀疑您想听到这个解决方案,但我仍然认为这是一个有效的建议)以避免混淆 Ctrl-M 和 Ctrl-N。

如果您使用某种风格的 Linux,我不确定哪些工具可以相当于 autohotkey。

另一种选择是映射一个完全不同的键来让您执行自动完成,而不是使用 ctrl-n,例如 Ctrl-K: :inoremap <c-k> <c-n>