Chiudi e scarica un buffer senza uscire da Vim


55

Spesso, caricherò alcune informazioni in un buffer temporaneo e poi le chiuderò con :clo!. Ma questo nasconde il buffer anziché scaricarlo completamente, anche se ho nohiddenimpostato. Lo trovo noioso da quando ricevo una conferma in più quando esco da Vim, riguardo ai contenuti che ho (già pensato di) scartato.

Potrei semplicemente usare :q!invece, ma è una cattiva abitudine da prendere perché uscirà completamente da Vim se rimane solo un buffer, il che è anche fastidioso. Peggio ancora, se scrivessi :qa!, potrei perdere molto lavoro.

C'è una via di mezzo? Mi piacerebbe davvero un comando che uccide il buffer corrente ma non esce da Vim. Non sono contrario a scriverlo in Vimscript, ma preferirei evitarlo se il comando esiste già.

Risposte:


70

C'è un comando per fare esattamente questo: :bdeleteo solo :bd. Di default scaricherà il buffer corrente. Per scaricare un altro buffer, ottenere innanzitutto l'elenco di tutti i buffer con :bufferscomando e successivamente è possibile specificare il numero dopo :bdrimuoverlo. Inoltre :bd+ space+ tabconsente il completamento utilizzando il nome del buffer.


1
Funzionerà sull'ultimo buffer aperto, che non è esattamente quello che volevo, ma poiché non si chiude, è abbastanza buono per i miei scopi.
Kevin,

Il plugin vim-bbye potrebbe essere quello che stai cercando: github.com/moll/vim-bbye
alxndr

1
Questo non funziona in vi
redolent il

Inoltre, l'alias integrato :lsè più facile (imo) da ricordare e fa lo stesso di:buffers
kuzyn,

Questo non scarica il buffer. In realtà non lo chiude nemmeno. Disabilita semplicemente 'buflisted'. vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

Puoi cancellare completamente un buffer usando il comando: bwipeout (o: bw). Ciò rimuove completamente il buffer dalla memoria, inclusi eventuali segni, impostazioni delle opzioni, ecc. Che sono stati aggiunti ad esso. Allo stesso modo: bdelete (o: bd) rimuove il buffer, ma lo lascia in memoria e mantiene i segni e le impostazioni delle opzioni.

Secondo il commento di Tom Hale, la documentazione di Vim consiglia di usare: bd over: bw a meno che tu non sappia cosa stai facendo. Tendo a usare: bw perché mi piace l'idea di rimuovere completamente il buffer dalla memoria, e non faccio molto uso di segni, impostazioni di opzioni specifiche del buffer, ecc., Al punto da averne bisogno di rimanere dopo aver chiuso il mio buffer.

Come il comando: quit (: q), Vim genererà un errore se il buffer è cambiato. Per risolvere questo problema, è possibile aggiungere un punto esclamativo dopo il comando per sopprimere il prompt. Un'altra opzione, invece di aggiungere punti esclamativi a tutto, è quella di aggiungere "set confirm" al tuo vimrc. Con questo set, vim ti chiederà di salvare le modifiche ai file alla chiusura.

: bufdo è un comando utile che esegue un altro comando su tutti i buffer attivi. La combinazione del comando: bufdo con il comando: bw /: bd consente di rimuovere contemporaneamente tutti i buffer attivi. È ancora possibile utilizzare il punto esclamativo per eliminare gli errori, ma se lo si inserisce dopo: bufdo, after: bw o after entrambi provoca risultati diversi per ciascuno:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

Ecco alcuni altri utili comandi del buffer:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

C'è molto di più nella gestione del buffer che non rientra nell'ambito di questa domanda. Dai un'occhiata a:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


Potete per favore aggiungere qualche spiegazione a questa risposta?
EvergreenTree

L'aiuto dice "non usare questo se non sai cosa stai facendo", indicando che :bdè preferito nella maggior parte dei casi
Tom Hale,

1
@TomHale Sarebbe bello sapere cos'altro :bwfa oltre "Tutto ciò che riguarda il buffer viene perso. Tutti i segni in questo buffer diventano non validi, le impostazioni delle opzioni vanno perse, ecc.". Mi sembra perfettamente ragionevole se voglio "chiudere" un buffer come sarebbe se abbandonassi completamente Vim.
Kenny Evitt,

Preferisco: bw over: bd perché se usi: bd e poi premi <ctrl - ^> per andare all'ultimo buffer usato, lo farà apparire dalla memoria. : bw mi dà più controllo e fa quello che voglio ^^
eli

è fantastico! grazie @ Soylent17!
apollo
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.