如何用vim打开不同行的多个文件?


How to open multiple files at different lines with vim?

我知道一个文件可以在不同的行中打开,使用:

1
2
vim foo.c +123
vim +123 foo.c # same result

可以使用以下方式打开多个文件:

1
vim foo.c bar.c

但我如何将这两种行为结合起来呢?vim +123 foo.c +456 bar.c不工作,bar.c在一号线而不是456线打开。

我看到vim:在不同的行上打开多个文件,但这会打开不同的选项卡,而我习惯于使用:prev:n进行导航。


使用file:line-可以打开file:line,它可以做正确的插件,您可以使用

1
$ vim foo.c:123 bar.c:456

它不适用于-o拆分,但它适用于为参数列表中的文件预设行号的用例。


我不知道是否有一个更简单的方法,但这里有一个解决方法非常简单,不会影响您的工作流程,因为您不是标签用户。

  • 首先,在您的.vimrc中设置一个auto命令,在您输入vim后立即发出tabo[nly](关闭所有其他选项卡)。

    1
    autocmd VimEnter * tabo
  • 接下来,使用链接问题中的解决方案打开多个选项卡中的文件

    1
    vim +123 foo.c +"tabnew +456 bar.c"
  • 所以在幕后,Vim会打开选项卡中的文件,但会立即关闭除最后一个文件以外的所有文件。所有打开的文件都应该在打开的缓冲区中可用。

    即使在没有多个文件的情况下正常打开VIM,这也可以很好地工作(您将看到一条无害的消息-"already only one tab page"(已经只有一个标签页),该消息在下一个按键时消失)。此外,由于此命令仅在VimEnter上发出,因此它不会阻止您在稍后的会话中使用选项卡(如果您愿意)。


    除了文件:行插件,正如INGO所建议的,我在https://gist.github.com/xim/6123691上做了一个bash函数hack——作为对vim的回答:在不同的行上打开多个文件。

    file:line似乎不处理带有空格和其他特殊字符的文件名,并且在使用vim -p时没有在选项卡中打开我的文件–不过,lekensteyn,这可能是一个更好的选择,因为它不会强制您标记文件。