Come chiudere il buffer senza chiudere la finestra?


23

Di solito apro alcune finestre e tengo aperti alcuni buffer. Dal momento che il mio MO nell'esplorazione del buffer è utilizzare scorciatoie rapide per :bne :bp, voglio chiudere i buffer non necessari dal distrarre la mia navigazione nel buffer.

Ma il dolore è, rilascio :bde :bwrisultati anche nella chiusura della finestra, nel caso in cui ne abbia più aperte. Come posso chiudere (eliminare) un buffer e lasciare intatte le finestre?

Soluzione ispirata dalla risposta di @peth

:command! BW :bn|:bd#

È semplice. Non funziona bene con un solo buffer aperto (ottengo un comportamento diverso a seconda del modo in cui apro i file) ma non è un grosso problema. :)

Risposte:


12

Può essere una seccatura, anche questa domanda viene sollevata più volte #vim(Freenode).

Alcune persone consigliano di non eliminare i buffer e passare a :b partial<Tab>invece di :bn, il che funziona, ma non è quello che stai chiedendo.

Il modo migliore che conosco per farlo è passare a un altro buffer e quindi :bd#, che potresti mappare, ovviamente.

Vedi anche Eliminazione di un buffer senza chiudere la finestra su Vim Wikia.


La sceneggiatura sembra una soluzione che sono disposto ad accettare se non esiste un modo ufficiale. :)
souser12345,

21

Ho rovinato un po 'questo e alla fine ho trovato:

:bp | sp | bn | bd

Ecco la versione copia / incolla per la mappatura dei tasti:

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

O un comando per il tuo .vimrc (chiama con: Bd):

comando Bd bp | sp | bn | bd

L'ho provato un po 'e funziona costantemente in varie condizioni. Se utilizzato sull'ultimo buffer, ti lascerà con un nuovo buffer vuoto.


3
Perdo la divisione se chiudo un buffer aperto in entrambe le finestre, ad esempio l'ultimo buffer. +1 per essere più semplice degli script di wiki per bd senza chiudere la finestra .
Leif Carlsen,

Stavo usando vim-bbye ma la tua risposta è molto più semplice e non dipende da nessuno script. Grazie.
Andrew-Dufresne,

4

Una finestra è una finestra in un buffer. (Vedi :help window.) Non puoi avere una finestra senza un buffer associato. :enewTuttavia, è possibile utilizzare un comando come per sostituire il contenuto della finestra corrente con un buffer vuoto.


Mi aspettavo che dopo l'eliminazione di un buffer, vim potesse passare a un altro buffer o aprirne uno nuovo, se necessario.
souser12345,

@progo, che richiederebbe alcuni script, ad esempio plugin o una semplice mappatura.
Clint Pachl,

2

funziona anche il plugin bufkill.vim . Mi piace usarlo con vim-command-w per funzionalità e dettagli aggiuntivi (come se chiudesse una divisione se è l'ultimo buffer o chiudeva vim se è l'ultimo buffer / divisione).


2

Ecco un'altra soluzione:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

Digitando Ctrl + W, quindi o si crea in silenzio una nuova finestra e si chiude la vecchia finestra. Il cursore viene lasciato nella nuova finestra. Esistono numerosi effetti positivi:

  1. Le dimensioni della divisione originale vengono mantenute.
  2. Un buffer vuoto viene caricato nella nuova divisione.
  3. Il buffer originale è ancora caricato, utilizzare: buffer per elencarlo.
  4. Ctrl + o sposta il cursore nella posizione originale nel vecchio buffer nel caso in cui sia necessario tornare indietro.
  5. Funziona bene anche se viene caricata solo una finestra.

1

Penso che il problema sia che la maggior parte delle persone si aspetta che il buffer e la finestra di vim siano qualcosa che non sono.

Le persone tendono a pensare a una finestra di vim come a un processo autonomo che ha un proprio elenco di buffer, ma purtroppo non lo è. Una finestra di vim è solo una vista dei suoi buffer.
Pertanto sorgono molti problemi, come il tuo problema o il problema che finestre diverse condividono lo stesso elenco di buffer in modo da non poter modificare il buffer 1 nella finestra A e lasciare che Window B ignori il buffer 1 nell'elenco dei buffer.

La mia soluzione è quella di aprire due istanze di VIM, in modo da poter avere il tipo di finestra VIM desiderata. Funziona meglio su WM di piastrellatura.


1

Di solito apro il menu su qualsiasi buffer. Questo aprirà il menu nel riquadro di sinistra e il cursore sarà attivo lì. Quindi torno al buffer attivo ed elimino il buffer.

Dopodiché posso aprire altri file dal menu.

I miei passi sono:

:Vex

ctrl + w + w

:bd
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.