我想分配 CTRL+L 转到下一个选项卡( :tabnext
)。我把它放在 ~/.vimrc
:
nmap <c-l> :tabnext<CR>
它工作得很好,但是当我在多个窗口上拆分屏幕时,我遇到了一个不工作的情况。似乎 CTRL+L 与默认分配的“重绘屏幕”操作冲突。例如,当我在中心窗口上按 CTRL+L 时,我什么也得不到(见截图):但是,当我在左侧或右侧窗口上按下相同的按钮时,它工作正常..
我想我需要“重写”默认操作,不是吗?
我从终端使用 vim。
最佳答案
如果我没记错的话,中间的窗口是 netrw(Vim 的文件管理标准插件)。它不是自定义插件,但它仍然是一个插件。
如果你看看:help netrw-ctrl-l
,您会看到它不仅仅是重绘 - 它还刷新了目录。因此它是从插件映射的,仅覆盖 netrw 窗口的默认 ctrl-l 映射。
如果执行 :verbose nmap <c-l>
在该窗口中,您将准确看到它的定义位置:在 autoload/netrw.vim
中在你的 Vim 安装文件中。在那里,我们找到了这个片段:
if !hasmapto('<Plug>NetrwRefresh')
nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
endif
其中说,如果
<Plug>NetrwRefresh
不绑定(bind)任何东西,然后绑定(bind)<c-l>
.这提供了一个简单的解决方案:因为 netrw.vim
与其他所有内容一样,在 .vimrc
之后加载,如果您将这些映射定义为其他键,它们将不会分配给 <c-l>
,并且您的映射不会被覆盖。因此,只需在您的 .vimrc
中执行此操作即可: nmap <unique> <c-r> <Plug>NetrwRefresh
但是,更好的方法是不要踩到 Vim 的脚趾。
关于vim - 如何 "rewrite"现有的 vim 键绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33351179/