Commandes Bash à l'intérieur de VI
Est-il possible de taper une commande bash à l'intérieur de VI et d'obtenir le stdout?
Je trouve souvent fastidieux de fermer et de rouvrir VI simplement parce que je veux regarder quelque chose dans la coquille.
Oui, E.g si vous voulez faire ls
, essayez:
:!ls
Pour frayer une coquille, utilisez
:Shell
J'ai tendance à utiliser ctrl+z
Pour dormir VI, courez ce que j'ai besoin dans la coquille, alors fg
pour reprendre VI. Pas exactement une réponse à votre question, mais je trouve un moyen très rapide de travailler.
Si vous oubliez que vous avez VI Open à l'arrière-plan (cela peut se produire lorsque vous êtes occupé), lorsque vous essayez de vous déconnecter de la coquille en utilisant ctrl+d
Vous serez averti que vous avez des travaux de fond en cours d'exécution et vous pouvez les fermer ou frapper Ctrl + D à nouveau 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 abandonner et exécuter FG pour revenir à VI.
Depuis que vous avez mentionné "Obtenez le stdout", notez que vous pouvez faire
:r! command
et la sortie de la commande sera ajoutée au fichier ou
:<range>!command
avoir le contenu de la plage filtrée via la commande [par ex. :1,$!wc
]
Mon idiome préféré est
!!command
qui est sténographique pour
:.!command
quels conduisent la ligne actuelle à travers la commande et insère la sortie dans le fichier. L'affaire la plus courante pour moi est de modifier la commande avec VI et de courir:
!!sh
Ou
!<motion>command
comme (par exemple)
!apsh
exécuter l'ensemble du paragraphe actuel à travers la coquille.
En utilisant le point de colon et d'exclamation, vous pouvez exécuter n'importe quelle commande dans le chemin de coquille et les scripts Shell, gardez à l'esprit que la commande fonctionne sous l'utilisateur exécutant le programme VI/VIM et l'utilisation de son environnement.
:!<command>
Puisque VI utilise l'environnement qui était en vigueur lorsqu'il était exécuté, il utilise le même chemin qui était dans la commande parent. Gardez à l'esprit que certaines obus conservent une cache des programmes sur le chemin, et VI peut ne pas fonctionner avec ce cache (dépendant de la coquille qu'il utilise et sa version), vous risquez donc de courir le mauvais binaire au cas où vous auriez plus qu'un binaire avec le même nom.
Vous pouvez voir la sortie d'une commande en tapant, par exemple, :!ls -lh
en mode de commande.
Si vous souhaitez insérer la sortie de la commande dans le fichier que vous modifiez, il suffit d'ajouter un r
. Par exemple, :r!which Perl
.
À l'aide de !
est évidemment la bonne réponse, mais si vous basculez fréquemment, quelque chose comme l'écran ou TMux pourrait également être utile.
J'ai cela dans mon .vimrc. Trouvé sur la pile débordement un moment de retour:
" Executes the current line in a bash Shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Je ferais, et faites-le, ce qui est facilement présent sous Linux en ouvrant deux fenêtres de ligne de commande terminale, exécutant VI dans l'un et l'autre disponible pour d'autres travaux en même temps.