2

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

我很确定这可以通过将grep其输出传递给编辑命令来完成,但我不确定如何实现这一点。

4

4 回答 4

7

我不会分开打开它们,除非你知道只有两三个。但是,如果只有两三个文件需要编辑,你为什么还要寻找一个命令来自动打开它们呢?

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

grep -lIr TODO .

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

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

或者,在 Vim 中,您可以使用:argadd sehe 在评论中巧妙建议的命令和反引号扩展:

:args `grep -Ilr TODO .`
于 2012-05-03T12:47:11.247 回答
6

vim 中实际上有一个功能,它可能比您实际要求的要好得多。退房:help quickfix。本质上,您可以按照您的想象执行 grep:

grep -rn TODO . > index.txt

然后你可以在 vim 的 quicklist 中打开这个索引:

vim -q index.txt

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

于 2012-05-03T14:52:47.143 回答
5

您可以使用xargs

grep -l TODO * | xargs vim -o
于 2012-05-03T12:38:29.347 回答
0

您还没有说明您使用的是哪个操作系统和外壳。但是假设您使用的是类似的东西bash,这应该可以工作:

vim -o $(grep -lr TODO .)

但是,如果您当前的工作目录是 git repo 或其他东西,请小心,因为这将包含其中的文件。根据你设置 vim 的方式,你也可能得到旧的交换文件。为了解决这个问题,我有一个aliasto grep,带有一个 bundleo'--exclude--exclude-dir参数。例如:

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

于 2020-07-19T19:19:58.143 回答