Làm cách nào để vim tự động thông báo cho tôi khi một tệp mà tôi đang chỉnh sửa thay đổi?


7

Tôi có một tình huống đôi khi bạn tôi và tôi đang làm việc trong cùng một tệp cùng một lúc.

Vim sẽ cho tôi biết nếu tập tin đã thay đổi khi tôi cố ghi đè lên nó. Tôi có thể yêu cầu vim thông báo cho tôi ngay khi tập tin thay đổi, trước khi tôi lưu không?


Bạn muốn điều gì xảy ra nếu cả hai bạn thay đổi cùng một dòng?
Martin Tournoij

@Carpetsmoker Hmmm ... Khó một. Có lẽ nó chỉ có thể bật lên một tin nhắn hoặc một cái gì đó. Tôi mở để đề xuất về điều đó.
hỏi

Nhưng hành vi mong muốn của bạn là gì? Vim đó không chỉ tải lại các thay đổi mà còn thực sự hiển thị một cái gì đó như thông báo bật lên trên máy tính để bàn hoặc tránh Vim tự động tải lại các thay đổi và hiển thị thông báo cảnh báo thay vì để bạn quyết định làm gì?
Javier Scappini

@JavierScappini Hoặc. Tôi không kén chọn điều đó. Tôi đoán sẽ rất tuyệt nếu nó tự động tải các thay đổi ...
hỏi

Câu trả lời của tôi ở đây có một số thông tin về autoreadcài đặt & giới hạn của nó ... có lẽ đây cũng là câu trả lời cho câu hỏi này?
Martin Tournoij

Câu trả lời:



3

Câu hỏi này đã được trả lời trong StackOverflow: Trình tự động của Vim hoạt động như thế nào?

Giải pháp 1

Thực hiện theo các giải thích trong trang Vim Wikia Tự động kiểm tra Vim nếu tệp đã thay đổi bên ngoài . Giải pháp này yêu cầu thêm chức năng vào tệp vimrc của bạn và lệnh mới được gọi trên bộ đệm bạn muốn xem.

Giải pháp 2

Giải pháp này được đề xuất bởi @Gregottton trong câu hỏi tôi đã liên kết ở trên. Ý tưởng là buộc kiểm tra sửa đổi bất cứ khi nào một trong những điều sau đây xảy ra:

  • Vào bộ đệm.
  • Không có phím nào được nhấn cho 'updatetime'
  • Con trỏ di chuyển.

Bạn có thể tìm thấy mã thực hiện điều này dưới đây:

augroup checktime
    au!
    if !has("gui_running")
        "silent! necessary otherwise throws errors when using command
        "line window.
        autocmd BufEnter        * silent! checktime
        autocmd CursorHold      * silent! checktime
        autocmd CursorHoldI     * silent! checktime
        "these two _may_ slow things down. Remove if they do.
        autocmd CursorMoved     * silent! checktime
        autocmd CursorMovedI    * silent! checktime
    endif
augroup END

Thêm và / hoặc loại bỏ autocmdphù hợp nhất với quy trình làm việc của bạn. Kiểm tra tại đây cho danh sách các sự kiện có thể được sử dụng.

Nếu autoread cũng được bật, tập tin sẽ tự động được đọc nếu không được sửa đổi:

set autoread
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.