web-dev-qa-db-fra.com

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

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?

83
faizal

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

vim <(ls -la)

Ou utilisez la fonction vim pour lire à partir de STDIN:

ls -la | vim -
134
chaos

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

ls -la | vim -
37
Cris Holdorph

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

Si vous savez que la commande :r !ls -la fonctionne 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 vimname__, puis à exécuter la commande :r! ls -la. Cela devrait fonctionner avec n'importe quelle commande vimname__, où la commande vient après l'option -c.

19
Alaa Ali

Vous pouvez dire à vim d'ouvrir stdin:

ls -la | vim -
12
iffy

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
Jake Stewart

setlocal buftype=nofile

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

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!' -

vous pouvez donc quitter avec seulement q<enter>.