Làm thế nào tôi có thể tải lại tất cả các bộ đệm cùng một lúc?


20

Khi làm việc trên một nhánh tính năng git, tôi thường xuyên phải thay đổi các thay đổi của mình để thực hiện sửa lỗi cho nhánh chính. Khi tôi hoàn thành công việc thay đổi, tôi git stash popsẽ cập nhật dấu thời gian trên các tệp.

Mặc dù các tệp giống hệt nhau, nhưng lần sau khi tôi cố lưu, tôi nhận được:

CẢNH BÁO: Tập tin đã được thay đổi kể từ khi đọc nó !!!

Bạn có thực sự muốn viết cho nó (y / n) không?

Tôi không muốn tự động tải lại tệp mỗi khi nó thay đổi trên đĩa, chỉ khi tôi git stash pop.

Ngay bây giờ, tôi tự tải lại từng bộ đệm riêng lẻ ( :e). Có cách nào tôi có thể làm điều này trong một lệnh không?

Câu trả lời:


26

Xem :help bufdocho những gì bạn muốn làm. Nó sẽ thực thi một lệnh trong mỗi bộ đệm trong danh sách bộ đệm. Ví dụ:

:bufdo e

Bạn cũng có thể muốn xem xét :help noconfirmđể vô hiệu hóa hộp thoại xác nhận trước khi ra bufdolệnh

:set noconfirm

và kích hoạt lại nó sau bufdolệnh.

:set confirm

1
Để buộc, hãy thử : :bufdo! e.
kenorb

và không in tin nhắn trên màn hình: im lặng! bufdo e
Werner

11

Bạn có thể làm điều này với :checktimelệnh. Từ các tài liệu :

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

Lệnh sẽ hỏi bạn phải làm gì cho mỗi bộ đệm tệp có dấu thời gian đã thay đổi. Để tắt tính năng này đối với các tệp chưa thay đổi, bạn có thể thực hiện :set autoreadđể buộc vim chỉ tải lại chúng. vim sẽ hỏi bạn nếu nội dung giữa bộ đệm và tệp trên đĩa đã thay đổi.

Bạn có thể thiết lập bản đồ như sau để dễ sử dụng:

nnoremap <F5> :checktime<CR>

Dưới đây là một số thông tin về phần thưởng không thực sự là một phần của câu trả lời: Đối với tôi, trên OpenSUSE, gvim (GUI GTK cho vim) sẽ tự động thực hiện điều này khi nó tập trung. Tôi thực sự không biết tại sao nó lại làm như vậy và tôi đã không kiểm tra trên các hệ thống khác nhưng tôi nghĩ nó có thể hữu ích như một phần phụ. Có lẽ một số có thể xác nhận?
tokoyami

Điều này thực sự hữu ích! Những gì tôi đã làm cuối cùng là tích hợp lệnh này như một phần của các phím tắt chuyển đổi tab. tức lànnoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith

1
@tokoyami, tính năng bạn có gvimcó thể liên quan đến FocusGainedsự kiện vim. Bạn có thể tìm thấy một số thông tin liên quan ở đây - unix.stackexchange.com/a/383044/99801 .
Victor Yarema
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.