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

hue*_*hue 17 vim

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

:grep pid %
Run Code Online (Sandbox Code Playgroud)

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

Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*ral 28

多年来阅读各种日志,我学会了这个小技巧:

:%!grep pattern
Run Code Online (Sandbox Code Playgroud)

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

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

:%!ack pattern %
:%!ag pattern %
Run Code Online (Sandbox Code Playgroud)

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

  • 真的希望我能多点赞。我多年来一直在寻找这个。 (3认同)

seh*_*ehe 17

您可以转到较旧的搜索,然后轻松返回:

:copen
:colder " goes to older
:cnewer " newer
Run Code Online (Sandbox Code Playgroud)

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

:lopen
:lnext
etc...
Run Code Online (Sandbox Code Playgroud)

它也有历史:

:lolder
:lnewer
Run Code Online (Sandbox Code Playgroud)

你可以读入任何缓冲区:

:r!grep bla **/*.cs
Run Code Online (Sandbox Code Playgroud)

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

:redir >> file
:grep bla **/*.cs
:redir END
Run Code Online (Sandbox Code Playgroud)

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