在vimrc中包含所有默认绑定?

时间:2016-03-24 16:47:49

标签: vim neovim

也许这与VI的传统禅相反,但是当涉及到在Vi中使用重新绑定键时,我会非常不知所措,特别是可以/不能绑定的内容。自从使用可视模式选择/复制/粘贴移动到nvim以及在插入模式下无法再访问Home / End以跳转到行的开头/结尾时,我特别头疼。

我在考虑解决这个问题,就像我使用我的tmux配置一样,它会发出一个命令来取消绑定我的vimrc中的所有键,然后重新绑定它们。这样,对于绑定是什么并没有混淆,我可以随时轻松地更改和引用更改。我是不是错了?

2 个答案:

答案 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>),但这听起来像很多工作,但收效甚微。