在vim中搜索字符串并输出像grep一样

时间:2013-02-24 04:48:01

标签: search vim grep

如何使用VIM搜索文本文件中的特定字符串,然后输出所有带有搜索字符串实例的行?

请告知。

谢谢!

4 个答案:

答案 0 :(得分:5)

您可以使用Vim的内置global工具。它将在窗口底部输出所有匹配的行。一个例子是: g / searchterm / 输入

如果尚未打开行编号,您可能会发现打开行编号很有用,可以了解匹配文件的位置。执行此操作的命令是: 设置编号 输入

运行命令可以找到其他信息: help global 输入

编辑:

如果要将结果重定向到自己的窗口,vim.wikia.com建议使用命令序列

:redir @a         redirect output to register a
:g//              repeat last global command
:redir END        end redirection
:new              create new window
:put! a           paste register a into new window

您可以像vimscript function一样轻松编写脚本。我高度建议您查看Steve Losh - Learn Vimscript the Hard Way教程,如果您从未见过它来学习如何正确编写Vim函数的脚本。

答案 1 :(得分:4)

使用:g

还有另一种可能性

说您希望使用单词foo获取当前文件中的所有行:

你可以输入:

qzq:g/foo/y Z 输入

执行上述行后,这些行存储在您的寄存器z中。您可以"zp粘贴到某处,或者稍后处理。

短期内会发生什么:

qzq:清除z注册

:g/foo/y Z:将所有匹配的行放入注册z

答案 2 :(得分:3)

除了Mike的答案中的:g[lobal]命令外,还有以下几种选择:

  • :il[ist] foo列出当前缓冲区中包含foo 但看起来不像的所有行(如果要匹配,请使用:il[ist]!评论也)。

    当显示列表时,您可以点击<CR>使其消失或点击:发出Ex命令::5<CR>跳转到第5行,:5t3复制第5行在第3行之后等等。

    请注意,该列表是暂时的:如果您想再次查看该列表,则必须重新发出该命令。

    用法:

    :il foo<CR>
    :23<CR>
    
  • :vim[grep] bar % | cw[indow]使用当前缓冲区中包含bar的所有行填充quickfix窗口。

    阅读:h quickfix以了解如何使用它。快速点击<CR>跳转到结果,:cn跳转到下一个结果,:cp跳转到上一个结果...

    用法:

    :vim bar % | cw<CR>
    (navigate to the result you want in the quickfix window 
     with arrows, `jk`, line numbers, search…)
    <CR> 
    

    您还可以使用:grep bar % | cw[indow]使用系统的grep代替Vim的内部grep方法。

    请注意,quickfix窗口的内容在下一个:vim:grep:make或操作错误列表的任何命令之前不会更改。这意味着您可以隐藏quickfix窗口并使用相同的列表再次打开它。

答案 3 :(得分:0)

在搜索,然后&#34; qqq&#34;之后,我只看到包含所述字符串的行:

:v//d

&#34; V&#34;匹配不包含上一次搜索的行(&#34; //&#34;)和&#34; d&#34;删除它们。这是一个消极的&#34; g&#34; 我只清楚地看到了我想要的线条。如果我对某个特定的一个感兴趣,我会用#34; mm&#34;标记它。 当我查看它们时,使用&#34; u&#34;撤消删除并取回我的文件(不要忘记) 之后,我在&#34; n&#34;或者用&#34;&#39; m&#34;去标记的那个。

相关问题