我想调试一个进程,因此我将strace附加到进程并将输出重定向到文件然后执行操作。在此过程中,它创建了许多流程。所以这就是我想要做的,我想选择一个进程执行的所有系统调用。为此,我使用grep命令将pattern作为pid:
:grep pid %
它显示了结果,但我无法遍历结果,它承诺
Press ENTER or type command to continue
并返回文件。我想要做的是将结果存储在缓冲区中,然后查看它,如果需要,将其保存到文件中,或者丢弃它并返回到原始文件。有没有办法在退出vim编辑器时执行此操作?提前谢谢。
我想搜索结果并将其存储在缓冲区中。
答案 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
yG
:new
p
:w Process1.txt
重复并冲洗以进行多次搜索/处理。