Est-il possible de taper une commande bash dans vi et d’obtenir le stdout?
Je trouve souvent fastidieux de fermer et de rouvrir vi simplement parce que je veux chercher quelque chose dans la coquille.
Oui, par exemple si vous voulez faire ls
, essayez:
:!ls
Pour générer un shell, utilisez
:shell
:w !sudo tee %
nano
J'ai tendance à utiliser
ctrl+z
pour dormir vi, courir ce que je dois dans la coquille, puisfg
pour reprendre vi. Ce n’est pas vraiment une réponse à votre question, mais je trouve que c’est un moyen très rapide de travailler.Si vous oubliez que vi est ouvert en arrière-plan (cela peut arriver lorsque vous êtes occupé), lorsque vous essayez de vous déconnecter du shell à l'aide de,
ctrl+d
vous êtes averti que des tâches en arrière-plan sont en cours d'exécution et que vous pouvez les fermer. ou appuyez à nouveau sur ctrl + d pour vous déconnecter. De plus, si vous essayez de rouvrir le même fichier deux fois, vous obtenez un avertissement de récupération. Vous pouvez donc appuyer sura
pour annuler et sur fg pour revenir à vi.la source
Depuis que vous avez mentionné "get the stdout", notez que vous pouvez faire
et la sortie de la commande sera ajoutée au fichier, ou
pour que le contenu de la plage soit filtré via la commande [par exemple
:1,$!wc
]la source
:%!command
semble assez utile:.,+20 !sort
]Mon idiome préféré est
qui est un raccourci pour
qui dirige la ligne en cours à travers la commande et insère la sortie dans le fichier. Le cas le plus courant pour moi est d'éditer la commande avec vi et d'exécuter:
Ou
comme par exemple
pour parcourir l'ensemble du paragraphe actuel à travers le shell.
la source
!}
vous devez être positionné au début du paragraphe, essayez!ap
. (Je ne sais pas s'il s'agit de tous les vi ou seulement de vim)En utilisant deux points et un point d'exclamation, vous pouvez exécuter n'importe quelle commande du chemin d'accès et des scripts du shell. N'oubliez pas que la commande s'exécute sous l'utilisateur qui exécute le programme vi / vim et utilise son environnement.
Puisque vi utilise l'environnement en vigueur lors de son exécution, il utilise le même chemin que celui indiqué dans la commande parent. Gardez à l’esprit que certains shells gardent un cache des programmes dans le chemin, et vi risque de ne pas fonctionner avec ce cache (selon le shell qu’il utilise et sa version), de sorte que vous risquez d’exécuter le mauvais fichier binaire si vous en avez plus. qu'un binaire avec le même nom.
la source
Vous pouvez voir le résultat d'une commande en tapant, par exemple,
:!ls -lh
en mode commande.Si vous souhaitez insérer le résultat de la commande dans le fichier que vous modifiez, ajoutez simplement un
r
. Par exemple,:r!which perl
.la source
Utiliser
!
la réponse est évidemment la bonne réponse, mais si vous changez souvent de rang, quelque chose comme screen ou tmux peut également être utile.la source
J'ai ceci dans mon .vimrc. Trouvé sur le débordement de pile il y a quelque temps:
la source
Je voudrais, et je le fais, contourner cela facilement sous Linux en ouvrant deux fenêtres de ligne de commande de terminal, exécutant vi dans l’une et l’autre, disponibles pour un autre travail en même temps.
la source