Sopprime l'output di un autocomando vim


13

Ho un autocommand definito nel mio vimrc:

au BufWritePost * !./make.sh

Lo script make.shcompila un .texfile 3 volte e non voglio che l'output venga visualizzato.

C'è un modo per sopprimere l'output?

Ho provato ad aggiungere silentuna riga prima del aucomando, ma non ha funzionato. Ho anche provato in questo modo senza successo.

Risposte:


20

Il silenzio dovrebbe andare prima !./make.sh, non prima au. Mettere silentprima ausignifica solo che registrerà il comando automatico in silenzio. Dovrebbe invece apparire così:

au BufWritePost * silent! !./make.sh

Un problema con l'esecuzione di un comando esterno come questo con il :silentcomando è che lo schermo non viene ridisegnato, lasciandoti con uno schermo vuoto. Tuttavia, vim ha un comando che ridisegna lo schermo, che può essere usato in questo modo:

au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!

Il motivo per cui ho bisogno di usare il comando execute è perché il :!comando usa tutti i caratteri trovati dopo di esso, il che significa che non potrei semplicemente farlo silent! !./make.sh | redraw!perché bash avrebbe cercato di interpretare tutti i personaggi dopo !.

Appunti

Si noti che :silent!ignora i messaggi di errore, mentre :silentnon lo fa. Inoltre, la >/dev/null 2>&1parte reindirizza tutto l'output di !./make.sha /dev/null. Puoi leggere di più sul reindirizzamento I / o in bash qui .

Argomenti della Guida pertinenti

  • :help :execute
  • :help :silent
  • :help :!
  • :help :bar

Il secondo comando ha funzionato, anche se continua a stampare l'output sullo schermo. Inoltre, non ho bisogno di premere Invio al termine dello script, il che è positivo. Ma mi chiedo se c'è un modo per sopprimere totalmente l'output.
Andre Herman Bezerra,

1
Sostituire execute "!./make.sh"con execute "!./make.sh >/dev/null 2>&1"aiuto? Questo reindirizza tutto l'output del comando su /dev/null. Leggi tldp.org/LDP/abs/html/io-redirection.html per ulteriori informazioni sul reindirizzamento in bash.
EvergreenTree

Avrei dovuto pensarci! Funziona. Grazie!
Andre Herman Bezerra,

7

La risposta alla tua domanda diretta è proprio come ha pubblicato @EvergreenTree. Tuttavia, mi sembra che manchi qualche strumento integrato di Vim per la costruzione / compilazione / sfilacciatura di progetti. In particolare :makee l'elenco delle correzioni rapide.

Cosa ci porta ad usare :make?

L'utilizzo :makeconsente di raccogliere gli errori in un elenco noto come elenco di correzioni rapide. Usando la correzione rapida puoi navigare tra gli errori nei tuoi file, quindi stai saltando proprio dove il compilatore dice che l'errore è (utile vero?).

:rendere

Esecuzione :makeeseguirà il programma make, 'makeprg'. Quindi analizzare l'output con 'errorformat'e inserire ciascuna voce nell'elenco di correzione rapida.

In genere il 'makeprg'valore predefinito è il makecomando che esegue a Makefile. Tuttavia puoi cambiare il tuo 'makeprg'tramite il :compilercomando o impostarlo direttamente.

Puoi anche passare argomenti aggiuntivi a :make. per esempio:make clean

Nota: l'esecuzione :makemostrerà spesso l'output del comando nella parte inferiore dello schermo con un prompt che chiede di premere Invio. Basta premere invio poiché tutto l'output sarà disponibile nell'elenco delle correzioni rapide. Puoi eliminarlo tramite :silent, ad es :silent make.

Un comando personalizzato comune per un make silenzioso è:

command -nargs=* -bar Smake silent make <args> <bar> cwindow

elenco di correzioni rapide

Dopo aver eseguito il :maketuo elenco di aggiornamenti rapidi conterrà l'output del compilatore.

Utilizzare il comando seguente per navigare nell'elenco delle correzioni rapide.

  • :copen per aprire la finestra di aggiornamento rapido
  • :cclose per chiudere la finestra di aggiornamento rapido
  • :cnext/ :cprevper passare all'elemento successivo / precedente
  • :ccper stampare in fondo l'errore corrente o :cc 3per mostrare un errore specifico in questo esempio 3

Personalmente uso il plug-in senza compromessi di Tim Pope per navigare nell'elenco delle correzioni rapide.

Che dire di correre :makeautomaticamente e in silenzio?

Puoi farlo con un :autocmdproprio come te dove.

augroup auto_make
    autocmd!
    autocmd BufWritePost * silent make
    autocmd QuickFixCmdPost *make* cwindow
augroup END

Come bonus ho aggiunto aprendo la finestra di aggiornamento rapido tramite :cwindowse sono presenti errori.

Nota: dovrebbe essere più specifico con quel modello di file su BufWritePostautocmd in modo che i file non correlati non vengano creati.

Ce n'è ancora di più ?!

Questo sta usando solo alcuni dei comandi integrati di Vim più alcuni autocmd per convincere. Ci sono ovviamente plugin e strumenti che potrebbero aiutarti

  • Dispatch.vim può essere utilizzato per eseguire :makelavori in modo asincrono.
  • La sintassi del plugin sintetico controlla il file dopo :write.
  • Ale.vim (Asynchronous Lint Engine) è un plugin per fornire lanugine in NeoVim e Vim 8 mentre modifichi i tuoi file di testo.
  • Unimpaired.vim semplifica la gestione dell'elenco delle correzioni rapide.
  • Semplici vecchi Makefile. A meno che non ./script.shsia molto complicato, potresti voler esaminare l'uso di make. Può ridimensionare più attività in un secondo momento ed è uno strumento di costruzione comune.
  • Puoi usare Vim Awesome per cercare altri plugin che potrebbero aiutarti.

Conclusione

Personalmente mi integra :makee la correzione rapida nel mio flusso di lavoro. Credo che catturare l'output del tuo processo di creazione e catturare gli errori valga la pena investire. Come bonus aggiuntivo ti sentirai probabilmente più a tuo agio con l'elenco delle correzioni rapide e puoi utilizzare l'elenco per altre applicazioni come :grep.

Per ulteriori informazioni, consultare:

:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc

Ci ho pensato :makementre rispondevo, ma non l'ho incluso. È una migliore idea usare prima di compilare le cose.
EvergreenTree

come modificare autocmd per eseguire solo makeprg su un determinato file.
Ibn Saeed,
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.