2012-12-12 11 views
8

に周りのウィンドウナビゲーションラップを持ってする方法はあります。明らかに、これがすべての方向で機能するのは便利です。一番右の窓から<kbd>はCtrl-W</kbd><kbd>K</kbd>を入力するとVIMに左端のウィンドウにフォーカスなるように、私はそれをしたいと思いVIM

主な動機はNERDTreeでの使用です。私は通常、次のセットアップを持っている:

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

私は現在、 はCtrl-WJを入力する必要がFile4と同じウィンドウ内に新しいファイルを開きたい場合は、それはかなりいいだろう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

関連する問題