Comment rediriger la sortie de la commande vers vim dans bash?


87

J'essaie de rediriger la sortie d'une commande bash dans un nouveau fichier.

Si j'essaye le tuyau comme ci-dessous:

ls -la | vim

Bash me montre les erreurs:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Je sais que je peux ouvrir Vim puis utiliser:

:r !ls -la

Mais existe-t-il un moyen de le faire dans bash lui-même, de sorte que Vim soit ouvert et que la sortie y soit collée automatiquement?

Réponses:


140

Vous pouvez utiliser la substitution de processus (cela fonctionne également avec les applications qui ne peuvent pas lire STDIN):

vim <(ls -la)

Ou utilisez vimla fonction pour lire à partir de STDIN:

ls -la | vim -

2
<(ls -la)est en fait un processus de substitution plutôt que de substitution de commande .
Eliah Kagan

1
J'aime beaucoup l'option de vim, elle me permet de rechercher, de rechercher et d'enregistrer facilement la sortie à partir de sauvegardes de données.
Josué Alexander Ibarra

38

Vous êtes vraiment proche l'un de l'autre. Il vous manquait juste un personnage.

ls -la | vim -

10
Eh bien, techniquement, c'est deux personnages. ;)
Cory Klein

19

Voici une autre approche, j'espère enseigner quelque chose de nouveau à quelqu'un.

Si vous savez que la commande :r !ls -lafonctionne dans vim, vous pouvez procéder comme suit pour ouvrir vim et lui demander d'exécuter la commande dès son ouverture, directement depuis bash:

vim -c ':r! ls -la'

Cela équivaut à ouvrir vimpuis exécuter la commande :r! ls -la. Cela devrait fonctionner avec n'importe quelle vimcommande, où la commande vient après l' -coption.


12

Vous pouvez dire à vim d'ouvrir stdin:

ls -la | vim -

1

Si votre objectif est simplement d'obtenir la sortie dans un fichier texte, vous n'avez pas besoin d'appeler vim. Bash peut le faire seul avec

ls -la > outputfile.txt

1

setlocal buftype=nofile

C'est une bonne option si vous voulez créer un alias à remplacer less:

seq 100 | vim +':setlocal buftype=nofile' -

Maintenant, vous n'avez pas besoin de taper le! quitter.

Une autre option est:

seq 100 | vim +'nnoremap q :quit!' -

afin que vous puissiez sortir avec juste q<enter>.


Bonne idée. Définitivement plus court que de taper aussi longtemps! :)
kode
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.