Vim中的基本重映射

3

我还是无法理解在Vim中重新映射按键。我在我的vimrc文件中有以下内容:

" This works
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" But this doesn't?
nnoremap <C-+> <C-w>> " Should map to Ctrl +
nnoremap <C--> <C-w>< " Should map to Ctrl -

我想重新映射窗口大小调整的键绑定,因为它们有些笨拙。按太多次键却移动很少。但是,如果底部两个键的写法与顶部两个完全相同,为什么它们就无法工作呢?


3
不要在 nnoremaps 中添加注释,因为它们不是注释。 - undefined
1
我在事后添加了那个注释,只是为了更清楚一些,我的vimrc文件并不是那样的,但还是谢谢你提醒我。 - undefined
2个回答

3

我认为关键点在于ASCII码中CTRL修饰符的历史意义。在我的系统(Mac OS X,Vim 7.3)中,当我在GUI的插入模式下键入<C-+>时,会得到一个=,而在终端中尝试时则会发出哔声。

简而言之,不是每个按键都可以通过<C->进行修改。


3
由于键盘输入的内部处理方式,即使在GVIM中,通常也无法实现这一点。某些键组合,例如 Ctrl + 非字母按键 无法映射,而 Ctrl + 字母Ctrl + Shift + 字母 无法区分(除非您的终端为其发送不同的 termcap 代码,但大多数终端都不会)。在插入或命令行模式下,尝试键入键组合。如果没有发生任何事情/被插入,则无法使用该键组合。这也适用于 <Tab> / <C-I><CR> / <C-M> / <Esc> / <C-[> 等(唯一的例外是 <BS> / <C-H>)。这是已知的痛点,并且是 vim_dev 和 #vim IRC 频道上各种讨论的主题。

有些人(尤其是Paul LeoNerd Evans)希望解决这个问题(即使是在支持此功能的终端中的控制台Vim),并提出了各种建议

但截至今天,尚未出现任何补丁或志愿者,尽管许多人表示希望在未来的Vim 8主要版本中实现此功能。


哇,我完全不知道这是个如此热门的话题。谢谢。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接