Tutup file tanpa berhenti dari aplikasi VIM?

258

Saya menggunakan perintah :edan :wuntuk mengedit dan menulis file. Saya tidak yakin apakah ada perintah "tutup" untuk menutup file saat ini tanpa meninggalkan Vim?

Saya tahu bahwa :qperintah itu dapat digunakan untuk menutup file, tetapi jika itu adalah file terakhir, Vim juga ditutup; Sebenarnya di Mac OS MacVim tidak berhenti. Hanya jendela Vim yang ditutup dan saya dapat menggunakan Control- Nuntuk membuka jendela Vim kosong lagi. Saya ingin Vim tetap terbuka dengan layar kosong.

David.Chu.ca
sumber

Jawaban:

343

Ini menghapus buffer (yang diterjemahkan untuk menutup file)

:bd 
Vinko Vrsalovic
sumber
6
Milikmu lebih baik daripada milikku untuk apa yang diminta OP, meskipun aku cenderung memilih: enew karena aku suka memiliki buffer dalam daftar buffer. :)
Rytmis
2
Ketika saya lakukan, vim menunjukkan buffer pertama ini, tapi aku masih bisa mengakses buffer
Martin Andersson
18
@ Martin, untuk menghapus buffer sepenuhnya, gunakan : bw
sebnow
43

Seperti yang telah disebutkan, Anda mencari :bd, namun ini tidak sepenuhnya menghapus buffer, itu masih dapat diakses:

: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

Sebaliknya, Anda mungkin ingin :bwyang benar-benar menghapusnya.

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

Tidak tahu tentang :bwmenyadap saya cukup lama.

sebnow
sumber
3
Ingatlah bahwa bantuan VIM mengatakan ini tentang :bw- "Jangan gunakan ini kecuali Anda tahu apa yang Anda lakukan."
mato
23

Jika Anda memiliki beberapa jendela split di jendela Vim Anda kemudian :bdtutup jendela split dari file saat ini, jadi saya ingin menggunakan sesuatu yang sedikit lebih maju:

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
Gowri
sumber
13
Sekarang apa yang potongan ini lakukan?
dolzenko
1
Anda mungkin ingin <CR> setelah panggilan untuk benar-benar menjalankan perintah.
dma
2
@dolzenko memetakan 'fc' dan 'fq' dalam mode normal untuk secara opsional menyimpan buffer saat ini kemudian beralih ke buffer baru sebelum menghapus yang asli. Ini mempertahankan setiap celah yang telah Anda atur.
dma
Sepertinya itu ide yang bagus. Ketika saya mencobanya, saya mendapatkan pesan kesalahan berikut: "Tidak dapat mendefinisikan kembali fungsi CleanClose: Sedang digunakan"
jononomo
2
Jangan remap "f". . . "f" sebenarnya sangat berguna. Dengan pemetaan ini, Anda tidak akan pernah bisa "menemukan" maju untuk "c" atau "q."
tandrewnichols
17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Bongkar buffer [N] (default: buffer saat ini) dan hapus dari
                daftar buffer. Jika buffer diubah, ini gagal,
                kecuali ketika [!] ditentukan, dalam hal ini perubahan hilang.
                File tetap tidak terpengaruh. Semua jendela untuk buffer ini adalah
                Tutup. Jika buffer [N] adalah buffer saat ini, buffer lain
                akan ditampilkan sebagai gantinya. Ini adalah entri terbaru di
                daftar lompatan yang menunjuk ke buffer dimuat.
                Sebenarnya, buffer tidak sepenuhnya dihapus, itu dihapus
                dari daftar buffer | unlisted-buffer | dan nilai opsi,
                variabel dan pemetaan / singkatan untuk buffer adalah
                dibersihkan.
singkat
sumber
9

Jika Anda sudah menyimpan file terakhir, maka itu :enewadalah teman Anda ( :enew!jika Anda tidak ingin menyimpan file terakhir). Perhatikan bahwa file asli masih akan ada dalam daftar buffer Anda (yang dapat diakses melalui :ls).

Rytmis
sumber
6

Jika Anda memodifikasi file dan ingin menutupnya tanpa berhenti Vim dan tanpa menyimpan, Anda harus mengetik :bd!.

pablofiumara
sumber
3

:bdbisa dipetakan. Saya memetakannya ke F4, Shift- F4jika saya perlu menutup paksa karena beberapa perubahan saya tidak ingin lagi.

wbogacz
sumber
2

The bufkill.vim Plugin menambahkan BDdll, untuk menghapus buffer tanpa menutup split apapun (sebagai bd) akan sendirian.

kebiru-biruan
sumber
1

Masukkan berikut ini dalam file .vimrc Anda dan, dengan menekan F4, itu akan menutup file saat ini.

:map <F4> :bd<CR>
Stryker
sumber
0

Lihatlah plugin Butane untuk menjaga tata letak jendela saat menutup buffer.

Gary Willoughby
sumber