在Vim中两个窗口之间循环的快捷键

yhived7q  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(145)

在Vim中有没有一种简单的方法可以在两个窗口(buffers!)之间循环?使用vim file1 file2可以使用:n:N来回切换。但是这很麻烦,如果:n:N被键入两次就会导致错误。
我希望像ZZ这样简单的东西可以用一个键来回移动。

2ic8powd

2ic8powd1#

是否有简单的方法在两个窗口之间循环(缓冲区!)
嗯...“窗口”,“缓冲区”,或者,因为你使用的是:n:N,“文件”?它们根本不是一回事。

个文件

正如注解中提到的,<C-^>(或某些键盘上的<C-6>)可以用于在两个文件之间切换,但由于它依赖于“备用文件”的概念,因此必须首先执行:next,以便建立两个文件之间的关系。
参数列表的问题是,它是存储作为参数传递给Vim的文件的列表,它是相当低级的。:n:N不会换行,替代文件不会自动设置,等等。
示例:

$ vim file1 file2    # open two files, file1 is current
:n                   " switch to file2
<C-^>                " switch to file1
<C-^>                " switch to file2
<C-^>                " switch to file1
…

请参阅:help argument-list

缓冲液

你在Vim中打开的每个“文件”(从Vim内部或从shell)都变成了一个 buffer,因此,除了低级参数列表之外,你还有一个在稍高级别上操作的缓冲区列表。
由于您只打开了两个文件,因此只有两个缓冲区,您可以使用:help :bnext在这两个缓冲区之间切换,因为与:n:N不同,:bn(和:bN)是环绕的。
示例:

$ vim file1 file2    # open two files and therefore two buffers, file1 is current
:bn                  " switch to file2
:bn                  " switch to file1
:bn                  " switch to file2
:bn                  " switch to file1
…

请注意,如果需要,可以将:bnMap到更简单的对象。
<C-^>也可以用在这个上下文中,因为“file”和“buffer”之间的边界有点模糊,但是您仍然必须首先通过手动切换来建立关系。
窗口
您可以使用<C-w>p在两个窗口之间切换::help CTRL-W_p .

前进

<C-^>非常有用,但是你需要在两个文件/缓冲区之间建立一个关系,而Vim在启动时不能这样做。虽然可以强制这样做,但是这并不直观。YMMV:

$ vim +n +N file1 file2

请参阅:help -+c

kfgdxczn

kfgdxczn2#

为此,我在我的~/.vimrc中设置了以下内容。

""""  Faster buffer cycling """
    nnoremap <C-n> :bnext<CR>
    nnoremap <C-p> :bprev<CR>

这样做牺牲了<c-n><c-p>的本机行为,但这些行为实际上是kj键的行为的复制。

相关问题