如何在文件文件夹中运行函数或宏?


Answers:


10

您可以使用-c参数在启动时从vim(1)以下位置运行命令:

   -c {command}
               {command} will be executed after the first  file  has  been
               read.   {command}  is interpreted as an Ex command.  If the
               {command} contains spaces it must  be  enclosed  in  double
               quotes  (this depends on the shell that is used).  Example:
               Vim "+set si" main.c
               Note: You can use up to 10 "+" or "-c" commands.

例:

vim -c ':call StripWhitespace()' file1 file2

要随后退出,请添加| :wqa

vim -c ':call StripWhitespace() | :wqa' file1 file2

1
如果要在命令行上运行几个文件,则需要一个:argdo
Christian Brabandt

19

如果您已经在Vim中,则可以使用:argdo:bufdo命令分别对参数列表或缓冲区列表中的每个项目执行命令。

例如,:在参数列表中的每个文件上运行命令:

:argdo StripWhitespace

或者从缓冲区列表中的每个文件调用一个函数:

:bufdo call StripWhitespace()

q在参数列表中的每个文件上运行宏:

:argdo normal @q

然后,您可以使用保存所有更改的缓冲区:wall,或者使用保存所有更改并退出Vim :wqall

如果您想边走边写文件,则可以添加对的调用:update,如下所示:

:argdo s/foo/bar/ge | update

首先,有多种方法可以将文件放入Vim,包括:

  • 向vim命令行提供参数:(vim *这会将所有文件添加到参数列表中),
  • 使用:args命令(支持通配符和反引号表达式)填充参数列表,或使用:argadd命令向其中添加文件,
  • 只需使用:e:Ex或打开文件的插件手动将其全部打开。

1
我喜欢这个答案,因为它不需要离开Vim,我认为这太贵了(我宝贵的缓冲区列表!)。我有一些注意事项:(1)需要'hidden'设置缓冲区不写。(2)该: update命令是在轻微的改善:w,因为它只有一个变化已经取得写道,因此:bufdo update:argdo update将写入所有修改过的缓冲区或参数。
tommcdo

好点update。我hidden在撰写答案时曾考虑提及,但由于我不想过分复杂,因此决定反对。经过反思,它应该在那里。我将更新答案以包含当前的两个建议。
丰富

@tommcdo刚刚检查了:wall的文档,并且只写了更改的缓冲区,因此:bufdo毕竟不需要更新。
丰富

关于的好收获:wall,它的另一个优点是不会循环通过缓冲区并使您离开起点。我想:argdo update还是一个不同的故事-也许您不想写不在参数列表中的缓冲区。
tommcdo 2015年

@tommcdo好点。
丰富
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.