2012-04-30 6 views
7

Używam vima do robienia niektórych powolnych operacji po zapisaniu pliku, operacje te pozwoliły zawiesić mój vim, więc zastanawiam się, czy jest jakaś asynchroniczna metoda, aby te operacje działały w tle?Asynchronize vim script?

Demo:

autocmd BufWritePost *.js call DoSomeTing() 

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

Nie sądzę, że istnieje ogólna metoda asynchroniczna. Jeśli jednak to, co chcesz, wymaga uruchomienia zewnętrznego procesu (takiego jak ftp do przesłania tego pliku .js), prawdopodobnie możesz uruchomić to w sposób asynchroniczny. – Benj

+0

AFAIK Vim jest jednowątkowy. Możesz uruchomić (ostrożnie) zewnętrzne procesy w tle, takie jak generowanie tagów, ale nie funkcje Vima. – romainl

+0

@Benj @romainl Proces zewnętrzny prawie nie wywołuje niektórych komend vim takich jak ': lcd' –

Odpowiedz

5

Można zastosować jedną z mocniejszych powiązań językowych (takich jak Python), aby rozpocząć nowy wątek i zrobić swoją pracę tam. Jednak ogólnie jest to naprawdę trudne zadanie. Tak naprawdę nie wolno próbować modyfikować żadnych struktur vim lub wywoływać żadnych funkcji vim z tych innych wątków - nic w rdzeniu vima nie jest bezpieczne.

+0

Czy to działa? Zgadzam się, że możesz utworzyć nowy wątek z łatwością w jednym z obsługiwanych języków, ale vim będzie czekał, aż ten proces python/perl/ruby ​​zostanie zakończony, zanim powróci. Aby to zadziałało, musisz utworzyć oddzielny proces, który działa równolegle z żądaniami asynchronicznymi vim i usług. – Benj

+1

Nie jestem pewien, co masz na myśli przez vim, czekając na zakończenie procesu - nie byłoby nowego procesu, mówię o tworzeniu wątku za pomocą języka osadzonego w vim, jeśli vim jest skompilowany na przykład z + pythonem. –

+0

Jeśli vim jest skompilowany z + pythonem, oznacza to, że kiedy skrypt Pythona jest osadzony w funkcji vim, proces potomny Pythona jest uruchamiany, gdy ta funkcja musi zostać uruchomiona. Ten proces potomny będzie (jak sądzę) żyć przez całe życie funkcji vim, co oznacza, że ​​bez względu na to, ile wątków utworzysz w pythonie, funkcja vim nadal nie może powrócić. – Benj