2012-04-30 35 views
7

Tôi sử dụng vim để thực hiện một số hoạt động chậm sau khi tệp được lưu, các hoạt động đó cho phép vim của tôi bị kẹt, vì vậy tôi tự hỏi có một số phương pháp không đồng bộ hóa để làm cho các hoạt động đó chạy trong nền không?Không đồng bộ hóa tập lệnh vim?

Demo:

autocmd BufWritePost *.js call DoSomeTing() 

function! DoSomeThing() 
    " some operations really slow 
endfunction 
+0

Tôi không nghĩ rằng có một phương pháp không đồng bộ chung chung. Tuy nhiên, nếu những gì bạn muốn liên quan đến việc khởi chạy một quá trình bên ngoài (chẳng hạn như ftp để tải lên tệp .js đó chẳng hạn), bạn có thể khởi chạy nó theo cách không đồng bộ. – Benj

+0

AFAIK Vim là đơn luồng. Bạn có thể chạy (cẩn thận) các quy trình nền bên ngoài như thế hệ 'thẻ' nhưng không phải là hàm Vim. – romainl

+0

@Benj @romainl Quá trình bên ngoài khó có thể gọi một số lệnh vim như ': lcd' –

Trả lời

5

Bạn có thể sử dụng một trong những cam kết ràng buộc ngôn ngữ mạnh hơn (như Python) để bắt đầu một chủ đề mới và làm việc của bạn trong đó. Đây thường là một nhiệm vụ thực sự khó khăn để có được quyền, tuy nhiên. Ngoài ra bạn thực sự không phải cố gắng sửa đổi bất kỳ cấu trúc vim hoặc gọi bất kỳ chức năng vim từ các chủ đề khác - không có gì trong lõi vim là thread an toàn.

+0

Điều này có hiệu quả không? Tôi đồng ý bạn có thể tạo một chủ đề mới dễ dàng đủ bằng một trong các ngôn ngữ được hỗ trợ, nhưng vim sẽ vẫn đợi cho đến khi quá trình python/perl/ruby ​​hoàn thành trước khi nó trở về. Vì vậy, để có được điều này để làm việc bạn thực sự phải tạo ra một quá trình riêng biệt chạy song song với vim và các yêu cầu async dịch vụ. – Benj

+1

Tôi không chắc chắn những gì bạn có ý nghĩa của vim chờ đợi cho quá trình để kết thúc - sẽ không có quá trình mới, tôi đang nói về việc tạo ra một chủ đề bằng cách sử dụng một ngôn ngữ nhúng vào vim, nếu vim được biên dịch với + python ví dụ. –

+0

Nếu vim được biên dịch với + python, điều đó có nghĩa là khi một tập lệnh python được nhúng vào một hàm vim, một quá trình con python được khởi chạy khi hàm đó cần chạy. Quá trình này con sẽ (tôi nghĩ) sống cho cuộc đời của hàm vim có nghĩa là không có vấn đề bao nhiêu chủ đề bạn tạo ra trong python chức năng vim vẫn không thể trở lại. – Benj

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