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


J'essaie 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 et ensuite utiliser:

:r !ls -la

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


68
2017-08-13 16:13


origine




Réponses:


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

vim <(ls -la)

Ou utiliser vimfonction de lire de STDIN:

ls -la | vim -

111
2017-08-13 16:58



<(ls -la) est en fait substitution de processus plutôt que substitution de commande. - Eliah Kagan
J'aime vraiment l'option de vim, cela me permet de rechercher, de trouver et de sauvegarder facilement la sortie à partir de sauvegardes de données. - Josue Alexander Ibarra


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

ls -la | vim -

32
2017-08-13 16:18



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


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 faire ce qui suit pour ouvrir vim et le faire exécuter la commande dès son ouverture, directement depuis bash:

vim -c ':r! ls -la'

C'est l'équivalent de l'ouverture vim puis exécuter la commande :r! ls -la. Cela devrait fonctionner avec tout vim commande, où la commande vient après le -c option.


15
2017-08-13 17:11





Vous pouvez dire à vim d'ouvrir stdin:

ls -la | vim -

11
2017-08-13 16:20





Si votre but 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
2018-03-24 15:44





setlocal buftype=nofile est une bonne option si vous allez créer un alias pour 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!' -

de sorte que vous pouvez quitter avec juste q<enter>.


0
2018-01-29 14:43



Bonne idée. Certainement plus court que de taper aussi longtemps! :) - kode