Đóng tệp mà không thoát khỏi ứng dụng VIM?


258

Tôi sử dụng các lệnh :e:wđể chỉnh sửa và viết một tập tin. Tôi không chắc có lệnh "đóng" để đóng tệp hiện tại mà không rời Vim không?

Tôi biết rằng :qlệnh có thể được sử dụng để đóng một tệp, nhưng nếu đó là tệp cuối cùng, Vim cũng bị đóng; Trên thực tế trên Mac OS MacVim không bỏ. Chỉ có cửa sổ Vim được đóng và tôi có thể sử dụng Control- Nđể mở lại cửa sổ Vim trống. Tôi muốn Vim vẫn mở với một màn hình trống.

Câu trả lời:


343

Thao tác này sẽ xóa bộ đệm (dịch để đóng tệp)

:bd 

6
Bạn tốt hơn tôi vì những gì OP yêu cầu, mặc dù tôi có xu hướng thích: enew vì tôi thích có bộ đệm trong danh sách bộ đệm. :)
Rytmis

2
Khi tôi làm điều này, vim hiển thị bộ đệm đầu tiên, nhưng tôi vẫn có thể truy cập vào bộ đệm
Martin Andersson

18
@Martin, để xóa hoàn toàn bộ đệm, hãy sử dụng : bw
sebnow

43

Như đã đề cập, bạn đang tìm kiếm :bd, tuy nhiên điều này không loại bỏ hoàn toàn bộ đệm, nó vẫn có thể truy cập được:

: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

Thay vào đó bạn có thể muốn :bwloại bỏ nó hoàn toàn.

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

Không biết về việc :bwbắt tôi khá lâu.


3
Chỉ cần lưu ý rằng trợ giúp của VIM nói điều này về :bw- "Đừng sử dụng điều này trừ khi bạn biết bạn đang làm gì."
mato

23

Nếu bạn có nhiều cửa sổ phân chia trong cửa sổ Vim của mình thì hãy :bdđóng cửa sổ chia của tệp hiện tại, vì vậy tôi muốn sử dụng một cái gì đó nâng cao hơn một chút:

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
Bây giờ những gì đoạn trích này làm gì?
dolzenko

1
Bạn có thể muốn <CR> sau khi các lệnh gọi thực sự thực thi lệnh.
dma

2
@dolzenko nó ánh xạ 'fc' và 'fq' ở chế độ bình thường để tùy ý lưu bộ đệm hiện tại sau đó chuyển sang bộ đệm mới trước khi xóa bản gốc. Điều này bảo tồn bất kỳ phân chia bạn đã thiết lập.
dma

Có vẻ như là một ý kiến ​​hay. Mặc dù vậy, khi tôi dùng thử, tôi nhận được thông báo lỗi sau: "Không thể xác định lại chức năng CleanClose: Nó đang được sử dụng"
jononomo

2
Đừng ánh xạ lại "f". . . "F" thực sự siêu hữu ích. Với ánh xạ này, bạn không bao giờ có thể "tìm" chuyển tiếp cho "c" hoặc "q."
tandrewnichols

17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Dỡ bỏ bộ đệm [N] (mặc định: bộ đệm hiện tại) và xóa nó khỏi
                danh sách đệm. Nếu bộ đệm bị thay đổi, điều này thất bại,
                trừ khi khi [!] được chỉ định, trong trường hợp đó, thay đổi sẽ bị mất.
                Các tập tin vẫn không bị ảnh hưởng. Bất kỳ cửa sổ cho bộ đệm này là
                đóng cửa. Nếu bộ đệm [N] là bộ đệm hiện tại, bộ đệm khác
                sẽ được hiển thị thay thế. Đây là mục gần đây nhất trong
                danh sách nhảy chỉ vào một bộ đệm được tải.
                Trên thực tế, bộ đệm không bị xóa hoàn toàn, nó bị xóa
                từ danh sách bộ đệm | unlisted-buffer | và các giá trị tùy chọn,
                các biến và ánh xạ / viết tắt cho bộ đệm là
                xóa.

9

Nếu bạn đã lưu tệp cuối cùng rồi, thì đó :enewlà bạn của bạn ( :enew!nếu bạn không muốn lưu tệp cuối cùng). Lưu ý rằng tệp gốc sẽ vẫn nằm trong danh sách bộ đệm của bạn (tệp có thể truy cập qua :ls).


6

Nếu bạn sửa đổi một tệp và muốn đóng nó mà không thoát Vim và không lưu, bạn nên gõ :bd!.


3

:bdcó thể được ánh xạ. Tôi ánh xạ nó tới F4, Shift- F4nếu tôi cần đóng lại vì một số thay đổi tôi không còn muốn nữa.


2

Các bufkill.vim cắm thêm BDvv, để xóa bộ đệm mà không đóng bất kỳ chia tách (như bd) sẽ một mình.


1

Chèn phần sau vào tệp .vimrc của bạn và, bằng cách nhấn F4, nó sẽ đóng tệp hiện tại.

:map <F4> :bd<CR>


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.