4 votes

Comment écrire un script bash pour ouvrir plusieurs fichiers dans Vim en utilisant des splits et des onglets?

Je cherche à automatiser une partie de mon travail manuel en utilisant un script bash. En gros, j'ouvre plusieurs fichiers avec Vim dans une seule fenêtre de terminal (et un seul onglet de terminal), en utilisant plusieurs splits, vsplits et onglets. Je vais maintenant décrire un cas général pour expliquer ce que je fais habituellement manuellement.

J'utilise 3 onglets (que je vais appeler A, B et C) et j'ouvre 4 fichiers dans chaque onglet selon une disposition 2x2 :

bash:~$ cd ~/Workspace/
bash:~/Workspace$ vim A11.m
:vsplit A12.m
:hsplit A22.m
"déplacer le curseur vers A12.m"
:hsplit A21.m
:tabedit B11.m
:vsplit B12.m
:hsplit B22.m
"déplacer le curseur vers B12.m"
:hsplit B21.m
:tabedit C11.m
:vsplit C12.m
:hsplit C22.m
"déplacer le curseur vers C12.m"
:hsplit C21.m

Ce que j'aimerais faire est un script shell dans lequel les noms et emplacements des fichiers sont codés en dur, qui, une fois exécuté, ferait tout ce qui précède. Quelqu'un peut-il me suggérer une approche qui rendrait cela possible (si possible du tout)? Merci d'avance!

ps: Dans mon .vimrc, j'ai ajouté quelques configurations pour que :split ouvre le nouveau fichier en dessous (au lieu de dessus) du fichier actuel et :vsplit ouvre le nouveau fichier à droite (au lieu de gauche).

8voto

romainl Points 55506

Que diriez-vous de :aide mksession ?

  1. Configurez tous vos onglets et fenêtres.

  2. Faites :mks /chemin/vers/mysession.vim pour enregistrer les paramètres et la disposition actuels dans /chemin/vers/mysession.vim.

  3. Quittez Vim.

  4. Ouvrez Vim avec $ vim -S /chemin/vers/mysession.vim pour restaurer votre espace de travail.


Vous pouvez également restaurer votre session avec $ vim -c "so /chemin/vers/mysession.vim" ou, lorsque Vim est déjà en cours d'exécution, avec :so /chemin/vers/mysession.vim.

7voto

ZyX Points 26516

Il existe au moins quatre façons de le faire :

  1. vim -s <(echo $':vsplit A12.m\n:hsplit A22.m\n…')

  2. vim -S <(echo $'vsplit A12.m\nhsplit A22.m\n…')

    C'est similaire à ce que fait @romainl, mais vous créez le script vous-même et n'utilisez aucun autre fichier en dehors du script bash lui-même (peut également être juste un alias ou une commande dans l'historique). Il est possible d'utiliser des HERE-strings en bash, ils sont plus lisibles :

    vim -S <(cat <<

``* vim -c 'vsplit A12.m | hsplit A22.m | …'

Vous pouvez avoir plusieurs clés `-c` qui s'exécutent en séquence, mais pas plus de dix, donc vous devez joindre les commandes dans un seul `-c` avec un barre verticale.
  • Au lieu d'un script bash, utilisez un script vim :

    #!/usr/bin/vim -S
    vsplit A12.m
    hsplit A22.m
    …

    . Ensuite, vous pouvez lui donner la permission d'exécution avec chmod +x et l'exécuter comme n'importe quel autre fichier exécutable. Vim traite #! comme un commentaire juste pour cette raison. ``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X