如何将行拉入同一个寄存器然后粘贴到新的缓冲区中?

如何将行拉入同一个寄存器然后粘贴到新的缓冲区中?

我可以将包含“lblfig”的行抓取到m寄存器中,如下所示:

/lblfig
:let @m=@_ | %g//yank M

然后我可以将此行集合粘贴到新的缓冲区中,如下所示:

:new | exe "normal! \"mp"

但是当我尝试将最后两个命令行一起运行时,如下所示:

:let @m=@_ | %g//yank M | new | exe "normal! \"mp"

- 我只将第一行粘贴到新的缓冲区中。

那么我怎样才能通过单个命令行完成此操作?

答案1

问题是由于全局命令允许你使用|它们之间的命令执行多个命令,因此这些命令全局命令被认为是部分全局命令。例如,您想要这样做:

%g//                                    "On every line containing lblfig:
    yank M                              "Yank into register 'M'
                                        "then AFTERWARDS:
            | new | exe "normal! \"mp"  "Paste it into a new buffer.

以下是 vim 实际执行的操作:

%g//                                    "On every line containing lblfig:
    yank M | new | exe "normal! \"mp"   "Yank into register AND Paste it into a new buffer.

修复方法很简单。只需将全局命令包装在“执行”语句中即可。

let @m=@_ | exe '%g//yank M' | new | exe "normal! \"mp"

相关内容