2012-12-12 86 views
8

我希望能夠從最右邊的窗口打字Ctrl-Wk將把最左邊的窗口聚焦在VIM中。顯然,這對於所有方向的工作都很方便。有沒有一種方法在VIM中有窗口導航換行

我的主要動機是用於NERDTree。我通常有以下設置:

|----------|----------|-----------| 
|   |   |   | 
| NERDTree | File1 | File2 | 
|   |   |   | 
|   |----------|-----------| 
|   |   |   | 
|   | File3 | File4 | 
|   |   |   | 
|----------|----------|-----------| 

如果我想在同一個窗口中打開一個新的文件作爲File4我現在必須鍵入 按Ctrl-WĴ,這將是相當不錯的以達到與同樣的效果Ctrl-Wk

謝謝。

+0

你一定要編寫一些代碼來完成它,並將其映射到所需的鍵組合。檢查':h window-move-cursor';移動命令在那裏列出。 – plesiv

+0

這是我的想法。不幸的是,我並不熟悉VIM腳本只是:) – Wes

回答

2

一個可以使用的

<C-w>w 

<C-w>W 

循環通過所有窗口向右/向下和向左分別/上。這兩個命令都會環繞,所以<C-w>w將在某個點結束左上角,<C-w>W將在某個點結束右下角。

請參閱:h window-move-cursor

或者直接使用<C-w>b直接進入您的目標窗口。

4

您必須覆蓋$HOME/.vimrc中的默認命令,並使用包含此額外邏輯的自己的映射。當正常移動不再改變窗口(即我們已經在邊界)時,跳轉到另一邊。

" 
" Wrap window-move-cursor 
" 
function! s:GotoNextWindow(direction, count) 
    let l:prevWinNr = winnr() 
    execute a:count . 'wincmd' a:direction 
    return winnr() != l:prevWinNr 
endfunction 

function! s:JumpWithWrap(direction, opposite) 
    if ! s:GotoNextWindow(a:direction, v:count1) 
    call s:GotoNextWindow(a:opposite, 999) 
    endif 
endfunction 

nnoremap <silent> <C-w>h :<C-u>call <SID>JumpWithWrap('h', 'l')<CR> 
nnoremap <silent> <C-w>j :<C-u>call <SID>JumpWithWrap('j', 'k')<CR> 
nnoremap <silent> <C-w>k :<C-u>call <SID>JumpWithWrap('k', 'j')<CR> 
nnoremap <silent> <C-w>l :<C-u>call <SID>JumpWithWrap('l', 'h')<CR> 
nnoremap <silent> <C-w><Left> :<C-u>call <SID>JumpWithWrap('h', 'l')<CR> 
nnoremap <silent> <C-w><Down> :<C-u>call <SID>JumpWithWrap('j', 'k')<CR> 
nnoremap <silent> <C-w><Up> :<C-u>call <SID>JumpWithWrap('k', 'j')<CR> 
nnoremap <silent> <C-w><Right> :<C-u>call <SID>JumpWithWrap('l', 'h')<CR> 
+1

垃圾,由於某種原因跳過netrw – mcandre

相關問題