vim - 如何 "rewrite"现有的 vim 键绑定(bind)?

标签 vim vim-tabular

我想分配 CTRL+L 转到下一个选项卡( :tabnext )。我把它放在 ~/.vimrc :

nmap <c-l> :tabnext<CR>
它工作得很好,但是当我在多个窗口上拆分屏幕时,我遇到了一个不工作的情况。似乎 CTRL+L 与默认分配的“重绘屏幕”操作冲突。例如,当我在中心窗口上按 CTRL+L 时,我什么也得不到(见截图):
enter image description here
但是,当我在左侧或右侧窗口上按下相同的按钮时,它工作正常..
我想我需要“重写”默认操作,不是吗?
我从终端使用 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/

相关文章:

bash - 如何在 Vim 中使用 quickfix 调试 Bash 脚本

windows - 我需要在我的电脑上手动设置 $VIMRUNTIME

linux - vim中的水平线

python-3.x - 复制 vim 中的行以在 ter 命令打开的上述窗口中执行?

VIM:标记的命名空间

regex - 在 Vim 中使用 Tabular 插件时如何忽略包含花括号的行?