在VIM中使用拆分窗口时,有时我会创建已在另一个拆分中打开的文件的新拆分(通常使用插件在新拆分中打开给定文件的单元测试)。
有没有办法重新映射split命令,以便在拆分之前检查文件是否已经打开,如果是,请关注它?
答案 0 :(得分:10)
据我所知,您无法重新映射现有的split
命令,但是您可以通过编写新函数Split
然后使用命令模式缩写来实现相同的效果( cabbrev
)。
这是一个应该做你想做的功能/映射。
function! MySplit( fname )
let bufnum=bufnr(expand(a:fname))
let winnum=bufwinnr(bufnum)
if winnum != -1
" Jump to existing split
exe winnum . "wincmd w"
else
" Make new split as usual
exe "split " . a:fname
endif
endfunction
command! -nargs=1 Split :call MySplit("<args>")
cabbrev split Split
请注意,这只会“检查”当前选项卡中的现有拆分,并忽略隐藏缓冲区。 (但是,添加更多案例以增强此功能应该不会太困难。)
答案 1 :(得分:3)
替代方案是使用:drop {file}
。
Edit the first {file} in a window.
- If the file is already open in a window change to that
window.
- If the file is not open in a window edit the file in the
current window. If the current buffer can't be abandoned,
the window is split first.
同样使用:sb
切换缓冲区也可能有用。见vim: move to buffer?
了解更多信息:
:h :drop
:h :sb
:h 'swb'
答案 2 :(得分:0)
这是searchInRuntime的功能之一。
可以重命名 :GSplit
和:GVSplit
,它们支持文件名完成,当多个文件与&path
中的模式匹配时,他们会询问要打开哪个文件。