无论如何,从命令行对文件执行Vim命令?
我知道反面是这样的:
:!python %
Run Code Online (Sandbox Code Playgroud)
但是,如果我想在:retab没有在Vim中打开它的文件怎么办?例如:
> vim myfile.c
:retab | wq
Run Code Online (Sandbox Code Playgroud)
这将打开myfile.c,用空格替换选项卡,然后保存并关闭.我想以某种方式将这个序列链接到一个命令.
它会是这样的:
> vim myfile.c retab | wq
Run Code Online (Sandbox Code Playgroud)
Fir*_*ock 64
这有效:
gvim -c "set et|retab|wq" foo.txt
set et(= set expandtab)确保tab用正确数量的空格替换字符(否则,retab将无效).
我通常不会使用它,但vim -c ...也有效
编辑:
上面给出的解决方案假设默认制表位8是合适的.例如,如果要使用制表位4,请使用命令序列"set ts=4|set et|retab|wq".
Ben*_*oit 58
你有几个选择:
-c "commands":将在命令行中输入Ex命令.
在你的例子中:vim myfile -c 'retab | wq'.这就是Firstrock的建议.
-S "vim source file":将给出给定的vim脚本
(如运行vim -c "source 'vim source file'"):
如果你有一个文件script.vim包含:
retab
wq
Run Code Online (Sandbox Code Playgroud)
然后你可以使用vim myfile.c -s script.vim(扩展名并不重要)
-s "scriptin file":将播放文件的内容,因为它包含正常模式命令:如果您script.txt包含:
:retab
ZZ
Run Code Online (Sandbox Code Playgroud)
使用由单个的行结束^M字符(例如保存使用脚本:set fileformat=mac | w),那么你可以运行:vim myfile.c -S script.txt(ZZ另一种方式来退出Vim并保存当前的文件).
请注意,您可以记录这些脚本vim my_file -W script.txt,但如果您碰巧使用gvim(GUI)则会遇到错误.