VIM uygulamasından çıkmadan dosya kapatılsın mı?


258

Bir dosyayı düzenlemek ve yazmak için :eve :wkomutlarını kullanıyorum . Geçerli dosyayı Vim'den ayrılmadan kapatmak için "kapat" komutu olup olmadığından emin değilim?

:qKomut bir dosyayı kapatmak için kullanılabilir biliyorum , ama son dosya ise, Vim de kapalı; Aslında Mac OS'de MacVim çıkar. Sadece Vim penceresi kapalı ve ben boş bir Vim penceresi tekrar açmak için Control- kullanabilirsiniz N. Vim'in boş bir ekranla açık kalmasını istiyorum.

Yanıtlar:


343

Bu, tamponu (dosyayı kapatmak için çeviren) siler

:bd 

6
Senin tercih OP eğilimi benimkinden daha iyidir, ancak tercih eğilimindedir: enew çünkü tampon listesinde tampon sahip olmak gibi. :)
— Rytmis

2
Bunu yaptığımda, vim ilk arabelleği gösterir, ancak yine de arabelleğe erişebilirim
— Martin Andersson

18
@Martin, arabelleği tamamen silmek için şunu kullanın : bw
— sebnow

43

Daha önce de belirtildiği gibi, arıyorsunuz :bd, ancak bu tamponu tamamen kaldırmaz, yine de erişilebilir:

: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

Bunun yerine :bwhangisinin tamamen kaldırıldığını isteyebilirsiniz .

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

Yaklaşık bilmeden :bwuzunca bir süre beni rahatsız.


3
VIM'in yardımının şunu söylediğini unutmayın :bw: "Ne yaptığınızı bilmiyorsanız bunu kullanmayın."
— mato

23

Vim pencerenizde birden fazla bölünmüş pencere varsa :bd, geçerli dosyanın bölünmüş penceresini kapatır, bu yüzden biraz daha gelişmiş bir şey kullanmak isterim:

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
Şimdi bu pasaj ne yapıyor?
— dolzenko

1
Büyük olasılıkla çağrılardan sonra komutun gerçekten yürütülmesini <CR> istiyorsunuz.
— dma

2
@dolzenko, isteğe bağlı olarak geçerli arabelleği kaydetmek ve orijinali silmeden önce yeni bir arabelleğe geçmek için normal modda 'fc' ve 'fq' ile eşleşir. Bu, ayarladığınız bölmeleri korur.
— dma

İyi bir fikir gibi görünüyor. Bunu denediğimde, aşağıdaki hata iletisini alıyorum: "CleanClose işlevi yeniden tanımlanamıyor: Kullanımda"
— jononomo

2
"F" yi yeniden eşleme. . . "f" aslında çok kullanışlıdır. Bu eşleme ile "c" veya "q" kelimelerini asla "bulamazsınız".
— tandrewnichols

17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Tamponu kaldır [N] (varsayılan: geçerli tampon) ve
                arabellek listesi. Arabellek değiştirildiyse, bu başarısız olur,
                [!] belirtilmediğinde, bu durumda değişiklikler kaybolur.
                Dosya etkilenmez. Bu arabellek için herhangi bir pencere
                kapalı. Tampon [N] geçerli tampon ise, başka bir tampon
                görüntülenir. Bu, en son giriş
                yüklü bir arabelleği gösteren atlama listesi.
                Aslında, arabellek tamamen silinmez, kaldırılır
                arabellek listesinden | unlisted-buffer | ve seçenek değerleri,
                tampon için değişkenler ve eşlemeler / kısaltmalar
                temizlenir.

9

Son dosyayı zaten kaydettiyseniz, :enewarkadaşınızdır ( :enew!son dosyayı kaydetmek istemiyorsanız). Orijinal dosyanın yine de arabellek listenizde olacağını unutmayın :ls.


6

Eğer varsa değiştirmek bir dosya ve Vim çıkmadan ve kaydetmeden kapatın istiyorum, yazmalısınız :bd!.


3

:bdharitalanabilir. İle eşliyorum F4,Shift - F4ben çünkü artık istemediğiniz bazı değişimin zorla sona gerekirse.



1

Aşağıdakileri .vimrc dosyanıza ekleyin ve düğmesine basıldığında F4geçerli dosya kapatılır.

:map <F4> :bd<CR>


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.