Comment faire pour exécuter une série de vim commandes à partir de l'invite de commande
J'ai quatre fichiers texte A.txt, B.txt, C.txt et D.txt
Je dois effectuer une série de vim édition dans tous ces fichiers.
Actuellement je suis en train de faire est de l'ouvrir chaque fichiers et faire la même chose vim commandes une par une.
Est-il possible de faire un fichier de script qui je peux courir à partir de l'invite de commande, sans ouvrir le fichier, vim édition.
par exemple, si je dois effectuer le dessous de vim commandes après l'ouverture de la A.txt fichier dans l'éditeur vim:
:g/^\s*$/d
:%s/^/[/
:%s/\(.*\)\(\s\+\)\(.*\)/
:%s/$/]/
:%s/design/test/
Est-il possible de faire un fichier de script et de mettre tous ces commandes, y compris gvim A.txt
(première commande dans le fichier).
et modifier exécuter le fichier de script à partir de l'invite de commande.
Si c'est possible, s'il vous plaît laissez-moi savoir comment le faire et comment il peut être fait avec un seul ou plusieurs fichiers à la fois?
Vous devez vous connecter pour publier un commentaire.
Fait ce que vous décrivez, mais vous aurez à le faire qu'un seul fichier à la fois.
Donc, dans un environnement windows...
POSIX coquilles sont similaires, mais je n'ai pas de machine en face de moi à l'instant.
J'imagine que vous pouvez charger tous les fichiers à la fois et de le faire, mais il faudrait répéter les commandes sur la ligne de commandes de vim pour chaque fichier, semblable à
EDIT: 08 juin 2014:
Juste un avis, je l'ai découvert il y a quelques minutes.
vim a la commande bufdo de faire les choses pour chaque tampon (fichier) est chargé dans l'éditeur. Regarder les docs pour la bufdo de commande. Dans vim,
:help bufdo
-c ":wq"
à la fin.Le montant de
-c
commandes transmises directement à Vim sur la ligne de commande est limité à 10, et ce n'est pas très lisible. Alternativement, vous pouvez mettre les commandes dans un script séparé et passer à Vim. Voici comment:Silencieux En Mode Batch
Pour de très simple traitement de texte (c'est à dire à l'aide de Vim comme une amélioration de 'sed' ou 'awk', peut-être juste bénéficiant de l'amélioration des expressions régulières dans un
:substitute
de commande), l'utilisation Ex-mode.Note: silent mode batch (
:help -s-ex
) bousille la console Windows, de sorte que vous pourriez avoir à faire unecls
à nettoyer après le Vim run.À l'Attention de: Vim va se bloquer en attente d'entrée si le
"commands.ex"
le fichier n'existe pas; mieux vérifier à l'avance pour que son existence! Sinon, Vim peut lire les commandes à partir de l'entrée standard. Vous pouvez également remplir un nouveau tampon avec le texte lu à partir de stdin, et les commandes de lecture de stderr si vous utilisez le-
argument.L'Automatisation Complète
Pour les plus avancés de traitement impliquant de multiples fenêtres et d'automatisation réel de Vim (où vous pouvez interagir avec l'utilisateur ou quitter Vim en cours d'exécution pour permettre à l'utilisateur de prendre des cours), l'utilisation:
Voici un résumé des arguments:
Avec toutes les commandes que vous souhaitez exécuter sur chaque fichier sauvegardé dans un script, dites "de script.vim", vous pouvez exécuter le script sur un fichier comme ceci (comme d'autres l'ont mentionné):
De prendre un peu plus loin, vous pouvez enregistrer votre fichier à la fin du script, soit en mettant un
:w
commande dans le script lui-même, ou en passant à partir de la ligne de commande:Maintenant, vous pouvez exécuter n'importe quelle commande Vim sur plusieurs fichiers, à l'aide de la
argdo
de commande. De sorte que votre commande se transforme en:Enfin, si vous voulez quitter Vim après l'exécution de votre script sur chaque fichier, il suffit d'ajouter une autre commande pour arrêter de fumer:
Essayer la syntaxe suivante:
La
ex
commande est équivalente àvim -E
. Ajouter-V1
pour une sortie détaillée.Alternative one-liner syntaxe est par exemple:
Pour charger les commandes à partir du fichier, utilisez
-s cmds.vim
.Vous pouvez également utiliser beau spectacle pour Vim pour analyser le fichier à partir de l'argument.
Pour plus d'exemples, voir:
JimR et Ingo ont fourni d'excellentes réponses à votre cas d'utilisation.
Juste pour ajouter un moyen de plus pour le faire, cependant, vous pouvez utiliser mon vimrunner plugin script de l'interaction en ruby: https://github.com/AndrewRadev/vimrunner.
Exemple:
Cela peut être utile pour plus d'interactions complexes, puisque vous obtenez toute la puissance d'un langage de programmation.