如何从 shell 命令行运行 vim 命令?

关于在 vim中运行 shell 程序,存在许多堆栈溢出问题。有没有可能做相反的事情,比如,

$ vim :BundleInstall

允许我作为 shell 脚本的一部分运行 BundleInstall,而不是必须打开 vim并手动运行它?

27819 次浏览

是的

vim --cmd BundleInstall

做你想做的?

注意,现在语法已经改变,行应该是这样的(根据 @ sheharyar) :

vim +PluginInstall +qall

以前,对于子孙后代来说,正确的说法是:

vim +BundleInstall +qall

如果其他人比我看! 注意: 这是在 Github 自述为 vundle。

根据 Vim 手册(man vim) :

-c {command}
{command}  will  be  executed after the first file has been
read.  {command} is interpreted as an Ex command.   If  the
{command}  contains  spaces  it  must be enclosed in double
quotes (this depends on the shell that is used).   Example:
Vim "+set si" main.c
Note: You can use up to 10 "+" or "-c" commands.

或:

--cmd {command}
Like using "-c", but the command is  executed  just  before
processing  any  vimrc file.  You can use up to 10 of these
commands, independently from "-c" commands.

这真的取决于你想做什么。另外,如果像下面这样启动 vim,就像在 Vundle自述文件中描述的那样:

    vim +BundleInstall +qall

这将在不打开 vim 的情况下安装所有 bundle 选项。 作为澄清,来自 Vim 文档的消息:

:qall


This stands for "quit all".  If any of the windows contain changes, Vim will
not exit.  The cursor will automatically be positioned in a window with
changes.  You can then either use ":write" to save the changes, or ":quit!" to
throw them away.

我将为那些寻求更通用解决方案的人们添加另一个答案。

vim +command可以运行一个 Vim 命令,但是可以从 shell 中运行多个 Vim 命令。相反,在 Ex-mode 中启动 Vim 并用 Here 文档提供命令。这是我写的一个脚本的例子。它在文件中搜索模式并在其前插入一些文本。

    ex --noplugin +1 "$v_file" <<-END
set maxmempattern=8000
/^\s*\<endmodule\>/i


FIXME   \`ifdef XXX_INCLUDE_API
\`include "${api_file}"
\`endif


.
w
q
END

来点更复杂的怎么样?

vim "+set ff=unix" "+wq" node_modules/less-monitor/bin/less-monitor

不确定这是否完全正确,但对我来说很有效。 谢谢@jvc26