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

是否在vimrc中包含所有默认绑定?,vim,neovim,Vim,Neovim,也许这与传统的禅宗VI不符,但当我在VI中使用重新绑定键时,我感到非常不知所措,尤其是那些可以/不能绑定的键。自从使用视觉模式选择/复制/粘贴到nvim,以及在插入模式下无法再访问Home/End以跳转到行的开始/结束后,我特别头疼 我在想,解决这个问题的方法,就像我在tmux配置中所做的那样,就是发出一个命令来解除vimrc中所有键的绑定,然后重新绑定它们。这样,就不会混淆绑定是什么,我可以随时轻松地更改和引用更改。我这样做完全错了吗?您可以将这一行放在vimrc顶部附近,将所有选项重置为默认

也许这与传统的禅宗VI不符,但当我在VI中使用重新绑定键时,我感到非常不知所措,尤其是那些可以/不能绑定的键。自从使用视觉模式选择/复制/粘贴到nvim,以及在插入模式下无法再访问Home/End以跳转到行的开始/结束后,我特别头疼


我在想,解决这个问题的方法,就像我在tmux配置中所做的那样,就是发出一个命令来解除vimrc中所有键的绑定,然后重新绑定它们。这样,就不会混淆绑定是什么,我可以随时轻松地更改和引用更改。我这样做完全错了吗?

您可以将这一行放在
vimrc
顶部附近,将所有选项重置为默认值:

set all&
但实际上,您不能希望用一个命令“解除绑定”“默认绑定”,因为:

  • 它们不是“绑定”,而是“命令”
  • 反正也没有这样的命令

您可以将每个默认命令重新映射到
:help
),但这听起来需要做大量的工作,但几乎没有什么好处。

您可以将这一行放在
vimrc
顶部附近,将所有选项重置为默认值:

set all&
但实际上,您不能希望用一个命令“解除绑定”“默认绑定”,因为:

  • 它们不是“绑定”,而是“命令”
  • 反正也没有这样的命令

您可以将每个默认命令重新映射到
:help
),但这听起来需要做大量的工作,却没有什么好处。

您不能真正做到这一点。Vim处理“内置映射”与“用户定义映射”不同。您无法真正“取消映射”内置映射

从技术上讲,它将内置映射存储在与使用
:map
定义的用户定义映射不同的C结构中。当您执行
:unmap
时,它只是将其从用户定义的结构中删除(顺便提一下,我给出了一个简短的说明)− 但不完整− 上周在(at vi.SE)中概述了这一点

你唯一能做的就是:

" 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...
“重新映射所有ascii字符;33以下的所有字符都是控制字符
对于范围内的i(33127)
“|需要一些额外的爱
如果i==124 |继续|结束
执行“nnoremap”。nr2char(一)。”
执行'nnoremap'
外循环
“以上内容不会重新映射像``这样的内容``
nnoremap
nnoremap
nnoremap
" ... 等你也可以使用一个循环。。。
“现在制作我们自己的映射
nnoremap::
“……等等。。。
对于
vnoremap
等也一样。但这不会重新映射
gJ
等。因此,您需要为其添加更多的异常(这些映射的“第二个键”甚至不在结构中,而是一个
开关
/
大小写
!)


不过不要这样做。因为现在依靠你的vimrc,你和只有你能理解。只需学习默认映射。这意味着您可以使用任何现成的Vim安装,并且您的映射不会比默认映射“更好”。Vim处理“内置映射”与“用户定义映射”不同。您无法真正“取消映射”内置映射

从技术上讲,它将内置映射存储在与使用
:map
定义的用户定义映射不同的C结构中。当您执行
:unmap
时,它只是将其从用户定义的结构中删除(顺便提一下,我给出了一个简短的说明)− 但不完整− 上周在(at vi.SE)中概述了这一点

你唯一能做的就是:

" 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...
“重新映射所有ascii字符;33以下的所有字符都是控制字符
对于范围内的i(33127)
“|需要一些额外的爱
如果i==124 |继续|结束
执行“nnoremap”。nr2char(一)。”
执行'nnoremap'
外循环
“以上内容不会重新映射像``这样的内容``
nnoremap
nnoremap
nnoremap
" ... 等你也可以使用一个循环。。。
“现在制作我们自己的映射
nnoremap::
“……等等。。。
对于
vnoremap
等也一样。但这不会重新映射
gJ
等。因此,您需要为其添加更多的异常(这些映射的“第二个键”甚至不在结构中,而是一个
开关
/
大小写
!)


不过不要这样做。因为现在依靠你的vimrc,你和只有你能理解。只需学习默认映射。这意味着您可以使用任何现成的Vim安装,并且您的映射不会比默认映射“更好”。

只需使用
0
$
e
b
?这需要离开插入模式,因此需要多次按键,我的问题远不止这些。我知道,也许太宽了。IMHO insert模式的全部要点是仅将其用于insert。将caps lock重新映射到esc,速度很快。您能否显示您的
.tmux.conf
,以便我们更好地了解您想要什么?有效地清除所有键映射,然后绑定所有键。只需使用
0
$
e
b
?这需要离开插入模式,因此需要不止一次按键,我的问题比这更广泛。我知道,可能太广泛了。IMHO insert模式的全部要点是仅将其用于insert。将caps lock重新映射到esc,速度很快。您能否显示您的
.tmux.conf
,以便我们更好地了解您想要什么?有效地清除所有键映射,然后绑定所有键。这就是我需要的答案。谢谢,这是我需要的答案。非常感谢。