我想在 gvim 的拆分缓冲区中打开所有包含 TODO 的源文件。
我很确定这可以通过将grep
其输出传递给编辑命令来完成,但我不确定如何实现这一点。
我不会分开打开它们,除非你知道只有两三个。但是,如果只有两三个文件需要编辑,你为什么还要寻找一个命令来自动打开它们呢?
这是您可以使用的基本 grep:
grep -lIr TODO .
它递归地搜索当前目录以查找包含 TODO
并列出它们的文件。它还避免匹配二进制文件(包括 .swp 和 .swo 文件)。然后,如果您正在运行 GUI Vim,我会选择:
mvim --remote-silent $(grep -lIr TODO .)
或者,在 Vim 中,您可以使用:argadd
sehe 在评论中巧妙建议的命令和反引号扩展:
:args `grep -Ilr TODO .`
vim 中实际上有一个功能,它可能比您实际要求的要好得多。退房:help quickfix
。本质上,您可以按照您的想象执行 grep:
grep -rn TODO . > index.txt
然后你可以在 vim 的 quicklist 中打开这个索引:
vim -q index.txt
:cn
这将允许您通过执行(next) 和:cp
(previous)来浏览所有这些文件中的每个 TODO 。也可以:copen
在底部打开快速列表窗口,向您显示您在整个列表中的位置,并允许您导航到任何文件中的每个 TODO。
您可以使用xargs
:
grep -l TODO * | xargs vim -o
您还没有说明您使用的是哪个操作系统和外壳。但是假设您使用的是类似的东西bash
,这应该可以工作:
vim -o $(grep -lr TODO .)
但是,如果您当前的工作目录是 git repo 或其他东西,请小心,因为这将包含其中的文件。根据你设置 vim 的方式,你也可能得到旧的交换文件。为了解决这个问题,我有一个alias
to grep
,带有一个 bundleo'--exclude
和--exclude-dir
参数。例如:
alias gg='grep --exclude='\''*.sw?'\'' --exclude-dir='\'.git\'