我希望从最右边的窗口输入 Ctrl-W k 将最左边的窗口聚焦在VIM中。显然,在各个方向上工作会很方便。
我的主要动机是与NERDTree一起使用。我通常有以下设置:
|----------|----------|-----------|
| | | |
| NERDTree | File1 | File2 |
| | | |
| |----------|-----------|
| | | |
| | File3 | File4 |
| | | |
|----------|----------|-----------|
如果我想在与File4
相同的窗口中打开一个新文件,我当前必须输入 2 Ctrl-W j 用 Ctrl-W k 获得相同的结果会很不错。
感谢。
答案 0 :(得分:5)
您必须使用自己的包含此额外逻辑的映射覆盖$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 :(得分:2)
可以使用
<C-w>w
和
<C-w>W
分别在所有窗口中向右/向下和向左/向上循环。这两个命令都会回绕,因此<C-w>w
会在某个时刻向左上方结束,<C-w>W
将在某个时刻向右下方结束。
请参阅:h window-move-cursor
。
或者只使用直接进入目标窗口的<C-w>b
。