Vim: Xóa bộ đệm mà không làm mất cửa sổ chia


149

Khi bộ đệm bị xóa (lệnh "bd [elete]"), nó không chỉ xóa bộ đệm mà còn xóa cửa sổ chia mà bộ đệm nằm trong.

Có cách nào để xóa / dỡ bộ đệm và giữ cho cửa sổ tách ra không?



Điều này làm việc tốt cho tôi.
Rumple Stiltskin

[Cái này DeleteCurBufferNotCloseWindow()hoạt động tốt và khá dễ đọc] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy

Câu trả lời:



326

bp|bd # sẽ làm điều đó.


Chi tiết: bp("bộ đệm trước") chuyển chúng ta sang một bộ đệm khác trong cửa sổ hiện tại ( bncũng sẽ hoạt động), sau đó bd #("xóa bộ đệm" "tập tin thay thế") xóa bộ đệm mà chúng ta vừa di chuyển khỏi. Xem: help bp, help bd, help alternate-file.


71
Bạn không biết bao lâu tôi đã tìm kiếm một thứ như thế này rất đơn giản, không yêu cầu và toàn bộ tập lệnh để chạy nó. Trong VIMRC của tôi, bây giờ tôi đã ánh xạ này cho CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Cloud

11
Tôi đang cố gắng để sử dụng lại nmap <silent> <leader>d :bp|bd #<CR>, nhưng tôi đang nhận được E94: No matching buffer for #<CR>.
Fábio Perez

22
Đặt dấu gạch chéo ngược trước |(ví dụ :bp\|bd)
Bùn

4
Tôi biết tôi không nên cài đặt một plugin cho việc này. Cảm ơn!
Akash Agrawal

2
b#|bd #sẽ chuyển sang bộ đệm được sử dụng cuối cùng thay vì tiếp theo / trước đó. Tuy nhiên, nó sẽ nhảy đến các bộ đệm ẩn nếu bạn có set hidden, vì vậy tôi đã tạo một chức năng BD thông minh hơn để tránh điều đó.
c24w

15

Bạn có thể thêm các mục sau vào .vimrcđể Bdlàm việc bdnhưng không chạm vào các phân chia cửa sổ:

command Bd bp\|bd \#

Tôi thấy đây là một bổ sung hữu ích cho những gì Mud trả lời.


Đó chính xác là những gì tôi có trong .vimrc của mình. :)
Bùn

Và bạn có thể thêm 3 lệnh để dỡ, xóa và xóa bộ đệm: lệnh! BUN bp \ | bun \ # lệnh! Lệnh bp \ | bd \ #! BW bp \ | bw \ # tương đương với những gì bufkill cung cấp nhưng với 3 dòng trong vimrc thay vì plugin 700+ dòng!
fievel

3
Đối với tôi nó chỉ hoạt động với cái này trong .vimrc command! Bd bp|bd #. Lệnh trên với `` giữ bộ đệm trong danh sách bộ đệm.
mljrg


3

Tôi làm một cái gì đó tương tự như @Mud, nhưng chuyển sang bộ đệm xem trước #, thay vì bộ đệm trước đó trong danh sách bộ đệm. Đây là một khóa ràng buộc trong .vimrc:

nnoremap <silent> <leader>q :lclose<bar>b#<bar>bd #<CR>

Đóng cửa sổ Vị trí, nếu tồn tại, chuyển sang bộ đệm xem trước đó, rồi đóng bộ đệm chuyển đổi cuối cùng.


1

Lựa chọn của tôi là

:sb # | bd #
:sb 1 | bd #
: <1. Recall Buffer> | <2. Delete Buffer>

Nghĩ như thế! /// <1. Nhớ lại bộ đệm> | <2. Xóa bộ đệm>

:vert sb 2 | bd #
:vert sb <tab key~completed file(buffer)name> | bd #

tại sao?! Thật dễ dàng để nhớ từ khóa 3 (+ 1)!

  1. sb split_buffer
  2. bd xóa bộ đệm ▶ đơn giản 2 từ khóa
  3. # hoặc Số bộ đệm
  4. vert ▶ short_form của dọc (split_buffer hoặc cách khác)

Đó là dễ dàng và rất hữu ích trong nhiều trường hợp khác!

Chúc một ngày tốt lành! :)


0

Tôi đã từng sử dụng:

:bp<bar>sp<bar>bn<bar>bd<CR>

Nhưng tôi đã tìm thấy một số dịp mà nó đóng cửa sổ của tôi. Trên hết, bộ đệm tiếp theo hoặc trước đó có thể không phải là những gì bạn muốn được hiển thị trong phần tách.

Bây giờ tôi làm điều này:

  • chuyển sang bộ đệm tôi muốn làm việc
  • Xóa bộ đệm thay thế

nnoremap <leader>d :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.