StripWhitespace
的函数。 我可以通过打开文件并运行
:StripWhitespace
在单个文件上运行它。 如何自动对文件文件夹运行该功能,并保存结果?
#1 楼
您可以使用-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
评论
如果要在命令行上运行几个文件,则需要一个:argdo
–克里斯蒂安·布拉班德(Christian Brabandt)
2015年3月3日17:29
#2 楼
如果您已经在Vim中,则可以使用:argdo
或:bufdo
命令分别对参数列表或缓冲区列表中的每个项目执行命令。例如在参数列表中的每个文件上运行
:
命令::argdo StripWhitespace
或从缓冲区列表中的每个文件调用函数:
:bufdo call StripWhitespace()
或在参数列表中的每个文件上运行宏
q
::argdo normal @q
然后可以使用
:wall
保存所有更改的缓冲区,或保存所有文件并使用:wqall
退出Vim。如果您想在编写过程中编写文件,则可以添加对
:update
的调用,如下所示::argdo s/foo/bar/ge | update
有多种方法可以将文件首先放入Vim,包括:
为vim命令行提供参数:
vim *
(这增加了将所有文件添加到参数列表),使用
:args
命令(支持通配符和反引号表达式)填充参数列表,或者使用:argadd
命令向其中添加文件,只需手动将它们全部打开使用
:e
,:Ex
或文件打开插件。评论
我喜欢这个答案,因为它不需要离开Vim,我认为这太贵了(我宝贵的缓冲区列表!)。我有一些注意事项:(1)不写就离开缓冲区需要设置“隐藏”; (2)::update命令相对于:w略有改进,因为它仅在进行更改时才写入,因此:bufdo update或:argdo update将写入所有已修改的缓冲区或参数。
–tommcdo
15年2月12日在11:10
关于更新的要点。在编写答案时,我曾考虑过提到隐藏的内容,但由于我不想过分复杂,因此决定拒绝它。经过反思,它应该在那里。我将更新答案以包含当前的两个建议。
–丰富
15年2月12日在11:18
@tommcdo刚刚检查了:wall的文档,并且只写了更改的缓冲区,因此:bufdo毕竟不需要更新。
–丰富
15年2月12日在11:20
:wall的优点,它还有一个优点是不会循环通过缓冲区并使您离开起点。我想:argdo更新仍然是另外一回事-也许您不想写入不在参数列表中的缓冲区。
–tommcdo
15年2月12日在11:44
@tommcdo好点。
–丰富
15年2月12日在11:45
评论
请详细!另请参阅:如何以非交互方式(例如在管道中)编辑文件?