Thứ tự của các sự kiện Win Entry, Buf Entry, BufRead, Syntax, FileType là gì?


16

Tôi đã trải qua sự autocmd.txtgiúp đỡ, nhưng thông tin về điều này bị phân tán và không phải lúc nào cũng có mặt (ví dụ: với BufRead).

Ai đó có thể hiểu rõ điều này liệt kê thứ tự của các sự kiện này - có lẽ với các điều kiện được đánh dấu trong parantantes, như

WinEnter   
BufEnter (if this window is for a different buffer than the current)

và như vậy, để tham khảo dễ dàng?

Lưu ý (được sao chép từ nhận xét của riêng tôi bên dưới) : Tôi không nói về những giải thích riêng lẻ về chúng, điều này ổn, nhưng về cách chúng tương tác với nhau và theo thứ tự chúng xảy ra. Ví dụ WinEnter: "Vim thực thi các chế độ tự động Buf Entry sau chế độ tự động Win Entry", TabEnternói "Sau khi kích hoạt Win Entry và trước khi kích hoạt sự kiện Buf Entry", tất cả đều phân tán như thế này ở nhiều nơi. Và đôi khi nó không được đề cập ở tất cả (cho ví dụ. BufReadKhông đề cập đến việc nó chạy sau BufEnter hoặc trước - có thể là một chuyên gia có thể suy ra nó từ một số phần khác của thông tin đó, nhưng tôi không thể.
Vì vậy, ý định của tôi ở đây là để tạo một tài liệu tham khảo đơn giản cho thứ tự các sự kiện này có thể được tìm kiếm nhanh chóng bởi những người không phải là chuyên gia,autocmd thông số kỹ thuật sự kiện.


Tôi nghĩ rằng hầu hết các giải thích đều ổn, bạn có thể đưa ra một danh sách những điều bạn không thể hiểu không?
nobe4

@ Nobe4 Tôi không nói về những giải thích riêng lẻ về chúng, điều này thực sự ổn, nhưng về cách chúng tương tác với nhau và theo thứ tự chúng xảy ra. Ví dụ WinEnter: "Vim thực thi các chế độ tự động Buf Entry sau chế độ tự động Win Entry", TabEnternói "Sau khi kích hoạt Win Entry và trước khi kích hoạt sự kiện Buf Entry", tất cả đều phân tán như thế này ở nhiều nơi. Và đôi khi nó không được đề cập ở tất cả (cho ví dụ. BufReadKhông đề cập đến việc nó chạy sau BufEnter hoặc trước - có thể là một chuyên gia có thể suy ra nó từ một số phần khác của thông tin đó, nhưng tôi không thể.
Sundar - Khôi phục Monica

Vì vậy, ý định của tôi ở đây là tạo ra một tài liệu tham khảo đơn giản cho thứ tự các sự kiện này có thể được tìm kiếm nhanh chóng bởi những người không phải là chuyên gia, để chính xác hơn trong autocmdthông số kỹ thuật sự kiện của chúng tôi .
- Phục hồi Monica

OK tôi không hiểu câu hỏi. Bạn có thể thử đăng nhập mọi sự kiện và xem thứ tự xuất hiện (tôi có thể đưa ra câu trả lời nếu bạn thích)
nobe4

Ý định của bạn thực sự là hỏi về ai đó cung cấp một tài liệu tham khảo đơn giản như vậy, chứ không phải tạo một (chính bạn);)
VanLaser

Câu trả lời:


11

Để hoàn thành câu trả lời @sundar:

Bạn có thể đăng nhập thứ tự của các sự kiện chỉ bằng chức năng ghi nhật ký:

augroup EventLoggin
  autocmd!
  autocmd BufNewFile * call s:Log('BufNewFile')
  autocmd BufReadPre * call s:Log('BufReadPre')
  ...
  autocmd User * call s:Log('User')
augroup END

function! s:Log(eventName) abort
  silent execute '!echo '.a:eventName.' >> log'
endfunction

Xem toàn bộ tập tin tại đây: https://gist.github.com/nobe4/aa8313fe98ca8821afad

Sau đó tail -f log, bạn có thể và bạn có được một hoạt động sự kiện tự động theo thời gian thực.


3
Tôi đã tạo một plugin đơn giản cho việc này, xem tại đây .
Karl Yngve Lervåg

6
Lưu ý rằng @ KarlYngveLervåg đã chuyển plugin của nó sang một đường dẫn khác . Cảm ơn Karl!
Luc Hermitte

Cảm ơn đã chú ý và bình luận, Luc! (Lưu ý: Tôi không thể cập nhật nhận xét của mình để sửa liên kết chết, xin lỗi!)
Karl Yngve Lervåg

10

Tôi đã thử googling cho điều này với các bộ từ khóa khác nhau và đạt được vàng trong một lần thử như vậy với kết quả này: http://www.ibm.com/developerworks/l Library / l-vim-script-5 /

Cụ thể, phần này có liên quan đến câu hỏi hiện tại:

Ví dụ: nếu bạn khởi động Vim, hãy chỉnh sửa một tệp có tên demo.txt, hoán đổi thành chế độ Chèn, nhập một số văn bản, lưu tệp và sau đó thoát, phiên Vim của bạn nhận được một loạt các sự kiện như được hiển thị trong Liệt kê 1.

Liệt kê 1. Chuỗi sự kiện trong phiên chỉnh sửa Vim đơn giản

> vim

  1. BufWin Entry (tạo một cửa sổ mặc định)
  2. Buf Entry (tạo bộ đệm mặc định)
  3. Vim Entry (bắt đầu phiên Vim) : chỉnh sửa demo.txt
  4. BufNew (tạo bộ đệm mới để chứa demo.txt)
  5. BufAdd (thêm bộ đệm mới đó vào danh sách bộ đệm của phiên)
  6. BufLeave (thoát khỏi bộ đệm mặc định)
  7. BufWinLeave (thoát khỏi cửa sổ mặc định)
  8. BufUnload (xóa bộ đệm mặc định khỏi danh sách bộ đệm)
  9. BufDelete (giải phóng bộ đệm mặc định)
  10. BufReadCmd (đọc bối cảnh của demo.txt vào bộ đệm mới)
  11. Buf Entry (kích hoạt bộ đệm mới)
  12. BufWin Entry (kích hoạt cửa sổ bộ đệm mới) i
  13. Chèn Entry (hoán đổi thành chế độ Chèn)

Nó vẫn chưa hoàn toàn toàn diện (ví dụ: không đề cập đến BufReadaka BufReadPost, nhưng tôi cho rằng nó sẽ xuất hiện sau BufReadCmd), nhưng đó là một khởi đầu tuyệt vời.

Một thông tin còn thiếu quan trọng là cách các sự kiện FileTypeSyntaxautocmd tương tác với điều này (giả sử filetypesyntaxđã có, và một tệp mới được mở có kiểu chữ và cú pháp được biết đến với Vim).


7
Điều này chỉ đúng khi bạn đang chỉnh sửa một tệp duy nhất. Trái với niềm tin phổ biến, thứ tự áp dụng autocmds trên nhiều tệp không được xác định rõ. Và ngay cả với một tệp duy nhất, thứ tự đã thay đổi một vài lần với phiên bản Vim. Các vấn đề mà điều này có thể (và làm) gây ra cho các plugin đã được thảo luận đến chết trên vim_dev và thiết kế tổng thể sẽ không thay đổi trong tương lai dự đoán. Để có được sự hiểu biết toàn diện , tốt, có 139 lần xuất hiện apply_autocmdstrong các nguồn cho Vim 7.4.827. Chúc may mắn với điều đó.
Sato Katsura

@SatoKatsura Đây là loại ý kiến ​​chuyên gia mà tôi đang tìm kiếm, cảm ơn! Có một số tài liệu tham khảo mà bạn có thể đề xuất để tìm hiểu thêm về điều này (ngoài việc đi sâu vào các nguồn của Vim)? Ngoài ra, điều này có thể hoàn toàn nằm ngoài lĩnh vực bạn quan tâm, nhưng bạn có biết nếu mọi thứ được xác định rõ hơn ở vùng đất 'Neovim' không?
- Phục hồi Monica

Tôi sợ rằng tôi không biết bất kỳ tài liệu tham khảo dứt khoát. autocmds trong Vim là một mớ hỗn độn, tôi không nghĩ rằng thực sự có thể viết một tài liệu tham khảo dứt khoát, ngoại trừ một vài trường hợp đơn giản. Tôi cho rằng tất cả mọi người chỉ giải quyết cho "thường hoạt động", và nhún vai khi nó không. Đối với neovim, cá nhân tôi có cảm xúc lẫn lộn về dự án. Tôi đã không nhìn vào mã gần đây; Tôi cho rằng bạn có thể nhận được câu trả lời về trình theo dõi vấn đề của họ.
Sato Katsura

Ngoài ra, thuật ngữ "sự kiện" tự nó sẽ lật đổ ý tưởng về một đơn đặt hàng quá cố định.
VanLaser
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.