如果我没看错的话,中间的窗口是 netrw(Vim 的标准文件管理插件),它不是自定义插件,但它仍然是一个插件。
如果您查看 :help netrw-ctrl-l
,您将看到它不仅仅是重新绘制 - 它还刷新目录。因此,它被映射从插件中,覆盖了 netrw 窗口默认的 ctrl-l 映射。
如果您在该窗口中执行 :verbose nmap <c-l>
,您将看到它的确切定义位置:在您的 Vim 安装中的 autoload/netrw.vim
文件中。在那里查找,我们可以找到以下代码片段:
if !hasmapto('<Plug>NetrwRefresh')
nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
endif
这段内容的意思是,如果<Plug>NetrwRefresh
没有绑定到任何键位,那么就将其绑定到<c-l>
。以下提供了一个简单的解决方案:由于netrw.vim
与其他所有内容一样,在.vimrc
文件之后加载,因此,如果你将这些映射定义为其他键位,则它们不会被分配给<c-l>
,从而不会覆盖你的映射。所以只需要在你的.vimrc
文件中添加如下代码:
nmap <unique> <c-r> <Plug>NetrwRefresh
然而,更好的方法是不要踩Vim的脚
.vimrc
文件中有以下内容:nmap NetrwRefresh
nmap :tabnext
nmap :tabprevious
但它仍然无法工作。我做错了什么? - Timur Fayzrakhmanov
nmap <c-l>
,并覆盖了你的绑定(因为插件是在.vimrc
之后执行的)。检查插件是否有配置变量可以防止绑定;如果没有,你可能需要编辑插件以删除绑定,或将你的绑定放在稍后执行的文件中。 - Amadan