【问题标题】:Vim : Open multiples files on different linesVim:在不同的行上打开多个文件
【发布时间】:2010-01-27 16:04:53
【问题描述】:

我想知道是否有办法用 Vim 打开多个文件,但每个文件都有一个特定的行号。我解释一下:

我经常使用的语法:vim my/way/too/far/file +120 为了在第 120 行编辑这个文件,因为 gcc 也告诉了我 :)

现在我正在寻找一种同时处理多个文件的方法!

当然,vim file1 +xx file2 +xx ...不会起作用(+选项只影响第一个文件...不要问我为什么)

那么,如果有人知道解决此问题的方法吗?我没有在手册页中找到它...

顺便说一句,有时file1可能和file2是同一个文件...

【问题讨论】:

    标签: vim


    【解决方案1】:

    这是一种方法:vim +6 file1 +"sp +3 file2"。 如果您喜欢标签,请将 sp 更改为 tabnew。

    但只有当有人可以用它制作脚本时它才会真正有用......

    【讨论】:

    • 确实有效!太好了,现在我只需要弄清楚如何使用 xargs 从 file1 +10 file2 +14 ... 列表转到 vim +10 file1 +"tabnew +14 file2" +"tabnew +... (是的,我更喜欢tabnew :) 如果我有足够的信心写它,我会发布我的 cmd 行;)谢谢!
    • 事实上,不好的是这个解决方案不允许同时最多 10 个文件。我正在使用命令来获取文件名和行,并使用 xargs 将它们传递给 vim。我希望能够启动尽可能多的文件,我很失望 vim 不能同时处理超过 10 个文件...
    • 也许你可以在 ViM 命令中使用for,其中包含一个文件名列表和另一个用于光标位置的列表。
    【解决方案2】:

    我刚刚写了https://gist.github.com/xim/6123691

    感谢 Pikrass 的想法 =)

    编辑:

    正如 claferri 所说,使用 '+tabnew ...' 将您限制为 10 个文件。更新了 gist 以使用 -S。

    vim 函数将构建一个字符串 ($script),其中包含一个 vim 脚本,该脚本在选项卡中的适当行处打开文件。使用示例进行解释,这是通过将 vim -R file1:42 file2 file3:1337 更改为 vim -S <script> -R file1 file2 file3 来完成的 - 包含一个 vim 脚本,在这种情况下:

    tab all
    tablast
    1337
    tabprev
    tabprev
    42
    

    所以:我们正常打开文件,然后执行脚本:跳转到最后一个选项卡,然后在移动到第一个文件的同时跳转到每个文件的相应行。

    此 hack 仅经过适度测试,如有错误请评论。

    重新编辑:

    修复了脚本,因此即使像 vim -R 1:3 "a file" foo -- -- "some other file":34 -R 这样的疯狂示例也可以按预期工作。

    【讨论】:

    【解决方案3】:

    vim 可以读取您的 gcc 输出并创建一个快速修复列表,使您可以轻松浏览代码中的所有错误。您可以使用 vim -q 读取现有的错误文件,或者如果您的项目使用 Makefile,那么您可以使用 :make 命令在 vim 中执行 make 并捕获其输出。

    【讨论】:

      【解决方案4】:

      另一种选择是使用像utl 这样的脚本,根据 gcc 的输出自动创建一个包含指向文件/行号的超链接的文件(这对于 sed 来说应该是微不足道的)。

      链接将被格式化为 utl:<url:error.c#line=10>

      编辑:链接到更合适的 vim 链接脚本。

      【讨论】:

      • Neil 的建议是一个更好的版本。
      【解决方案5】:

      要转到 file1.txt 的第 3 行和 file2.txt 的第 4 行,我这样做:

      vim -c ":e file1.txt|:3|:e file2.txt|:4"
      

      【讨论】:

      • 不错!我认为分屏会更好: vim -c ":e file1.txt|:3|:vsplit file2.txt|:4"
      【解决方案6】:

      有一个名为 file-line 的 vim 插件可以让您轻松地做到这一点,尽管目前它在打开多个文件到特定行时存在一些问题。我喜欢上面的一些解决方法,但是如果你想获得一个缓冲区列表:ls 充满文件及其各自的行号,那么文件行确实有效,然后你可以使用类似bufdo 的东西来打开它们分裂。

      https://github.com/bogado/file-line

      【讨论】:

        【解决方案7】:

        这是一个仅限命令行的解决方案(不需要插件),它也适用于 ':n' 和 ':prev' (:e 解决方案不支持)并且不需要制表符或拆分:

        vim filea fileb filec -c ':10|:bu 2|:100|:bu 3|:200|:rewind'
        

        这将打开用于 filea、fileb、filec 的缓冲区,并将在第 10 行从 filea 开始,然后 ':n' 将在第 100 行转到 fileb,然后在第 200 行转到 filec。唯一的缺点是它会在打开所有文件时将所有缓冲区名称作为消息打印出来,您必须按“enter”才能继续(尽管设置“shortmsg=a”可能会有所帮助)

        我尝试使用允许指定行号的 ':badd' (buffer add),但是没有加载缓冲区并且似乎没有办法强制它们加载以便 ':n' 工作而不仅仅是 'bu '

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-01
          • 1970-01-01
          • 2014-05-08
          • 2010-12-22
          • 2014-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多