Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 如何提取带有图案的线条并将其放在文件末尾_Vim - Fatal编程技术网

Vim 如何提取带有图案的线条并将其放在文件末尾

Vim 如何提取带有图案的线条并将其放在文件末尾,vim,Vim,假设我有下面的文本 a test1 b test2 a test3 b test4 要使用什么命令提取以字母a开头的行,并将它们放在文件的末尾,如下所示 b test2 b test4 a test1 a test3 当我使用:g/^a/d和p时,只粘贴最后一个匹配项: b test2 b test4 a test3 您在最后只看到test3,因为:d设置(而不是附加)默认寄存器。由于:g对与模式匹配的每行执行一次给定命令,因此粘贴时默认寄存器中只有最后一行 执行此操作的标准方法是使用

假设我有下面的文本

a test1
b test2
a test3
b test4
要使用什么命令提取以字母a开头的行,并将它们放在文件的末尾,如下所示

b test2
b test4

a test1
a test3
当我使用:g/^a/d和p时,只粘贴最后一个匹配项:

b test2
b test4

a test3

您在最后只看到test3,因为
:d
设置(而不是附加)默认寄存器。由于
:g
对与模式匹配的每行执行一次给定命令,因此粘贴时默认寄存器中只有最后一行

执行此操作的标准方法是使用
:move
(缩写为
:m
)命令--
:g/^a/m$
。对于与
^a
匹配的每一行,将其移动到最后一行(
$

对初始方法的一个轻微修改是将
:d
附加到寄存器,然后粘贴该寄存器

:let @a=''  " Clear register a
:g/^a/d A   " For every line that matches ^a, delete it
            " and append the contents to register a
:$put a     " Paste the contents of register a after the last line

最后一部分也可以使用正常模式命令ap来完成,因为
:d
设置(不是附录),所以最后只会看到
一个test3
默认寄存器。由于
:g
对与模式匹配的每行执行一次给定命令,因此粘贴时默认寄存器中只有最后一行

执行此操作的标准方法是使用
:move
(缩写为
:m
)命令--
:g/^a/m$
。对于与
^a
匹配的每一行,将其移动到最后一行(
$

对初始方法的一个轻微修改是将
:d
附加到寄存器,然后粘贴该寄存器

:let @a=''  " Clear register a
:g/^a/d A   " For every line that matches ^a, delete it
            " and append the contents to register a
:$put a     " Paste the contents of register a after the last line

最后一部分也可以使用正常模式命令
“ap

完成,谢谢!快速提问。
g/^a/d a
如何知道将删除的内容放入寄存器“a”中?大写字母a是否表示寄存器“a”。请参阅
:帮助引用\u alpha
谢谢!快速提问。
g/^a/d a
如何知道将删除的内容放入寄存器“a”中?大写字母a是否表示寄存器“a”。请参见
:帮助引用\u alpha