2011-07-10 85 views
6

在VIM中使用拆分窗口時,有時會創建在另一個拆分中已打開的文件的新拆分(通常使用插件在新拆分中爲給定文件打開單元測試)。Vim拆分,除非打開

有沒有辦法如何重新分割split命令,以便它在分裂之前檢查文件是否已經打開,如果是,請關注它?

回答

9

不能重新映射現有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

太棒了,感謝日誌 – iNecas

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' 
0

那的searchInRuntime的特點之一。

:GSplit:GVSplit可以重命名,它們支持文件名完成,當&path中有幾個匹配模式時,它們會詢問打開哪個文件。

+0

聽起來像一個美妙的插件,你知道它如何可以通過vundle或病原體安裝嗎? – Erik

+0

我不知道。我鼓勵使用vim-addon-manager代替。與其競爭對手不同,VAM處理依賴關係,我的所有插件都依賴於另一個(庫)插件列表(我也在維護)。最後,這種方式更容易。 否則,您必須將SVN存儲庫的URL提供給vundle或病原體。 –

+0

從未聽說過VAM,會試試看,謝謝。 – Erik