Vim 在单个匹配行上执行多个命令

Vim 在单个匹配行上执行多个命令,vim,Vim,我最近需要将清单包装在一个LaTeX文档中,我正在minipage环境中处理该文档。本质上,在文件中匹配的每一行前后插入一些文本。为此,我使用了以下命令序列: :g/lstinputlisting/:norm O\begin{minipage}{\textwidth} :g/lstinputlisting/:norm o\end{minipage} 虽然这给出了我想要的结果,但必须输入两个单独的命令,两个命令都在同一匹配行上运行,这似乎很笨拙。是否可以在同一行上执行多个命令,或者重复的命令确实

我最近需要将清单包装在一个LaTeX文档中,我正在minipage环境中处理该文档。本质上,在文件中匹配的每一行前后插入一些文本。为此,我使用了以下命令序列:

:g/lstinputlisting/:norm O\begin{minipage}{\textwidth}
:g/lstinputlisting/:norm o\end{minipage}

虽然这给出了我想要的结果,但必须输入两个单独的命令,两个命令都在同一匹配行上运行,这似乎很笨拙。是否可以在同一行上执行多个命令,或者重复的命令确实是必要的?

我在编写此命令时发现的一个解决方案是在传递给norm命令的字符串中使用,然后使用movement命令插入第二行。这会稍微提高以下性能:

:g/lstinputlisting/norm O\begin{minipage}{\textwidth}^[jo\end{minipage}
(^[通过按^V(Ctrl+V)然后按escape键生成。)

要换行:

lstinputlisting
带标签:

\begin{minipage}{\textwidth}
lstinputlisting
\end{minipage}
您可以使用以下命令:

:%s/lstinputlisting/\\begin{minipage}{\\textwidth}\r&\r\\end{minipage}
  • \r
    新行
  • &
    搜索模式