Vim: salva e chiudi il buffer in un comando


25

Ho un sacco di file di testo in una directory e so che dovrò modificare ognuno di essi.

Comincio dalla linea di lode con

vim *.txt

che apre i file come buffer separati in vim e mi lascia guardare il primo. Lo modifico - quindi uso ': w' per salvarlo e ': bd' per chiudere il buffer e passare a quello successivo.

Questo ': w: bd' per salvare e chiudere il buffer mi sembra lungo, e sospetto che ci sia un modo più vim ninja di farlo - qual è il modo consigliato per salvare e chiudere il buffer su cui stai lavorando in un colpo solo?


Il mio modo consigliato sarebbe semplicemente spostarmi nel :nextbuffer e scrivere / chiudere tutto una volta terminato il tuo compito :wqa. Questo suppone che tu abbia :set hiddennel tuo ~/.vimrc.
romainl

Risposte:


22

Quando si passano i file a Vim dalla riga di comando, non vengono solo aperti nei buffer, ma popolano anche l' elenco degli argomenti . Pertanto, è possibile utilizzare comandi simili :nexte :firstper navigare attraverso di essi (e :argdoper l'elaborazione batch, che può essere un trucco intelligente). Il comando che consiglio per la tua domanda è :wnext(forma abbreviata :wn), che :writeè il buffer corrente e quindi passa a :nextquello.

Non è necessario esplicitamente :bdeleteun buffer, soprattutto quando si avvia Vim dalla riga di comando con un set di file e quindi si chiude al termine. (Le uniche eccezioni a cui riesco a pensare è scaricare un enorme file per salvare la memoria di sistema o riutilizzare una singola istanza GVIM per molte modifiche diverse.)

Tuttavia, se lo vuoi davvero, basta definire un comando personalizzato, ad es

:command Wd write|bdelete

5
Hai menzionato due metodi per ottenere ciò che il PO ha richiesto, ma il secondo non è evidente: :w|bd.
Jonno,

-> Questo ha il vantaggio di adattare l'approccio utilizzato dall'OP, anche se :nextin alcuni casi sono d'accordo .
Jonno,

4

Mentre sono d'accordo che non è necessario eliminare i buffer aperti che non si stanno attualmente utilizzando, mi piace eliminarli perché ho abilitato la linea di tabulazione della compagnia aerea vim , che mostra tutti i buffer aperti sempre nella parte superiore del finestra. Ho il seguente nel mio .vimrc:

nnoremap qq :w\|bd<cr>

qq salva e chiude il buffer corrente, ma confonde anche con la funzionalità "record macro" di vim (con cui sto bene).


2
Mi ZZviene in mente il built-in , ma questo finisce per salvare ed uscire completamente da Vim, piuttosto che semplicemente cancellare il buffer. Le lettere minuscole zzpotrebbero essere un'interessante mappatura alternativa, per chiunque trovi le macro più preziose del centrare la vista sulla linea corrente del cursore.
settembre

1
Di recente l'ho cambiato in Q, dopo aver realizzato quanto possa essere preziosa la registrazione in Vim.
apostl3pol
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.