【问题标题】:Is there a way to have window navigation wrap around in VIM有没有办法在 VIM 中环绕窗口导航
【发布时间】:2015-02-17 10:11:12
【问题描述】:

我希望这样在最右边的窗口中键入 Ctrl-Wk 会聚焦在 VIM 中最左边的窗口。显然,它可以方便地在各个方向工作。

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

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

如果我想在与File4 相同的窗口中打开一个新文件,我目前必须键入 2Ctrl-Wj使用 Ctrl-Wk 获得相同的结果会非常好。

谢谢。

【问题讨论】:

  • 您肯定需要编写一些代码来完成此操作并将其映射到所需的组合键。检查:h window-move-cursor;那里列出了移动命令。
  • 这是我的想法。不幸的是,我对 vim 脚本还不太熟悉 :)

标签: vim macvim nerdtree


【解决方案1】:

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

【讨论】:

  • 废话,由于某种原因,这会跳过 netrw
【解决方案2】:

可以使用

<C-w>w

<C-w>W

分别向右/向下和向左/向上循环浏览所有窗口。两个命令都回绕,所以&lt;C-w&gt;w 会在某个时候出现在左上角,&lt;C-w&gt;W 会在某个时候出现在右下角。

:h window-move-cursor

或者直接使用&lt;C-w&gt;b 直接进入您的目标窗口。

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多