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.