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

68

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

Se provo il pipe 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 usare:

: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?

    
posta faizal 13.08.2014 - 18:13

6 risposte

108

Puoi usare sostituzione del processo (questo funziona anche con applicazioni che non possono leggi da STDIN ):

vim <(ls -la)

O usa la funzione di vim per leggere da STDIN :

ls -la | vim -
    
risposta data chaos 13.08.2014 - 18:58
32

Sei molto vicino da solo. Ti mancava solo un personaggio.

ls -la | vim -
    
risposta data Cris Holdorph 13.08.2014 - 18:18
15

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

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

vim -c ':r! ls -la'

Questo è l'equivalente dell'apertura di vim , quindi dell'esecuzione del comando :r! ls -la . Questo dovrebbe funzionare con qualsiasi comando vim , in cui il comando viene dopo l'opzione -c .

    
risposta data Alaa Ali 13.08.2014 - 19:11
11

Puoi dire a vim di aprire lo stdin:

ls -la | vim -
    
risposta data iffy 13.08.2014 - 18:20
1

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

ls -la > outputfile.txt
    
risposta data Jake Stewart 24.03.2017 - 16:44
0

setlocal buftype=nofile è una buona opzione se vuoi creare un alias per sostituire less :

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

Ora non è necessario digitare il! per uscire.

Un'altra opzione è:

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

quindi puoi uscire solo con q<enter> .

    

Leggi altre domande sui tag