108 votes

Comment rediriger la sortie de commande vers vim en bash ?

J'essaie de rediriger la sortie d'une commande bash vers 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 existe-t-il un moyen de faire cela dans bash lui-même, de sorte que Vim soit ouvert et que la sortie y soit collée automatiquement ?

177voto

chaos Points 25386

Vous pouvez utiliser substitution de processus (cela fonctionne aussi avec les applications qui ne peuvent pas lire les données de l'application STDIN ):

vim <(ls -la)

Ou utilisez vim pour lire à partir de STDIN :

ls -la | vim -

47voto

Cris Holdorph Points 779

Tu es vraiment proche de toi-même. Il te manquait juste un personnage.

ls -la | vim -

24voto

Alaa Ali Points 29075

Voici une autre approche, qui, je l'espère, apprendra quelque chose de nouveau à quelqu'un.

Si vous savez que la commande :r !ls -la fonctionne dans vim, vous pouvez faire ce qui suit pour ouvrir vim et lui faire exécuter la commande dès qu'il s'ouvre, directement depuis bash :

vim -c ':r! ls -la'

C'est l'équivalent d'ouvrir vim puis en exécutant la commande :r! ls -la . Cela devrait fonctionner avec n'importe quel vim où la commande vient après la commande -c option.

13voto

iffy Points 1067

Vous pouvez dire à vim d'ouvrir stdin :

ls -la | vim -

1voto

setlocal buftype=nofile

Il s'agit d'une bonne option si vous souhaitez créer un alias pour remplacer le fichier less :

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

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

Une autre option est :

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X