如何在 Vim 中映射按住Ctrl和按下?;
它在我的 Linux 终端上不起作用。Ctrl-放入我的 vimrcl后工作正常,但什么也不做。<c-l> some_action
<c-;> some_action
答案1
由于键盘输入的内部处理方式,不幸的是,这在今天通常是不可能的,即使在 GVIM 中也是如此。某些组合键,例如Ctrl+ 非字母组合无法映射,并且无法区分Ctrl+ 字母与Ctrl+ + 字母。 Shift(除非你的终端发送一个不同的术语帽代码,但大多数都没有。)在插入或命令行模式下,尝试键入组合键。如果没有发生/插入,则无法使用该组合键。这也适用于<Tab>
/ <C-I>
、<CR>
/ <C-M>
/ <Esc>
/<C-[>
等(唯一例外是<BS>
/ <C-H>
。)这是一个已知的痛点,也是 vim_dev 和 #vim IRC 频道上各种讨论的主题。
有些人(首先是 Paul LeoNerd Evans)想要解决这个问题(即使是支持此功能的终端中的控制台 Vim),并提出了各种建议,cp。http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
但截至今天,还没有补丁或志愿者主动提出,尽管许多人表示希望在未来的 Vim 8 主要版本中提供此功能。
答案2
如果您在 GUI 或某种窗口管理器中工作,您可以将其配置为在键入 时向您的终端应用程序或 Gvim 应用程序发送不同的击键Ctrl;。您需要告诉它发送 vim 可以理解的击键,但这对您来说更难输入。
例如,您可以映射Ctrl;到Ctrl^(我发现很难键入),然后Ctrl^在.vimrc
.
我已经在 Mac OS X 上使用 Keyboard Maestro 完成了这种事情。当然,这设置起来有点烦人,并且只能在您专门配置的环境中使用,但是优化常见情况可以在从长远来看。