从命令行在Vim中执行命令

syv*_*vex 70 vim

无论如何,从命令行对文件执行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)则会遇到错误.