Come posso scrivere tutti i buffer con nome?

Sep 21 2020

Vorrei un comando che salvi ogni buffer che ha un nome di file. :h :walldà questo:

                            *:wa* *:wall*
:wa[ll]     Write all changed buffers.  Buffers without a file
            name cause an error message.  Buffers which are
            readonly are not written.

:wa[ll]!    Write all changed buffers, even the ones that are
            readonly.  Buffers without a file name are not
            written and cause an error message.

Quindi, fondamentalmente, voglio un comando che dica "Scrivi tutti i buffer modificati. I buffer senza un nome di file vengono saltati / ignorati". Non mi interessa cosa succede ai buffer di sola lettura.

C'è un comando esistente che lo fa o dovrei scrivere una funzione per farlo?

Risposte

5 BLayer Sep 21 2020 at 16:49

Sembra un luogo ideale per utilizzare il comando :silent!.

:silentpuò essere inserito prima di altri comandi e il suo effetto è quello di impedire la visualizzazione di messaggi "normali" (cioè non di errore). I messaggi di errore continuano a essere visualizzati e possono causare l'interruzione dell'esecuzione.

:silent!, con l'aggiunta !, fa un ulteriore passo avanti e sopprime anche i messaggi causati da errori e impedisce a tali errori di interrompere l'esecuzione.

Quindi dovresti essere in grado di usare quest'ultimo insieme a :wa!così ...

:silent! wa!

... per ottenere il risultato desiderato:

  1. Scrivi buffer modificati
  2. Ignora i buffer senza un nome file (errore eliminato)
  3. Scrivi buffer di sola lettura (che non hai una preferenza per nessuno dei due modi)