如何在gvim中拆分打开包含TODO的所有文件?

时间:2012-05-03 12:31:33

标签: vim

我想在gvim的分割缓冲区中打开我的所有源文件,其中包含TODO。

我很确定这可以通过将grep管道输出到编辑命令来完成,但我不确定如何实现它。

4 个答案:

答案 0 :(得分:7)

我不会在分裂中打开它们,除非你知道只有两个或者 三。但如果只有两三个文件需要编辑,你为什么这么做 毕竟,寻找一个自动打开它们的命令?

这是你可以使用的基本grep:

grep -lIr TODO .

它以递归方式搜索当前目录,查找包含TODO和的文件 列出他们。它还避免匹配二进制文件(包括.swp和.swo文件)。 然后,如果您正在运行GUI Vim,我会选择:

mvim --remote-silent $(grep -lIr TODO .)

或者,在Vim中,您可以使用:argadd命令并将反向扩展为 sehe在评论中巧妙地建议:

:args `grep -Ilr TODO .`

答案 1 :(得分:6)

vim中实际上有一个功能可能比你实际要求的更好。查看:help quickfix。基本上你可以像你想象的那样执行你的grep:

grep -rn TODO . > index.txt

然后你可以在vim的快速列表中打开这个索引:

vim -q index.txt

这将允许您通过执行:cn(下一个)和:cp(上一个)来浏览所有这些文件中的每个TODO。也可以:copen打开底部的快速列表窗口,显示您在整个列表中的位置,并允许您导航到任何文件中的每个TODO。

答案 2 :(得分:5)

您可以使用xargs

grep -l TODO * | xargs vim -o

答案 3 :(得分:0)

您尚未说明要使用的操作系统和外壳程序。但是,假设您使用的是类似bash的东西,这应该可以工作:

vim -o $(grep -lr TODO .)

但是,请注意当前工作目录是git repo还是其他东西,因为它将在其中包含文件。并且取决于您如何设置vim,您可能还会获得旧的交换文件。要解决此问题,我有一个aliasgrep,带有一堆'--exclude--exclude-dir参数。例如:

alias gg='grep --exclude='\''*.sw?'\'' --exclude-dir='\'.git\'