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

67

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

Si j'essaie 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 y a-t-il un moyen de faire cela en bash lui-même, de sorte que Vim soit ouvert et que le résultat y soit collé automatiquement?

    
posée faizal 13.08.2014 - 18:13
la source

6 réponses

106

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

vim <(ls -la)

Ou utilisez la fonction vim pour lire STDIN :

ls -la | vim -
    
réponse donnée chaos 13.08.2014 - 18:58
la source
31

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

ls -la | vim -
    
réponse donnée Cris Holdorph 13.08.2014 - 18:18
la source
15

Voici une autre approche, espérons-le, pour enseigner quelque chose de nouveau à quelqu'un.

Si vous savez que la commande :r !ls -la fonctionne à l'intérieur de vim, vous pouvez procéder comme suit pour ouvrir vim et l'exécuter dès son ouverture, directement depuis bash:

vim -c ':r! ls -la'

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

    
réponse donnée Alaa Ali 13.08.2014 - 19:11
la source
11

Vous pouvez dire à vim d’ouvrir stdin:

ls -la | vim -
    
réponse donnée iffy 13.08.2014 - 18:20
la source
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
    
réponse donnée Jake Stewart 24.03.2017 - 16:44
la source
0

setlocal buftype=nofile est une bonne option si vous souhaitez créer un alias pour remplacer less :

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

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

Une autre option est:

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

vous pouvez donc quitter avec juste q<enter> .

    
la source

Lire d'autres questions sur les étiquettes