在Vim中从命令行执行一个命令
有没有办法从命令行执行文件上的Vim命令?
我知道相反的是这样的:
:!python %  但是如果我想要:retab在Vim中打开文件而不用打开文件呢? 例如: 
 > vim myfile.c :retab | wq 
这将打开myfile.c,用空格replace标签,然后保存并closures。 我想以某种方式将这个序列链接到一个单一的命令。
这将是这样的:
 > vim myfile.c retab | wq 
	
这对我工作:
 gvim -c "set et|retab|wq" foo.txt 
  set et (= set expandtab )确保tab字符被replace为正确数量的空格(否则, retab将不起作用)。 
 我通常不使用它,但vim -c ...也可以 
你有几个select:
- 
-c "commands":将在命令行中input命令时播放Ex命令。
 在你的例子中:vim myfile -c 'retab | wq'vim myfile -c 'retab | wq'。 这就是Firstrock所build议的。
- 
-S "vim source file":将源代码给定vim脚本
 (比如运行vim -c "source 'vim source file'"):如果你有一个文件 script.vim包含:retab wq那么你可以使用 vim myfile.c -s script.vim(扩展名并不重要)
- 
-s "scriptin file":将播放文件的内容,因为它包含普通模式命令:如果你有script.txt包含::retab ZZ以单个 ^M字符组成的行结尾 (例如,使用:set fileformat=mac | w保存脚本),则可以运行:vim myfile.c -S script.txt(ZZ是另一种退出方式vim并保存当前文件)。
 请注意,您可以使用vim my_file -W script.txtlogging这些脚本,但是如果您碰巧使用gvim(GUI),则会遇到一个bug 。
不是直接回答你的问题,但如果你想用空格replace标签(或做任何其他正则expression式search/replace)的文件列表,你可以使用就地sedsearch/replace:
 sed -i 's/\t/ /g' foo1.txt foo2.txt 
要么
 ls *.txt | xargs sed -i 's/\t/ /g' 
(在这个例子中,我用三个空格replace每个制表符。)
 注: -i标志表示就地操作。 
 从sed手册页: 
  -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied)