vim - yank /删除特定行

时间:2014-05-15 08:02:53

标签: vim

使用vim。 我的原始文件如下所示:

Wire 1_blah
Wire 2_blah
Wire 3_blah
reg blah_blah_1
reg blah_blah_2
reg blah_blah_3

(除了,想象大约4000行)

我想要的结果如下:

Wire 1_blah
Wire 2_blah

reg blah_blah_1
reg blah_blah_2

Wire 3_blah
reg blah_blah_3

意思是,我想删除所有数字为3的行并将其粘贴到最后。 我尝试了以下方法:

:'<,'>g/3/d

然后

p

但这只会记住删除的最后一行。

有关如何快速有效地执行此操作的任何建议?我不想浪费时间手动操作。

谢谢!

3 个答案:

答案 0 :(得分:8)

:g/3/m$

做你想做的事:

  • :g[lobal]/foo/command在与command
  • 匹配的每一行上执行foo
  • :m$将当前行移动到缓冲区的末尾,
  • :g/3/m$将包含3的所有行移动到缓冲区的末尾。

请参阅:help :global:help :move

获胜的Ex命令!

修改

要在同一个寄存器中删除所有这些行,比如注册a,请使用:

:g/3/d A

意思是“剪切并附加这些行以注册a”。

请参阅:help registers

答案 1 :(得分:1)

如果查看:help :g,您将看到在匹配项上执行常规命令的选项。以下命令将按照找到的顺序将每一行移动到底部。

:g/3/normal ddGp

:help :g

复制的文档
To repeat a non-Ex command, you can use the ":normal" command: >
    :g/pat/normal {commands}
Make sure that {commands} ends with a whole command, otherwise Vim will wait
for you to type the rest of the command for each match.  The screen will not
have been updated, so you don't know what you are doing.  See |:normal|.

答案 2 :(得分:1)

我不知道输出示例中是否需要那些空行。如果没有,其他答案对你有用。如果你真的想要那些空行,这行适合你:

:g/3/exec "normal! DGo\<esc>p"