使用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
但这只会记住删除的最后一行。
有关如何快速有效地执行此操作的任何建议?我不想浪费时间手动操作。
谢谢!
答案 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"