GNU/Linux >> Tutoriels Linux >  >> Linux

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

Vim, comme vous le savez peut-être déjà, est un éditeur puissant et riche en fonctionnalités. Chez HowtoForge, nous avons écrit plusieurs tutoriels sur Vim, couvrant son utilisation de base, ses plugins, ainsi que d'autres fonctionnalités utiles. Mais étant donné la mer de fonctionnalités offertes par Vim, nous trouvons toujours quelque chose d'utile à partager avec notre lectorat.

Dans ce tutoriel, nous allons nous concentrer sur la façon dont vous pouvez exécuter des commandes externes ainsi que sur l'accès au shell de ligne de commande depuis la fenêtre de l'éditeur.

But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 14.04, and the Vim version we've used is 7.4.

Exécuter des commandes externes dans Vim

Parfois, vous voudrez peut-être exécuter des commandes externes depuis la fenêtre de l'éditeur Vim. Par exemple, considérez une situation dans laquelle vous avez ouvert un fichier dans Vim, apporté des modifications, puis en essayant d'enregistrer ces modifications, Vim génère une erreur indiquant que vous ne disposez pas des autorisations suffisantes.

Maintenant, quitter la session vim en cours et ouvrir à nouveau le fichier avec des privilèges suffisants signifiera la perte de toutes les modifications que vous avez apportées, ce qui, vous en conviendrez, ne sera pas une option dans la plupart des cas. C'est dans des situations comme celles-ci que la possibilité d'exécuter des commandes externes à partir de l'éditeur s'avère utile.

Nous reviendrons sur le cas d'utilisation ci-dessus plus tard (**), mais pour l'instant, voyons comment vous pouvez exécuter des commandes de base depuis vim.

Supposons que, lors de la modification d'un fichier, vous souhaitiez connaître le nombre de lignes, de mots et de caractères que contient le fichier. Pour ce faire, dans le mode commande de Vim, saisissez simplement deux points (:) suivis d'un bang (!) et enfin la commande ('wc' dans ce cas) suivie du nom du fichier (utilisez % pour le fichier actuel).

:! wc %

Voici un exemple :

Fichier avec la commande susmentionnée prête à être exécutée :

et voici la sortie sur le terminal :

Une fois que vous avez fini de voir la sortie, appuyez sur la touche Entrée et vous serez ramené à votre session Vim.

Cette fonctionnalité peut s'avérer très utile dans les situations où, par exemple, vous écrivez un code ou un script et souhaitez savoir rapidement si le code/script contient ou non des erreurs de compilation ou de syntaxe.

Ensuite, au cas où l'exigence est d'ajouter la sortie au fichier, utilisez le ':read !' commande. Voici un exemple :

:read ! wc %

La commande "read" insère le résultat de la commande externe sur une nouvelle ligne sous la ligne actuelle dans le fichier en cours de modification. Si vous le souhaitez, vous pouvez également spécifier un numéro de ligne particulier - la sortie sera ajoutée après cette ligne particulière.

Par exemple, la commande suivante ajoutera la sortie de 'wc' après la deuxième ligne du fichier.

:2read ! wc %

Remarque :Utilisez '$' pour insérer après la dernière ligne et '0' pour insérer avant la première ligne.

Maintenant, pour en revenir au cas d'utilisation dont nous avons parlé au début (**), voici la commande qui vous aidera à enregistrer le fichier sans avoir à le fermer d'abord (ce qui signifie qu'il n'y a pas de perte de modifications non enregistrées) puis à l'ouvrir avec, disons , sudo.

:w ! sudo tee %

Access Shell dans Vim

En plus d'exécuter des commandes individuelles, vous pouvez également vous faire déposer dans un shell nouvellement lancé depuis Vim. Pour cela, il vous suffit de lancer la commande suivante depuis l'éditeur :

:shell

ou

:sh

et tapez 'exit' lorsque vous avez terminé le travail sur le shell - cela vous ramènera à la session Vim d'où vous l'aviez quitté initialement.

L'échappatoire à garder à l'esprit

Bien que la possibilité d'accéder à un shell ait définitivement ses propres utilisations dans le monde réel, elle peut également être utilisée comme technique d'escalade de privilèges. Comme nous l'avons expliqué dans l'un de nos tutoriels précédents (sur sudoedit), même si vous fournissez à un utilisateur un accès sudo pour ne modifier qu'un seul fichier via Vim, il peut lancer un nouveau shell depuis l'éditeur en utilisant cette technique, et pourra alors faire quoi que ce soit en tant que 'root' ou superutilisateur.

La possibilité d'exécuter des commandes externes à partir de Vim est une fonctionnalité importante qui peut s'avérer utile dans de nombreuses situations (certaines d'entre elles ont été mentionnées dans ce didacticiel). La courbe d'apprentissage de cette fonctionnalité n'est pas abrupte, donc les débutants comme les utilisateurs expérimentés peuvent en profiter.

Utilisez-vous cette fonctionnalité depuis un certain temps déjà ? Avez-vous quelque chose à partager? S'il vous plaît laissez vos pensées dans les commentaires ci-dessous.


Linux
  1. Comment supprimer les N premières lignes d'un fichier Ascii à l'aide des commandes Shell ?

  2. Comment imprimer de Vim en PDF ?

  3. Comment exécuter des scripts Python à partir du shell

  4. Comment exécuter un script shell lorsqu'un fichier ou un répertoire change ?

  5. Ouvrir Vim depuis un script shell Bash

Comment exécuter un script Shell en tant que service Systemd sous Linux

Comment exécuter les commandes de fichier .sh tout en une fois sous Linux

Linux - Comment exécuter un chargeur de démarrage à partir de Linux ?

Comment accéder aux fichiers Flash à partir de sites Web de streaming ?

Comment accéder aux fichiers Windows à partir d'Ubuntu ?

Comment exécuter la commande Vim depuis le shell ?