我想在gvim的分割缓冲区中打开我的所有源文件,其中包含TODO。
我很确定这可以通过将grep
管道输出到编辑命令来完成,但我不确定如何实现它。
答案 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,您可能还会获得旧的交换文件。要解决此问题,我有一个alias
至grep
,带有一堆'--exclude
和--exclude-dir
参数。例如:
alias gg='grep --exclude='\''*.sw?'\'' --exclude-dir='\'.git\'