Risposte:
Ciò accade, perché di solito Vim passa alla schermata alternativa e lavora lì. All'uscita, Vim tornerà indietro e quindi non vedrai più nulla della tua sessione Vim, ma il risultato del comando eseguito anche prima di avviare Vim.
Questa funzione è spiegata su :h xterm-screens
(link)
Quindi praticamente non lo vuoi e quindi vuoi disabilitarlo. Puoi farlo, impostando :set t_ti= t_te=
i codici terminali che eseguono questo su vuoto.
Mettendo tutto insieme, vorresti iniziare Vim in questo modo:
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'
Stiamo reimpostando l' 'more'
opzione, in modo da non vedere il messaggio hit-enter-prompt.
less
. Basta incanalarlo in meno in questo modo vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less
. All'inizio il layout potrebbe essere rovinato (è nel mio terminale), ma dopo aver premuto <CL> tutto è bello e dandy.
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'
, c'è solo un "flash rapido", il comando esce con il codice 0, nessun output. Mi sto perdendo qualcosa?
Apprezzo la risposta fornita da Christian Brabandt ma penso che una risposta migliore sarebbe quella di separare il comando quit usando un altro comando -c in questo modo:
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames' -c 'q!'
L'uso di questo metodo significa che è possibile mettere insieme un numero di comandi diversi e quindi usare l'ultimo 'q!' per uscire da Vim.
Per le situazioni in cui è necessario che vim sia stato caricato completamente come se fosse stato avviato manualmente, funziona:
vim -c "autocmd! CursorHold * <commands to run>"
Ad esempio, volevo reindirizzare l'output di :map
un file dalla shell, ma volevo catturare la mappatura creata da vim-compagnia aerea solo dopo che è stata visualizzata la sua scheda (riga in alto che mostra tutti i nomi di buffer aperti). Perché sembra fare questo in modo asincrono, semplicemente eseguire un -c
reindirizzamento su un file non gli dava il tempo di fare i mapping. Potrebbe esserci un modo migliore, ma questo funziona per me, soprattutto perché ho già updatetime
impostato 100
(0,1 secondi), il che influisce sul tempo necessario CursorHold
all'evento. Per impostazione predefinita, vim lo imposta su 4 secondi.
vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"