Réponses:
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, puis fg
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 sur a
pour annuler et sur fg pour revenir à vi.
Depuis que vous avez mentionné "get the stdout", notez que vous pouvez faire
:r! command
et la sortie de la commande sera ajoutée au fichier, ou
:<range>!command
pour que le contenu de la plage soit filtré via la commande [par exemple :1,$!wc
]
:%!command
semble assez utile
:.,+20 !sort
]
Mon idiome préféré est
!!command
qui est un raccourci pour
:.!command
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:
!!sh
Ou
!<motion>command
comme par exemple
!apsh
pour parcourir l'ensemble du paragraphe actuel à travers le shell.
!}
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.
:!<command>
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.
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
.
J'ai ceci dans mon .vimrc. Trouvé sur le débordement de pile il y a quelque temps:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
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.