Come reindirizzare l'output del comando per vim in bash?


87

Sto cercando di reindirizzare l'output di un comando bash in un nuovo file.

Se provo la pipa come di seguito:

ls -la | vim

Bash mi mostra gli errori:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

So che posso aprire Vim e quindi utilizzare:

:r !ls -la

Ma c'è un modo per farlo in bash stesso, in modo che Vim sia aperto e l'output venga incollato lì automaticamente?

Risposte:




19

Ecco un altro approccio, spero di insegnare a qualcuno qualcosa di nuovo.

Se sai che il comando :r !ls -lafunziona all'interno di vim, puoi fare quanto segue per aprire vim e fargli eseguire il comando non appena si apre, direttamente da bash:

vim -c ':r! ls -la'

Questo è l'equivalente dell'apertura e vimquindi dell'esecuzione del comando :r! ls -la. Questo dovrebbe funzionare con qualsiasi vimcomando, dove il comando arriva dopo l' -copzione.


12

Puoi dire a Vim di aprire stdin:

ls -la | vim -

1

Se il tuo obiettivo è semplicemente quello di ottenere l'output in un file di testo, non è necessario invocare vim. Bash può farlo da solo con

ls -la > outputfile.txt

1

setlocal buftype=nofile

Questa è una buona opzione se hai intenzione di creare un alias da sostituire less:

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

Ora non è necessario digitare il! abbandonare.

Un'altra opzione è:

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

così puoi uscire con solo q<enter>.


Buona idea. Decisamente più breve della digitazione così lunga! :)
kode
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.