也许这与VI的传统禅相反,但是当涉及到在Vi中使用重新绑定键时,我会非常不知所措,特别是可以/不能绑定的内容。自从使用可视模式选择/复制/粘贴移动到nvim以及在插入模式下无法再访问Home / End以跳转到行的开头/结尾时,我特别头疼。
我在考虑解决这个问题,就像我使用我的tmux配置一样,它会发出一个命令来取消绑定我的vimrc中的所有键,然后重新绑定它们。这样,对于绑定是什么并没有混淆,我可以随时轻松地更改和引用更改。我是不是错了?
答案 0 :(得分:2)
你真的不能这样做。 Vim将“内置映射”视为与“用户定义的映射”不同。你无法真正“取消映射”内置映射。
从技术上讲,它将内置映射存储在与使用:map
定义的用户定义映射不同的C结构中。当你执行:unmap
时,它只是将其从用户定义的结构中删除(顺便说一句,我给了一个简短的 - 但不完整 - 概述了上周在How to find out what a key is mapped to? vi.SE上的工作原理。) / p>
你唯一能做的就是:
" Remap all ascii characters; everything below 33 is a control character
for i in range(33, 127)
" | needs some extra love
if i == 124 | continue | endif
execute 'nnoremap ' . nr2char(i) . ' <Nop>'
execute 'nnoremap <C-' . nr2char(i) . '> <Nop>'
endfor
" The above won't remap stuff like `<F1>`, `<Up>`
nnoremap <Bar> <Nop>
nnoremap <F1> <Nop>
nnoremap <Up> <Nop>
" ... etc ... You can use a loop for this as well...
" Now make our own mappings
nnoremap : :
" ...etc...
同样适用于vnoremap
等,但这不会重新映射<C-w><C-w>
,gJ
等,因此您需要为此添加更多例外(“第二个键“对于这些映射甚至不在结构中,而是switch
/ case
!)
然而。 不要这样做。因为现在依靠你的vimrc你和只有你才能理解。只需学习默认映射。这意味着您可以使用任何开箱即用的Vim安装,并且您的映射不会以某种方式比默认映射“更好”。
答案 1 :(得分:1)
您可以将此行放在vimrc
顶部附近,将所有选项重置为默认值:
set all&
但你不能真实地希望用一个命令“解除绑定”“默认绑定”,因为:
您可以将每个默认命令重新映射到<nop>
(:help <nop>
),但这听起来像很多工作,但收效甚微。