How to run a vim command from the shell command-line?
BashShellVimZshBash Problem Overview
There are many stackoverflow questions about running shell programs from within vim
. Is it is possible to do the reverse, i.e.,
$ vim :BundleInstall
to allow me to run BundleInstall as part of a shell script, rather than having to open vim
and run it manually?
Bash Solutions
Solution 1 - Bash
Note, now the syntax has changed, and the line should read (As per @sheharyar):
vim +PluginInstall +qall
For posterity, previously, the correct line was:
vim +BundleInstall +qall
Should anyone other than me be looking! Note: this is in the Github README for vundle.
Solution 2 - Bash
Per the vim man page (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.
or:
> --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.
It really depends on what you want to do. Also, as described at the vundle readme file, if you launch vim like this:
> vim +BundleInstall +qall
This will install all bundle options without opening vim. And just for clarification, from the vim documentation:
> :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.
Solution 3 - Bash
How about something more complex?
vim "+set ff=unix" "+wq" node_modules/less-monitor/bin/less-monitor
Not sure whether that is totally correct, but it works for me. Thanks @jvc26
Solution 4 - Bash
I'll add another answer for people who are looking for a more general solution.
vim +command
works to run one Vim command but to run several Vim commands from a shell. Instead, start Vim in Ex-mode and supply commands with a Here document. This is an example from a script I wrote. It searches for a pattern in the file and inserts some text before it.
ex --noplugin +1 "$v_file" <<-END
set maxmempattern=8000
/^\s*\<endmodule\>/i
FIXME \`ifdef XXX_INCLUDE_API
\`include "${api_file}"
\`endif
.
w
q
END
Solution 5 - Bash
Does
vim --cmd BundleInstall
do what you want?