VIM:如何将grep结果存储在缓冲区中

时间:2011-06-16 14:11:02

标签: vim

我想调试一个进程,因此我将strace附加到进程并将输出重定向到文件然后执行操作。在此过程中,它创建了许多流程。所以这就是我想要做的,我想选择一个进程执行的所有系统调用。为此,我使用grep命令将pattern作为pid:

:grep pid %

它显示了结果,但我无法遍历结果,它承诺

Press ENTER or type command to continue

并返回文件。我想要做的是将结果存储在缓冲区中,然后查看它,如果需要,将其保存到文件中,或者丢弃它并返回到原始文件。有没有办法在退出vim编辑器时执行此操作?提前谢谢。

我想搜索结果并将其存储在缓冲区中。

3 个答案:

答案 0 :(得分:27)

多年来阅读所有类型的日志,我学会了这个小技巧:

:%!grep pattern

它只是用grep输出替换当前缓冲区内容(因此要返回原始日志,只需按u)。

您也可以将其与其他工具一起使用:

:%!ack pattern %
:%!ag pattern %

对我来说,它是在Vim中快速点击大文件的最简单和最好的解决方案,我很惊讶没有人提过它。

答案 1 :(得分:15)

您可以轻松访问较早的搜索内容:

:copen
:colder " goes to older
:cnewer " newer

您可以使用lvimgrep进行其他搜索(使用位置窗口):

:lopen
:lnext
etc...

它也有历史:

:lolder
:lnewer

您可以读入任何缓冲区:

:r!grep bla **/*.cs

最后,任何提供输出的命令都可以使用redir命令重定向:

:redir >> file
:grep bla **/*.cs
:redir END

请参阅:he redir了解使用它的多种方法(重定向到寄存器或变量)。

答案 2 :(得分:2)

我认为:grep结果默认存储在quickfix窗口中。

运行grep命令后尝试使用:copen。我希望你能在那里找到你的结果。

(:cclose关闭quickfix窗口)

它不是真正的缓冲区,但只要您不开始其他搜索,您的结果列表就会保持不变。

您可以将quickfix窗口的内容“拉”到新的缓冲区。

  • 使用:copen
  • 进入quickfix
  • 将内容与yG
  • 联系起来
  • 使用:new
  • 打开一个新缓冲区
  • 使用p
  • 粘贴内容
  • 使用:w Process1.txt
  • 保存

重复并冲洗以进行多次搜索/处理。