我已经开始使用Vim来开发Perl脚本,并开始发现它非常强大。

我喜欢的一件事是能够同时打开多个文件:

vi main.pl maintenance.pl

然后在他们之间跳来跳去

:n
:prev

然后查看哪个文件是打开的:

:args

要添加一个文件,我可以说:

:n test.pl

我希望它会被添加到我的文件列表中,但相反,它会清除我当前的文件列表,当我输入:args时,我只有test.pl打开。

那么我如何在我的args列表中添加和删除文件?


当前回答

当在vim中使用多个文件时,我主要使用这些命令(打开了大约350个文件):

:b <partial filename><tab>(跳转到缓冲区) :bw(缓冲区擦除,删除缓冲区) :e <文件路径>(编辑,打开一个新的缓冲区> . Pltags -允许跳转到子例程/方法定义

其他回答

如果你要使用多个缓冲区,我认为最重要的事情是 设置隐藏 这样它就能让你切换缓冲区即使你要离开的缓冲区中有未保存的更改。

您可能希望使用Vim全局标记。

通过这种方式,您可以快速地在文件之间来回切换,甚至跳转到文件中标记的位置。此外,关键命令也很短: C会带我找到我正在处理的代码, T把我带到了我正在使用的单元测试。

当你改变位置时,重置标记也很快: mC标记新的代码点, mT标志着新的测试点。

清单

要查看当前缓冲区的列表,我使用:

:ls

开放

要打开一个新文件,我使用

:e ../myFile.pl

增强的TAB补全功能(将set wildmenu放在你的.vimrc中)。

注意:你也可以使用:find,它会为你搜索一组路径,但是你需要先自定义这些路径。


切换

要在所有打开的文件之间切换,我使用

:b myfile

增强选项卡完成(仍然设置野生菜单)。

注意::b#选择最后访问的文件,因此您可以使用它在两个文件之间快速切换。


使用windows

Ctrl-W s和Ctrl-W v水平和垂直分割当前窗口。你也可以使用:split和:vertical split (:sp和:vs)

Ctrl-W w在打开的窗口之间切换,Ctrl-W h(或j或k或l)在打开的窗口中导航。

按Ctrl-W c关闭当前窗口,按Ctrl-W o关闭除当前窗口外的所有窗口。

使用-o或-o标志启动vim将打开每个文件各自的分割。


有了所有这些,我不需要在Vim中使用标签,我的手指可以找到缓冲区,而不是眼睛。

注意:如果您希望所有文件都转到同一个Vim实例,请使用——remote-silent选项启动Vim。

我对gVim和命令行Vim使用相同的.vimrc文件。我倾向于在gVim中使用制表符,在命令行Vim中使用缓冲区,所以我设置了.vimrc,以便更容易地使用它们:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

这破坏了H和L的现有映射,但它使文件之间的切换非常快速和容易。按H表示下一个,按L表示上一个;无论您使用的是制表符还是缓冲区,都将得到预期的结果。

你可以在你的.bashrc文件中添加vim和vim -p的别名:

alias vim="vim -p"

这将导致在选项卡中从shell打开多个文件,而不必随后在vim中调用:tab ball。