我可以将包含“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"