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?
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 -
Vous êtes vraiment proche l'un de l'autre. Il vous manquait juste un personnage.
ls -la | vim -
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 vim
name__, puis à exécuter la commande :r! ls -la
. Cela devrait fonctionner avec n'importe quelle commande vim
name__, où la commande vient après l'option -c
.
Vous pouvez dire à vim d'ouvrir stdin:
ls -la | vim -
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
setlocal buftype=nofile
C'est une bonne option si vous voulez créer un alias pour remplacer less
name__:
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>
.