Chiudi il file senza uscire dall'applicazione VIM?


258

Uso i comandi :ee :wper modificare e scrivere un file. Non sono sicuro se esiste un comando "chiudi" per chiudere il file corrente senza lasciare Vim?

So che il :qcomando può essere usato per chiudere un file, ma se è l'ultimo file, anche Vim viene chiuso; In realtà su Mac OS MacVim si chiude. Solo la finestra di Vim è chiusa e potrei usare Control- Nper aprire di nuovo una finestra di Vim vuota. Vorrei che Vim rimanesse aperto con uno schermo vuoto.

Risposte:


343

Questo elimina il buffer (che si traduce per chiudere il file)

:bd 

6
Il tuo è migliore del mio per quello che l'OP ha chiesto, anche se tendo a preferire: enew perché mi piace avere il buffer nell'elenco dei buffer. :)
Rytmis,

2
Quando lo faccio, vim mostra il primo buffer, ma posso ancora accedere al buffer
Martin Andersson,

18
@Martin, per eliminare completamente il buffer, utilizzare : bw
sebnow

43

Come già accennato, stai cercando :bd, tuttavia questo non rimuove completamente il buffer, è ancora accessibile:

:e foo
:e bar
:buffers
  1 #h   "foo"                          line 1
  2 %a   "bar"                          line 1
Press ENTER or type command to continue
:bd 2
:buffers
  1 %a   "foo"                          line 1
Press ENTER or type command to continue
:b 2
2   bar

Potresti invece desiderare ciò :bwche lo rimuove completamente.

:bw 2
:b 2 
E86: Buffer 2 does not exist

Non sapendo di :bwavermi infastidito per un bel po '.


3
Tieni presente che l'aiuto di VIM dice questo su :bw"Non usare questo se non sai cosa stai facendo."
mato,

23

Se hai più finestre divise nella tua finestra di Vim, allora :bdchiudi la finestra divisa del file corrente, quindi mi piace usare qualcosa di un po 'più avanzato:

map fc <Esc>:call CleanClose(1)

map fq <Esc>:call CleanClose(0)


function! CleanClose(tosave)
if (a:tosave == 1)
    w!
endif
let todelbufNr = bufnr("%")
let newbufNr = bufnr("#")
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr))
    exe "b".newbufNr
else
    bnext
endif

if (bufnr("%") == todelbufNr)
    new
endif
exe "bd".todelbufNr
endfunction

13
Ora che cosa fa questo frammento?
dolzenko,

1
Probabilmente si desidera <CR> dopo che le chiamate eseguono effettivamente il comando.
dma

2
@dolzenko esegue il mapping di 'fc' e 'fq' in modalità normale per salvare facoltativamente il buffer corrente, quindi passare a un nuovo buffer prima di eliminare l'originale. Ciò preserva tutte le divisioni che hai impostato.
dma

Sembra una buona idea. Quando lo provo, tuttavia, viene visualizzato il seguente messaggio di errore: "Impossibile ridefinire la funzione CleanClose: è in uso"
jononomo

2
Non rimappare "f". . . "f" è in realtà super utile. Con questa mappatura, non puoi mai "trovare" in avanti per "c" o "q".
tandrewnichols,

17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Scarica buffer [N] (impostazione predefinita: buffer corrente) ed eliminalo da
                l'elenco dei buffer. Se il buffer è stato modificato, ciò non riesce,
                a meno che non sia specificato [!], nel qual caso le modifiche vanno perse.
                Il file rimane inalterato. Tutte le finestre per questo buffer sono
                chiuso. Se il buffer [N] è il buffer corrente, un altro buffer
                verrà invece visualizzato. Questa è la voce più recente in
                la jump list che punta in un buffer caricato.
                In realtà, il buffer non viene completamente eliminato, viene rimosso
                dall'elenco dei buffer | unlisted-buffer | e valori delle opzioni,
                variabili e mappature / abbreviazioni per il buffer sono
                eliminato.

9

Se hai già salvato l'ultimo file, allora :enewè tuo amico ( :enew!se non vuoi salvare l'ultimo file). Si noti che il file originale sarà ancora nell'elenco dei buffer (quello accessibile tramite :ls).


6

Se si modifica un file e si desidera chiuderlo senza uscire da Vim e senza salvare, è necessario digitare :bd!.


3

:bdpuò essere mappato. Lo associo a F4, Shift- F4se devo chiudere forzatamente a causa di alcuni cambiamenti che non desidero più.


2

Il plugin bufkill.vim aggiunge BDecc., Per eliminare il buffer senza chiudere alcuna divisione (come bd) sarebbe da solo.


1

Inserisci quanto segue nel tuo file .vimrc e, premendo F4, chiuderà il file corrente.

:map <F4> :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.