在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.txt
logging这些脚本,但是如果您碰巧使用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)