Risposte:
Sì, ad es. Se vuoi farlo ls
, prova:
:!ls
Per generare una shell, usa
:shell
:w !sudo tee %
nano
Tendo a usare ctrl+z
vi per dormire vi, eseguire ciò di cui ho bisogno nella shell, quindi fg
per riprendere vi. Non è esattamente una risposta alla tua domanda, ma trovo che sia un modo molto veloce di lavorare.
Se si dimentica che vi è aperto in background (ciò può accadere quando si è occupati), quando si tenta di disconnettersi dalla shell utilizzando ctrl+d
si verrà avvisati che sono in esecuzione lavori in background e è possibile chiuderli, oppure premi di nuovo ctrl + d per uscire. Inoltre, se si tenta di riaprire due volte lo stesso file, viene visualizzato un avviso di recupero, quindi è possibile premere a
per interrompere ed eseguire fg per tornare a vi.
Dato che hai menzionato "get the stdout", nota che puoi farlo
:r! command
e l'output del comando verrà aggiunto al file, o
:<range>!command
avere il contenuto dell'intervallo filtrato tramite il comando [es. :1,$!wc
]
:%!command
sembra abbastanza utile
:.,+20 !sort
]
Il mio linguaggio preferito è
!!command
che è una scorciatoia per
:.!command
che convoglia la linea corrente attraverso il comando e inserisce l'output nel file. Il caso più comune per me è modificare il comando con vi ed eseguire:
!!sh
O
!<motion>command
come (ad esempio)
!apsh
per eseguire l'intero paragrafo corrente attraverso la shell.
!}
te deve essere posizionato all'inizio del paragrafo, prova !ap
. (Non so se questo è in ogni vi o solo vim)
Usando i due punti e il punto esclamativo è possibile eseguire qualsiasi comando nel percorso della shell e negli script della shell, tenere presente che il comando viene eseguito sotto l'utente che esegue il programma vi / vim e utilizzando il suo ambiente.
:!<command>
Poiché vi utilizza l'ambiente che era attivo al momento dell'esecuzione, utilizza lo stesso percorso che era nel comando parent. Tieni presente che alcune shell mantengono una cache dei programmi nel percorso e vi potrebbe non funzionare con questa cache (dipende dalla shell che utilizza e dalla sua versione), quindi potresti finire con l'esecuzione del binario sbagliato nel caso in cui tu ne abbia di più di un binario con lo stesso nome.
Puoi vedere l'output di un comando digitando, ad esempio, :!ls -lh
in modalità comando.
Se desideri inserire l'output del comando nel file che stai modificando, aggiungi semplicemente un r
. Ad esempio :r!which perl
,.
Ho questo nel mio .vimrc. Trovato su Stack Overflow qualche tempo fa:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Lo farei e lo farei facilmente in Linux aprendo due finestre della riga di comando del terminale, eseguendo vi in una e l'altra disponibili per altri lavori contemporaneamente.