我的理解是,Vim 无法区分<c-s-[key]>
和,因为它们映射到<c-[key]>
相同的 ascii 代码。同样,您无法映射、等,因为没有 ascii 表示。<c-i>
<tab>
<c-1>
<c-;>
我读到过一些人说这种限制是可以的,因为无论如何避免使用和弦/修饰语而使用单词更符合人体工程学(例如使用引导键)。但有些操作更适合和弦/修饰语(比如你可能会重复的东西)
我想问的是,为什么 Vim 一开始要这样设计?或者,既然 Vim 是开源的,为什么没有 Vim 或 GVim 版本添加对此的支持?对于一个可自定义程度如此之高的编辑器来说,以这种方式限制自己似乎是一种耻辱。有人能给我解释一下吗?
答案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 必须使用支持现代终端仿真器功能的更现代的库来检索原始键代码。挑战在于这些键代码在 Vim 源代码中的很多地方被(误用)使用,并且更新这样的中心结构很困难。
但截至今天,还没有补丁或志愿者提出,尽管许多人表示希望在未来的 Vim 8 主要版本中实现这一点。如果你认为这是一个痛点并且能够做出贡献,vim_dev 邮件列表邮件列表是志愿者服务的地方。
答案2
Vim 确实允许在箭头键上使用 <C- 和 <CS- 修饰符,因为这些组合由某些终端仿真器处理,但我认为仅此而已。它通常将自己限制为终端仿真器可以生成的键代码。
Vim 最初是这样设计的,因为它是 Vi 的改进版,而 vi 的设计初衷是与当时的 CRT 终端一起使用,这些终端可以发送和接收 ASCII 字符。从那时起,Vim 就根据在
:help design-goals
以下项目尤其相关:
- 尽量减少使用 CTRL 和其他修饰符,它们更难输入。
- 人们会从一个平台切换到另一个平台,从 GUI 切换到终端版本。所有版本都应该具备这些功能,或者至少在合理的努力下尽可能多地具备这些功能。尽量避免用户必须切换平台才能高效地完成工作。
- Vim 不是一款花哨的 GUI 编辑器,它试图以牺牲跨平台一致性为代价来获得美观。但实用的 GUI 特性受到欢迎。
因此,一般会避免使用只能从 GUI 而不是终端仿真器获得的键码,以便可以在 gvim 中完成的所有操作都可以在 vim 中完成。大多数 Vim 用户认为这是一项功能。
答案3
vim-dev 邮件列表可能是回答这个问题更好的地方。
您能否详细说明一下这部分:“喜欢您可能会重复的事情”?
无论如何,一个能满足你需求的 vim 是不存在的,因为没有足够多的用户关心这一点。和弦既是一场人体工程学噩梦,也是非模式编辑限制的结果。当你删除所有操作系统级别的快捷键时,你的映射根本没有足够的可用键,这迫使你反过来构建复杂而不切实际的和弦。并不比想象中<C-S-w>
更好。,w
Vim 的方法,通过诸如,bc
或任何您想要的按键序列,具有更强的可扩展性并且对您的身体更加温和。