如何使用VIM搜索文本文件中的特定字符串,然后输出所有带有搜索字符串实例的行?
请告知。
谢谢!
答案 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;去标记的那个。