我想指定 CTRL + L 转到下一个标签(:tabnext
)。我把它放在~/.vimrc
:
nmap <c-l> :tabnext<CR>
它工作正常,但是当我在几个窗口上分割屏幕时,我遇到了一个不起作用的情况。似乎 CTRL + L 与默认分配的“重绘屏幕”操作冲突。例如,当我在中心窗口按 CTRL + L 时,我什么也得不到(见截图):
然而,当我在左侧或右侧窗户上按下它时,它工作正常.. 我想我需要“重写”默认动作,不是吗?
我在终端使用vim。
答案 0 :(得分:4)
如果我没有弄错的话,中间的窗口是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的脚趾。
答案 1 :(得分:1)
Netrw v155a(参见http://www.drchip.org/astronaut/vim/index.html#NETRW)通过不同地映射ctrl-L解决了这个问题;它现在调用(未重新映射)ctrl-L作为其刷新的一部分。因此,即使在netrw窗口中,ctrl-L也可以刷新所有窗口。