Vim: elimina il buffer senza perdere la finestra divisa


149

Quando un buffer viene eliminato (il comando "bd [elete]"), non solo cancella il buffer ma rimuove anche la finestra divisa in cui si trovava il buffer.

C'è un modo per eliminare / scaricare un buffer e mantenere la finestra divisa?



Questo ha funzionato bene per me.
Rumple Stiltskin,

[Questo DeleteCurBufferNotCloseWindow()funziona bene ed è abbastanza leggibile] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy,

2
Possibile duplicato del buffer di chiusura
ezdazuzena,

Risposte:



327

bp|bd # lo farà.


Dettagli: bp("buffer precedente") ci sposta in un altro buffer nella finestra corrente ( bnfunzionerebbe anche), quindi bd #("eliminazione buffer" "file alternativo") elimina il buffer dal quale ci siamo appena allontanati. Vedi: help bp, help bd, help alternate-file.


71
Non hai idea da quanto tempo cerco qualcosa di simile che è così semplice, non richiede e l'intero script per eseguirlo. Nel mio VIMRC, ora ho questo mappato per CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Cloud

11
Sto cercando di rimappare usando nmap <silent> <leader>d :bp|bd #<CR>, ma sto ottenendo E94: No matching buffer for #<CR>.
Fábio Perez,

22
Metti una barra rovesciata di fronte al |(es. :bp\|bd)
Fango

4
Sapevo che non avrei dovuto installare un plugin per questo. Grazie!
Akash Agrawal,

2
b#|bd #passerà all'ultimo buffer utilizzato anziché al successivo / precedente. Tuttavia, passerà ai buffer nascosti se lo hai set hidden, quindi ho creato una funzione BD più intelligente per evitarlo.
24

15

Puoi aggiungere quanto segue al tuo .vimrcper avere Bdlavoro come bdma senza toccare le spaccature della finestra:

command Bd bp\|bd \#

Ho trovato questo un utile complemento a ciò che ha risposto Mud.


Questo è esattamente quello che ho nel mio .vimrc. :)
Fango,

E puoi aggiungere i 3 comandi per scaricare, cancellare e cancellare un buffer: comando! BUN comando bp \ | bun \ #! Comando BD bp \ | bd \ #! BW bp \ | bw \ # che equivale a ciò che bufkill fornisce ma con 3 linee in vimrc invece di un plugin di oltre 700 linee!
vedi

3
Per me ha funzionato solo con questo in .vimrc command! Bd bp|bd #. Il comando sopra con `` ha mantenuto il buffer nell'elenco dei buffer.
mljrg,


3

Faccio qualcosa di simile a @Mud, ma passo al buffer di visualizzazione precedente #, anziché al buffer precedente nell'elenco buffer. Ecco una chiave vincolante nel mio .vimrc:

nnoremap <silent> <leader>q :lclose<bar>b#<bar>bd #<CR>

Chiudere le finestre di posizione, se esistenti, passare al buffer della vista precedente e quindi chiudere l'ultimo buffer commutato.


1

La mia scelta è

:sb # | bd #
:sb 1 | bd #
: <1. Recall Buffer> | <2. Delete Buffer>

Pensa così! /// <1. Richiama buffer> | <2. Elimina buffer>

:vert sb 2 | bd #
:vert sb <tab key~completed file(buffer)name> | bd #

perché?! È facile ricordare 3 (+ 1) parola chiave!

  1. sb split_buffer
  2. bd delete buffer ▶ semplici 2 parole chiave
  3. # o Numero di buffer
  4. vert ▶ short_form di vertical (split_buffer o altro)

Che sono facili e molto utili in molti altri molti casi!

Buona giornata! :)


0

Prima usavo:

:bp<bar>sp<bar>bn<bar>bd<CR>

Ma ho trovato certe occasioni in cui ha chiuso la mia finestra. Inoltre, il buffer successivo o precedente potrebbe non essere quello che si desidera visualizzare nella divisione.

Ora faccio questo:

  • passare al buffer su cui voglio lavorare
  • Elimina il buffer alternativo

nnoremap <leader>d :bd#<CR>

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.