9

Ctrl-Wk右端のウィンドウから入力すると、VIM の左端のウィンドウがフォーカスされるようにしたいと思います。明らかに、これがすべての方向で機能すると便利です。

私の主な動機は、NERDTree を使用することです。私は通常、次の設定をしています。

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

File4現在入力しなければならないのと同じウィンドウで新しいファイルを開きたい場合2Ctrl-WjCtrl-Wk.

ありがとう。

4

2 に答える 2

6

You'd have to override the default commands in your $HOME/.vimrc with your own mappings that include this extra logic. When the normal move doesn't change the window any more (i.e. we're at the border already), jump to the other side.

"
" 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>
于 2012-12-13T08:02:47.630 に答える
3

使用できます

<C-w>w

<C-w>W

すべてのウィンドウをそれぞれ右/下および左/上に循環します。両方のコマンドが折り返されるため<C-w>w、ある時点で左上になり、ある時点で<C-w>W右下になります。

を参照してください:h window-move-cursor

または、単に<C-w>bwhich を使用して、ターゲット ウィンドウに直接移動します。

于 2012-12-12T21:42:19.693 に答える