GNU/Linux >> Tutoriels Linux >  >> Linux

Ouvrir Vim depuis un script shell Bash

ex est la version en ligne de commande pour vi , et beaucoup plus facile à utiliser dans les scripts.

ex $yourfile <<EOEX
  :%s/$string_to_replace/$string_to_replace_it_with/g
  :x
EOEX

Vous avez demandé comment écrire "quelque chose" dans un fichier texte via vim et aucune réponse n'a encore nécessairement couvert cela.

Pour insérer du texte :

ex $yourfile <<EOEX
  :i
  my text to insert
  .
  :x
EOEX

:i entre en mode insertion. Toutes les lignes suivantes sont du texte inséré jusqu'à . est vu apparaître tout seul sur sa propre ligne.

Voici comment rechercher et insérer également. Vous pouvez faire quelque chose comme :

ex $yourfile <<EOEX
  :/my search query\zs
  :a
  my text to insert
  .
  :x
EOEX

Cela trouvera la première sélection qui correspond à l'expression régulière spécifiée par :/ , placez le curseur à l'emplacement spécifié par \zs , et passez en mode insertion après le curseur.

Vous pouvez déplacer \zs pour obtenir des résultats différents. Par exemple :

ex $yourfile <<EOEX
  :/start of match \zs end of match
  :a
  my text to insert 
  .
  :x
EOEX

Cela changera la première occurrence de "début de correspondance fin de correspondance" en "début de correspondance mon texte pour insérer la fin de correspondance".

Si vous souhaitez autoriser n'importe quelle quantité d'espaces dans vos recherches entre les mots-clés, utilisez \_s* . Par exemple, rechercher une fonction qui renvoie 0 ::/\_s*return\_s*0}


Si vous souhaitez voir le travail effectué dans vim ou gvim, vous pouvez utiliser --remote-send

gvim --servername SHELL_DRIVER
bashpromt# cat mybash.sh
#!/bin/bash
echo "about to open $1"
gvim --servername SHELL_DRIVER $1 #I need to use vim application to open a file
#now write something into file.txt and close it
gvim --servername SHELL_DRIVER --remote-send '<ESC>i something to the file<ESC>:wq<CR>'
echo "done."

Ce sera lent mais fera ce que vous voulez.
D'abord, nous ouvrons un gvim dans lequel nous pouvons ouvrir tous nos fichiers (pour plus d'efficacité)
Avec la première ligne gvim, nous ouvrons le fichier dans le gvim précédemment ouvert.
Sur la deuxième ligne de gvim, nous envoyons une commande à l'instance précédemment ouverte de gvim (avec le fichier souhaité toujours ouvert).
La commande est la suivante :
<ESC> - sortir de n'importe quel mode dans lequel gvim aurait pu se trouver
i something to the file - passez en mode insertion et tapez "quelque chose dans le fichier"
<ESC> - quitter le mode d'insertion
:wq - écrire le fichier et quitter vim


Vim a plusieurs options :

  • -c => passer les commandes ex. Exemple :vim myfile.txt -c 'wq' pour forcer la dernière ligne d'un fichier à se terminer par une nouvelle ligne (sauf si binary est défini d'une manière ou d'une autre par un script)
  • -s => jouer un scriptout qui a été enregistré avec -W . Par exemple, si votre fichier contient ZZ , puis vim myfile.txt -s the_file_containing_ZZ fera la même chose que précédemment.

Notez également que, invoqué en tant que ex , vim démarrera en mode ex; vous pouvez essayer ex my_file.txt <<< wq


Linux
  1. Empêcher un script bash de s'exécuter simultanément

  2. Un script Bash peut-il être accroché à un fichier ?

  3. Script Bash pour supprimer le fichier le plus ancien d'un dossier ?

  4. Comment créer un fichier temporaire en script shell ?

  5. Obtenir le chemin complet depuis le script Bash ?

Comment accéder au shell ou exécuter des commandes externes depuis Vim

35 exemples de scripts bash

Comment inclure un fichier dans un script shell bash

fichier de création atomique s'il n'existe pas à partir du script bash

Obtenir une ligne spécifique à partir d'un fichier texte en utilisant uniquement un script shell

bash + lire les variables et les valeurs du fichier par le script bash