2012-04-30 16 views
7

Uso vim para hacer algunas operaciones lentamente después de guardar el archivo, esas operaciones permiten que mi vim se atasque, entonces me pregunto si hay algún método de sincronización para hacer que esas operaciones se ejecuten en segundo plano?¿Asincronizar la secuencia de comandos de vim?

Demostración:

autocmd BufWritePost *.js call DoSomeTing() 

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

No creo que haya un método asíncrono genérico. Sin embargo, si lo que desea es ejecutar un proceso externo (como ftp para cargar ese archivo .js, por ejemplo), probablemente pueda iniciarlo de forma asíncrona. – Benj

+0

AFAIK Vim es de rosca simple. Puede ejecutar procesos de fondo externos (cuidadosamente) como la generación de 'tags' pero no las funciones de Vim. – romainl

+0

@Benj @romainl Proceso externo para invocar un comando vim como ': lcd' –

Respuesta

5

Puede utilizar uno de los más potentes enlaces de lenguaje (como Python) para iniciar un nuevo hilo y hacer su trabajo allí. Sin embargo, esta es una tarea realmente difícil de hacer bien. Además, no debes intentar modificar ninguna estructura vim ni invocar ninguna función vim desde estos otros hilos: nada en el núcleo vim es seguro para la ejecución de subprocesos.

+0

¿Funcionaría? Estoy de acuerdo en que podría crear un nuevo hilo con la suficiente facilidad en uno de los idiomas admitidos, pero vim aún esperará hasta que el proceso python/perl/ruby ​​finalice antes de que regrese. Para que esto funcione, en realidad tendría que crear un proceso separado que se ejecute en paralelo con vim y las solicitudes asincrónicas de servicios. – Benj

+1

No estoy seguro de lo que quiere decir con vim esperando a que termine el proceso; no habría ningún proceso nuevo, estoy hablando de crear un hilo usando un lenguaje incrustado en vim, si vim está compilado con + python, por ejemplo. –

+0

Si vim se compila con + python, eso significa que cuando una secuencia de comandos python está incorporada en una función vim, se inicia un proceso hijo python cuando esa función debe ejecutarse. Este proceso secundario (creo) vivirá durante toda la vida de la función vim, lo que significa que no importa cuántos subprocesos crees en python la función vim aún no puede regresar. – Benj

Cuestiones relacionadas