How to run a vim command from the shell command-line?

BashShellVimZsh

Bash 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?

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionjvc26View Question on Stackoverflow
Solution 1 - Bashjvc26View Answer on Stackoverflow
Solution 2 - BashDaniel NoguchiView Answer on Stackoverflow
Solution 3 - Bashgraceman9View Answer on Stackoverflow
Solution 4 - BashSteve KView Answer on Stackoverflow
Solution 5 - BashColin 't HartView Answer on Stackoverflow