web-dev-qa-db-fra.com

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.

33
harp

Oui, E.g si vous voulez faire ls, essayez:

:!ls

Pour frayer une coquille, utilisez

:Shell

45
daisy

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.

12
Rqomey

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]

11
Random832

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.

5
Liudvikas Bukys

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.

4
Didi Kohen

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.

4
Eliot Ball

À 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.

1
Ryan A.

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>
0
Clayton Stanley

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.

0
Harry Weston