2010-10-21 77 views
3

當我有好幾個窗口在VIM開放,我想總是跳過他們中的一個(含使用ARIC布魯默的項目插件我的項目之一),每當我按下Ctrl-W_W 。跳過VIM用Ctrl-W_W窗口

換句話說,我想循環我的文檔窗口,就好像工程窗口是不是其中之一。當我真的想進入項目窗口時,我將使用我爲此創建的映射。

有沒有一種方法以便它按Ctrl-W_W跳過,或者我需要一個腳本標記一個窗口?我很喜歡Vim,但我仍然處於學習曲線的陡峭部分。

+1

'按Ctrl + W_W'或'鍵Ctrl + W + W' ?? – abatishchev 2010-10-21 18:04:05

+0

也沒有.:h CTRL-W_W。 OP是正確的。 – 2010-10-21 19:10:50

回答

6

你將不得不編寫一個函數(它更容易維護),其循環到下一個窗口,如果你不想去到Windows的名稱相匹配跳過它。

是這樣的:

function! s:NextWindowBut(skip,dir) 
    let w0 = winnr() 
    let nok = 1 
    while nok 
    " exe "normal! \<c-W>w" 
    " or better 
    exe 'wincmd '.a:dir 
    let w = winnr() 
    let n = bufname('%') 
    let nok = (n=~a:skip) && (w != w0) 
    " echo "skip(".n."):".(n=~a:skip)." w!=w0:".(w != w0)." --> ".nok 
    endwhile 
    if w == w0 
    echomsg "No other acceptable window" 
    endif 
endfunction 

nnoremap <silent> <C-W>w :call <sid>NextWindowBut('thepattern','w')<cr> 
nnoremap <silent> <C-W>W :call <sid>NextWindowBut('thepattern','W')<cr> 
+0

謝謝,這很好,而且對於闡明構建其他腳本所需的關鍵概念也非常有用! – proFromDover 2010-10-21 16:59:54

+0

我希望我可以不止一次地對此讚不絕口。 – GWW 2010-10-21 18:43:13

+0

不要。 :)它遠非完美:它缺少所有的腳本包裝(在自動加載插件中用於惰性(和快速)加載的函數,在帶有參數的非可重入插件中映射以調整來自vimrc的映射) – 2010-10-21 19:15:46