2012-04-30 7 views
7

Io uso vim per fare alcune operazioni lentamente dopo il salvataggio del file, quelle operazioni lasciano che la mia vim sia bloccata, quindi mi chiedo se ci sia un metodo asincrono per far funzionare quelle operazioni in background?Asynchronize vim script?

Demo:

autocmd BufWritePost *.js call DoSomeTing() 

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

Non penso ci sia un metodo asincrono generico. Tuttavia, se ciò che si desidera implica l'avvio di un processo esterno (ad esempio ftp per caricare il file. Js ad esempio), è probabile che sia possibile avviarlo in modo asincrono. – Benj

+0

AFAIK Vim è single threaded. È possibile eseguire (con attenzione) processi di background esterni come la generazione di 'tag' ma non le funzioni di Vim. – romainl

+0

@Benj @romainl Processo esterno difficilmente richiamabile qualche comando di vim come ': lcd' –

risposta

5

È possibile utilizzare uno dei più potenti binding con i linguaggi (come Python) per avviare un nuovo thread e fare il vostro lavoro in là. Questo è in genere un compito davvero difficile da ottenere, comunque. Inoltre, non devi assolutamente provare a modificare le strutture di vim o chiamare le funzioni di vim da questi altri thread: niente nel vim core è thread-safe.

+0

Questo lavoro dovrebbe funzionare? Sono d'accordo che potresti creare una nuova discussione abbastanza facilmente in una delle lingue supportate, ma Vim aspetterà ancora fino a quando il processo python/perl/ruby ​​non sarà terminato prima che ritorni. Quindi per farlo funzionare dovresti effettivamente creare un processo separato che viene eseguito in parallelo con le richieste asincrone e servizi di asim. – Benj

+1

Non sono sicuro di cosa intendi per vim aspettare che il processo finisca - non ci sarebbe alcun nuovo processo, sto parlando di creare un thread usando un linguaggio incorporato in vim, se vim è compilato con + python per esempio. –

+0

Se vim è compilato con + python, ciò significa che quando uno script python è incorporato in una funzione vim, viene avviato un processo figlio python quando tale funzione deve essere eseguita. Questo processo figlio (penso) vivrà per tutta la vita della funzione vim, il che significa che non importa quanti thread create in Python, la funzione vim non può ancora essere restituita. – Benj