vim - 有没有一种方法可以在VIM中环绕窗口导航

标签 vim macvim nerdtree

我想要这样,以便从最右边的窗口中输入Ctrl-Wk将使VIM中最左边的窗口聚焦。显然,这在所有方向上都是很方便的。

我的主要动机是与NERDTree一起使用。我通常具有以下设置:

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

如果我想在与File4相同的窗口中打开一个新文件,则当前必须键入2Ctrl-Wj,并且用Ctrl-Wk达到相同的结果将是非常不错的。

谢谢。

最佳答案

您必须使用自己的映射(包括此额外的逻辑)覆盖$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>

关于vim - 有没有一种方法可以在VIM中环绕窗口导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848429/

相关文章:

linux - 在vi中正确配置退格键

vim - 操作拆分时忽略 NerdTree 缓冲区

vim:打开NERDTree,将光标移动到文件编辑区

regex - VIM - 将普通模式函数转换为命令模式函数

vim - 使用 vim 作为编辑器,而使用 emacs 作为代码格式化程序

linux - 如何使用 Shell 脚本在 VIM 中的关键字前添加几行

vim - :vimgrep and the quickfix window in MacVim

vim - 使用鼠标选择时禁用 Macvim 滚动

vim - 如何切换进出 NERDtree?

Vim NERDTree : show only . txt 文件?