在一组文件中执行宏

在一组文件中执行宏

Content #

建立目标文件列表 #

首先,为这组要处理的文件建立一个文件列表。我们将用参数列表记录这些文件: :cd code/macros/ruby_module :args *.rb 不带参数运行:args命令,就可以显示参数列表中的内容。 :args [animal.rb] banker.rb frog.rb person.rb 而使用 :first、:last、:prev以及 :next命令,可以浏览整个文件列表。

录制宏 #

在开始工作之前,首先要确保光标已经位于参数列表中的第一个文件中。 :first 现在录制一个宏,完成所有工作。做完后不要运行 :w 保存文件。

以并行方式执行此宏 #

如果直接运行 :argdo normal @a,第一个缓冲区的内容将被两次执行同一个宏。为了避免此类问题,将执行 :edit! ,放弃针对第一个缓冲区所做的所有修改。 :edit! 如果所做的修改已经保存至文件,那么执行 :edit! 将起不到任何作用。在这种情况下,只能重复使用 u命令直到恢复成原样。现在可在参数列表的所有缓冲区内执行宏了。 :argdo normal @a

以串行方式执行 #

在宏的最后附加一个步骤:next跳转至列表中的下一个缓冲区。虽然可以运行 3@a,让宏在缓冲区列表余下的每个文件中得以执行,但是,次数没必要那么精确。这是因为,宏一旦执行到参数列表的最后一个缓冲区,:next 命令将会失败,宏将中止退出。所以与其指定一个精确的数值,倒不如保证数字足够大。22这个数字就可以,而且很容易输入。

保存所有文件 #

运行 :argdo write可保存参数列表中的全部文件,但如果简单地运行以下命令,会更快。 :wall

另一条有用的命令是 :wnext(参见 :h :wn ),它等同于先运行 :write,再运行 :next。如果想用串行的方式,在参数列表的多个文件上执行宏,可能更愿意用这条命令。

From #