web-dev-qa-db-fra.com

Exécuter la commande vim à partir de la ligne de commande

Il y a beaucoup de SO questions sur l'exécution des programmes Shell à partir de vim. Ce que je me demande, c'est s'il est possible de faire l'inverse - c'est-à-dire.

$ vim :BundleInstall

par exemple, pour me permettre d'exécuter BundleInstall dans le cadre d'un script, plutôt que d'avoir à ouvrir Vim et à l'exécuter manuellement lors de la première exécution? Est-ce possible?

54
jvc26

Remarque, maintenant la syntaxe a changé, et la ligne doit se lire (selon @ sheharyar ):

vim +PluginInstall +qall

Pour la postérité, auparavant, la ligne correcte était:

vim +BundleInstall +qall

Si quelqu'un d'autre que moi cherche! Remarque: c'est dans le Github README pour vundle.

85
jvc26

Je pense que c'est ce dont vous avez besoin:

Vous devriez vérifier la page de manuel de 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.

ou:

--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.

Cela dépend vraiment de ce que vous voulez faire. En outre, comme décrit dans le fichier readme vundle , si vous lancez vim comme ceci:

    vim +BundleInstall +qall

Cela installera toutes les options de bundle sans ouvrir vim. Et juste pour des éclaircissements, de la documentation 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.

J'espère que ça aide!

23
Daniel Noguchi

J'ajouterai une autre réponse pour les personnes qui recherchent une solution plus générale.

vim +command fonctionne pour exécuter une commande Vim mais pour exécuter plusieurs commandes Vim à partir d'un shell. Au lieu de cela, démarrez Vim en mode Ex et fournissez des commandes avec un document Here. Ceci est un exemple d'un script que j'ai écrit. Il recherche un motif dans le fichier et insère du texte avant lui.

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

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

            .
            w
            q
    END
2
Steve K

Que diriez-vous de quelque chose de plus complexe?

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

Je ne sais pas si c'est totalement correct, mais cela fonctionne pour moi. Merci @ jvc26

2
graceman9

Est-ce que

vim --cmd BundleInstall

faites ce que vous voulez?

0
Colin 't Hart