VIM:如何将具有子字符串的所有行复制到另一个文件/缓冲区?

TCS*_*rad 4 linux vim

我想在函数内搜索,并将在该范围内调用不同函数的所有行复制到另一个文件.我知道我可以通过视觉选择限制搜索的范围,搜索很容易 - 但是我没有方便的方法将所有搜索结果复制到任何缓冲区(我可以将其粘贴到另一个文件进行分析). ..有人能指出解决方案(我几乎可以肯定它会很容易,但出于某种原因,它对我来说并不明显!!)?

Ben*_*oit 15

您可以使用:

:let @a=''             " clear register a. A faster alternative would be “qaq” in normal mode (thanks ZyX)
:g/pattern/y A         " yank all lines with pattern into register a, but in append mode (hence a capital letter)
:buffer other_file.txt
"ap
Run Code Online (Sandbox Code Playgroud)

也许这个关于寄存器的答案对你有所帮助.

如果您想要APPEND到其他缓冲区,另一种方法是:

:redir >> other_file.txt
:g/pattern/#       "alternative: :g/pattern/print or :g/pattern/number.
:redir END
Run Code Online (Sandbox Code Playgroud)

参考文献::help :g,:help :#,:help :redir

  • 默认寄存器是`"`这可悲的是没有一个大写的,所以它不能用这种方式来追加,原因追加是让你得到所有匹配的行不只是最后一个.试想一下,你拷贝一个然后移动到另一条线并猛拉那一条线.当你最终做了一个掷骰子时,你只需要放下最后一条线.附加线将允许你捕获多条线. (3认同)
  • 如果你处于正常模式,清除寄存器`a`可以使用`qaq`(开始录制宏并在按下其他任何内容之前停止)来完成,这更快. (2认同)