2009-08-21 28 views
6

Tôi cần thực hiện logic và hai sự kiện autocmd trong vim. Về cơ bản, lệnh phải chạy trên một InsertLeave khi FileType là tex. Có vẻ như điều này sẽ hoạt động (trong một .vimrc):Vim: Kết hợp autocmd?

autocmd FileType tex :autocmd InsertLeave :w 

Nhưng không. Các tùy chọn lồng nhau dường như không giúp được gì, mặc dù hướng dẫn cho thấy nó nên.

của nó dễ dàng để làm một logic-OR:

autocmd BufEnter,BufLeave ... 

nó không phải là quá khó để làm một logic AND.

+0

Bạn nên sử dụng giải pháp của ZyX làm câu trả lời vì giải pháp này giải quyết được vấn đề đệm địa phương của Eevee. – Profpatsch

+0

Xong, nhưng tôi đang dùng từ ngữ của bạn cho nó. Tôi dường như nhớ vấn đề bộ đệm địa phương, nhưng tôi đã không viết cao su trong nhiều năm, và chuyển sang emacs 2 năm trước đây. –

Trả lời

8

Tôi có một sự điều chỉnh để @Eevee câu trả lời: để làm cho công việc autocommand cho một bộ đệm mà thôi, bạn nên sử dụng

augroup TexAutoWrite 
    autocmd FileType tex :autocmd! TexAutoWrite InsertLeave <buffer> :update 
augroup END 

, xem `: h autocmd-buflocal.

+0

Điều này thật tuyệt vời. Bây giờ tôi có thể tái render tài liệu asciidoc khi chuyển sang trình duyệt của tôi. – Profpatsch

+1

Ouch. Sự cố: Tự động thêm lần thứ hai * mỗi lần * bạn chuyển sang tệp tex. Sau một thời gian ngắn vim bắt đầu tiết kiệm rất nhiều lần trong một hàng sau khi bạn rời khỏi chế độ chèn. – Profpatsch

+1

@Profpatsch Đã sửa. – ZyX

4

ChènLần vẫn cần tham số.

này làm việc cho tôi:

autocmd FileType tex :autocmd InsertLeave * :w 

Lưu ý rằng hành vi này sẽ vẫn nếu sau đó bạn chỉnh sửa một tập tin tex phi trong bộ đệm tương tự. Tôi không chắc liệu có cách nào đơn giản để xóa nó khi chỉnh sửa bất kỳ thứ gì nhưng một loại tệp nhất định.

+0

Thật vậy, hoạt động như một sự quyến rũ. –

+0

Đại tràng không thực sự cần thiết. ví dụ. 'au FileType go au VimLeave * gọi hệ thống (" killall gocode ")' – Meow

4

Bạn có thể sử dụng tùy chọn mẫu của autocmnd.

autocmd InsertLeave *.tex w 
+0

Điều này không hoạt động khi phần mở rộng tệp không khớp với loại tệp hoặc không tồn tại. Điều đó xảy ra khi bạn đang làm những việc như so sánh với các tệp sao lưu/tạm thời hoặc nếu vị trí của tệp xác định loại của nó, ví dụ: tệp cấu hình hệ thống. – Walf

Các vấn đề liên quan