如何";重写;现有vim密钥绑定?
我想指定CTRL+L进入下一个选项卡(如何";重写;现有vim密钥绑定?,vim,vim-tabular,Vim,Vim Tabular,我想指定CTRL+L进入下一个选项卡(:tabnext)。我把它放在~/.vimrc: nmap <c-l> :tabnext<CR> nmap <unique> <c-r> <Plug>NetrwRefresh nmap:tabnext 它工作得很好,但当我在几个窗口上拆分屏幕时,它就不工作了。似乎CTRL+L与默认指定的“重画屏幕”操作冲突。例如,当我在中心窗口上按CTRL+L时,我什么也得不到(请参见屏幕截图): 但是,
:tabnext
)。我把它放在~/.vimrc
:
nmap <c-l> :tabnext<CR>
nmap <unique> <c-r> <Plug>NetrwRefresh
nmap:tabnext
它工作得很好,但当我在几个窗口上拆分屏幕时,它就不工作了。似乎CTRL+L与默认指定的“重画屏幕”操作冲突。例如,当我在中心窗口上按CTRL+L时,我什么也得不到(请参见屏幕截图):
但是,当我在左窗或右窗上按相同的按钮时,效果很好。。
我想我需要“重写”默认操作,不是吗
我使用终端的VIM。
< P>中间的窗口,如果我没有错的话,是NETRW(VIM标准的文件管理插件)。它不是一个自定义插件,但它仍然是一个插件 如果您查看一下:help netrw-ctrl-l
,您将看到它不仅仅是一个重画,它还刷新目录。因此,它是从插件映射的,仅覆盖netrw窗口的默认ctrl-l映射
如果在该窗口中执行:verbose nmap
,您将看到它的确切定义位置:在vim安装中的autoload/netrw.vim
文件中。看看这里,我们发现了以下片段:
if !hasmapto('<Plug>NetrwRefresh')
nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
endif
但是,更好的方法是不要踩到Vim的脚。Netrw v155a(请参阅)通过以不同方式映射ctrl-L来解决此问题;它现在调用(未重新映射)ctrl-L作为其刷新的一部分。因此,即使在netrw窗口中,ctrl-L也会刷新所有窗口。我认为,管理中心窗口的插件会执行自己的
nmap
,并覆盖您的绑定(因为插件在.vimrc
之后执行)。检查插件是否有阻止绑定的配置变量;如果没有,您可能需要编辑插件以删除绑定,或者将绑定放在稍后执行的文件中。我不使用任何自定义插件,只使用默认安装在Ubuntu中的Vim 7.4。我不知道Vim good,使用时间不到1周,请您详细解释一下您的意思好吗?现在我在.vimrc
中有以下内容:nmap NetrwRefresh\n nmap:tabnext\n nmap:tabprevious
。但它仍然不起作用。我做错了什么?