我想知道是否有办法用Vim打开多个文件,但是特定行号上的每个文件。我解释一下:
我经常使用语法:vim my / way / too / far / file +120 为了在第120行编辑这个文件,因为gcc也告诉我:)
现在我正在寻找的是同时为多个文件执行此操作的方法!
当然,vim file1 + xx file2 + xx ...不起作用(+选项只影响第一个文件......不要问我原因)
那么,如果有人知道解决这个问题的方法吗?我没有在联机帮助页中找到它......
顺便说一句,有时,file1可能与file2 ...
相同答案 0 :(得分:11)
这是一种方式:vim +6 file1 +"sp +3 file2"
。
如果您更喜欢标签,请将sp
更改为tabnew
。
但是只有有人能用它制作剧本才真的有用......
答案 1 :(得分:5)
我刚写了https://gist.github.com/xim/6123691
感谢Pikrass的想法=)
编辑:
正如claferri所说,使用'+ tabnew ...'将你限制为10个文件。更新了要使用-S的要点。
vim函数将构建一个包含vim脚本的字符串($ script),该脚本在选项卡中以适当的行打开文件。使用示例进行说明,这是通过将vim -R file1:42 file2 file3:1337
更改为vim -S <script> -R file1 file2 file3
- 包含vim脚本来完成的,在这种情况下:
tab all
tablast
1337
tabprev
tabprev
42
所以:我们正常打开文件,然后执行脚本:跳转到最后一个选项卡,然后跳转到每个文件的相应行,同时移向第一个文件。
这个黑客只是经过适度测试,对任何错误发表评论。
RE-编辑:
修正了脚本,所以即使像vim -R 1:3 "a file" foo -- -- "some other file":34 -R
这样的疯狂示例也能按预期工作。
答案 2 :(得分:3)
vim可以读取您的gcc输出并创建一个quickfix列表,使您可以轻松导航代码中的所有错误。您可以使用vim -q读取现有的错误文件,或者如果您的项目使用Makefile,那么您可以使用:make命令从vim中执行make并捕获其输出。
答案 3 :(得分:1)
另一种选择是使用像utl这样的脚本,根据gcc的输出自动创建一个文件/行号超链接的文件(这应该是sed的简单)。
使用utl:<url:error.c#line=10>
编辑:链接到更合适的vim链接脚本。
答案 4 :(得分:1)
要转到file1.txt的第3行和第2行的file2.txt,我这样做:
vim -c ":e file1.txt|:3|:e file2.txt|:4"
答案 5 :(得分:1)
这是仅命令行解决方案(无需插件),也可以与':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'(缓冲区添加),它允许指定行号,但是然后缓冲区没有被加载,并且似乎没有一种方法可以强制它们加载,从而使':n'有效而不只是'bu
答案 6 :(得分:0)
有一个名为文件行的vim插件,可让您轻松完成此操作,但目前有多个问题可以将多个文件打开到特定行。我喜欢上面的一些解决方法,但如果你想获得一个包含各自行号的文件的缓冲区列表:ls
,那么文件行确实有效,然后你可以使用像bufdo
这样的东西在分裂中打开它们。