我有几十个文件需要与vimdiff进行比较和合并。有没有什么办法对文件对进行排队比较,以便我可以一次打开它们,而不是一次又一次地返回到shell来打开每一对文件?有什么办法排队许多文件对与vimdiff比较?
这可以通过打开每个对在自己的选项卡中完成?我的外壳是Bash。
我有几十个文件需要与vimdiff进行比较和合并。有没有什么办法对文件对进行排队比较,以便我可以一次打开它们,而不是一次又一次地返回到shell来打开每一对文件?有什么办法排队许多文件对与vimdiff比较?
这可以通过打开每个对在自己的选项卡中完成?我的外壳是Bash。
这是另一个在其自己的选项卡中打开每对的答案。 保存再次在文件下面的(do2.sh):
#!/bin/bash
files1=(file1.txt file2.txt file3.txt)
files2=(file1_.txt file2_.txt file3_.txt)
cmd="vim -c 'set diffopt=filler,vertical' -c 'edit ${files1[0]}' -c 'diffsplit ${files2[0]}' "
echo $cmd
for i in {1..2}; do
cmd="${cmd} -c 'tabe ${files1[i]}' -c 'diffsplit ${files2[i]}' "
done
eval $cmd
当你执行它会在自己的标签中打开了对
。
就我所知,您无法使用单个vim命令执行此操作。你可以在for循环中启动vimdiff。
或者尝试“合并” http://meld.sourceforge.net/
像StephenPaulger提出了一个for循环的少量文件的工作。 我会做的方式是创建一个小脚本(比如do.sh)具有以下内容:
#!/bin/bash
files1=(file1.txt file1_.txt)
files2=(file2.txt file2_.txt)
for i in {0..1} ; do
vimdiff ${files1[i]} ${files2[i]}
done
,这将让你没有在做DIFF在外壳键入任何内容不同的文件,一旦您退出一对文件的差异,另一个文件立即显示出来。
另一个有用的技巧在这里使用是摆在你的.vimrc
if &diff
map <f4> :qa<cr>
map <f5> :wqa!<cr>
map <f6> :qa!<cr>
endif
以下然后如果没有改变,你只需按F4退出,如果有您按F5。
如果你想在彼此一个目录下的所有文件进行比较所有组合,这里是如何做到这一点,仍然避免两次比较一对(或与自身的文件):
for f1 in *; do
for f2 in *; do
[[ $f1 < $f2 ]] || vimdiff "$f1" "$f2"
done
done
当你的答案进入时,我手动完成了大部分对。这应该是我所希望的,谢谢。 – 2011-03-25 17:21:58
这是一个好主意,但vim有十个-c参数的限制,所以它不适用于问题中指定的“几十个文件”(正如我发现试图使用它)。更好的方法是使用for循环将tabe和diffsplit命令写入文件,然后在启动vim时使用-S来源。 – Etaoin 2015-03-12 16:09:28