在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)