Đóng và dỡ bộ đệm mà không thoát Vim


54

Thông thường, tôi sẽ tải một số thông tin vào bộ đệm tạm thời, sau đó đóng lại :clo!. Nhưng điều này ẩn bộ đệm hơn là dỡ hoàn toàn nó, mặc dù tôi đã nohiddenthiết lập. Tôi thấy điều này thật mệt mỏi vì tôi nhận được một xác nhận thêm khi tôi rời khỏi Vim, về nội dung mà tôi đã (nghĩ rằng tôi) đã loại bỏ.

Tôi chỉ có thể sử dụng :q!thay thế, nhưng đó là một thói quen xấu để xâm nhập vì nó sẽ thoát hoàn toàn Vim nếu chỉ còn một bộ đệm, điều này cũng gây khó chịu. Tệ hơn, nếu tôi đánh máy :qa!, tôi có thể mất rất nhiều công việc.

Có một nền tảng trung gian? Tôi thực sự muốn một số lệnh giết bộ đệm hiện tại nhưng không thoát khỏi Vim. Tôi không phản đối việc viết nó trong Vimscript, nhưng tôi muốn tránh nó nếu lệnh đã tồn tại.

Câu trả lời:


69

Có lệnh để làm chính xác điều đó: :bdeletehoặc chỉ :bd. Theo mặc định, nó sẽ dỡ bộ đệm hiện tại. Để dỡ bộ đệm khác, trước tiên hãy lấy danh sách tất cả các bộ đệm bằng :bufferslệnh và sau đó bạn có thể chỉ định số sau :bdđể loại bỏ nó. Ngoài ra :bd+ space+ tabcho phép hoàn thành sử dụng tên bộ đệm.


1
Điều này sẽ hoạt động trên bộ đệm mở cuối cùng, không chính xác như tôi muốn, nhưng vì nó không thoát ra, nên nó đủ tốt cho mục đích của tôi.
Kevin

Plugin vim-bbye có thể là thứ bạn đang tìm kiếm: github.com/moll/vim-bbye
alxndr

1
Điều này không hoạt động trong vi
redolent

Ngoài ra, bí danh tích hợp :lsdễ nhớ hơn (imo) và thực hiện tương tự như:buffers
kuzyn

Điều này không tải bộ đệm. Nó thực sự thậm chí không đóng nó. Nó chỉ đơn giản là bỏ cài đặt 'buflisted'. vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

Bạn hoàn toàn có thể xóa sạch bộ đệm bằng lệnh: bwipeout (hoặc: bw). Điều này loại bỏ hoàn toàn bộ đệm khỏi bộ nhớ, bao gồm mọi dấu hiệu, cài đặt tùy chọn, v.v. mà bạn đã thêm vào nó. Tương tự ,: bdelete (hoặc: bd) xóa bộ đệm, nhưng để nó trong bộ nhớ và giữ các dấu và cài đặt tùy chọn.

Theo nhận xét của Tom Hale, tài liệu Vim khuyên bạn nên sử dụng: bd over: bw trừ khi bạn biết bạn đang làm gì. Tôi có xu hướng sử dụng: bw vì thích ý tưởng loại bỏ hoàn toàn bộ đệm khỏi bộ nhớ và tôi không sử dụng nhiều nhãn hiệu, cài đặt tùy chọn dành riêng cho bộ đệm, v.v., đến mức cần duy trì chúng sau khi đóng bộ đệm.

Giống như lệnh: Thoát (: q), Vim sẽ báo lỗi nếu bộ đệm đã thay đổi. Để giải quyết vấn đề này, bạn có thể nối thêm dấu chấm than sau lệnh để chặn dấu nhắc. Một tùy chọn khác, thay vì thêm các dấu chấm than cho mọi thứ, là thêm "đặt xác nhận" vào vimrc của bạn. Với bộ này, vim sẽ nhắc bạn lưu các thay đổi tệp khi đóng.

: bufdo là một lệnh hữu ích thực hiện một lệnh khác trên tất cả các bộ đệm đang hoạt động. Kết hợp lệnh: bufdo với lệnh: bw /: bd cho phép bạn loại bỏ tất cả các bộ đệm hoạt động cùng một lúc. Bạn vẫn có thể sử dụng dấu chấm than để loại bỏ lỗi, nhưng cho dù bạn đặt nó sau: bufdo, sau: bw hoặc sau cả hai đều gây ra kết quả khác nhau cho mỗi lỗi:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

Dưới đây là một vài lệnh đệm hữu ích khác:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

Có rất nhiều điều để xử lý bộ đệm nằm ngoài phạm vi của câu hỏi này. Hãy xem:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


Bạn có thể vui lòng thêm một số lời giải thích cho câu trả lời này?
EvergreenTree

Trợ giúp nói "không sử dụng điều này trừ khi bạn biết bạn đang làm gì", cho biết điều đó :bdđược ưu tiên trong hầu hết các trường hợp
Tom Hale

1
@TomHale Thật tuyệt khi biết những gì khác :bwngoài "Mọi thứ liên quan đến bộ đệm bị mất. Tất cả các dấu trong bộ đệm này trở nên không hợp lệ, cài đặt tùy chọn bị mất, v.v.". Điều đó có vẻ hoàn toàn hợp lý với tôi nếu tôi muốn 'đóng' một bộ đệm giống như nếu tôi bỏ hoàn toàn Vim.
Kenny Evitt

Tôi thích: bw hơn: bd vì nếu bạn sử dụng: bd và sau đó nhấn <ctrl - ^> để đi đến bộ đệm được sử dụng cuối cùng, nó sẽ đưa nó lên từ bộ nhớ. : bw cho tôi nhiều quyền kiểm soát hơn và làm những gì tôi muốn ^^
eli

điều đó thật tuyệt! cảm ơn @ Soylent17!
apollo
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.