2012-04-30 2 views
7

파일을 저장 한 후에 vim을 사용하여 느리게 작업을 수행하면 이러한 작업으로 인해 vim이 멈추게됩니다. 따라서 일부 비동기 메서드가 해당 작업을 백그라운드에서 실행하게 할 수 있습니까?vim 스크립트 비동기?

데모 :

autocmd BufWritePost *.js call DoSomeTing() 

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

일반적인 비동기 메소드가 있다고 생각하지 않습니다. 그러나 원하는 경우 외부 프로세스 (예 : .js 파일을 업로드하는 ftp)를 시작하면 비동기 방식으로 시작할 수 있습니다. – Benj

+0

AFAIK Vim은 단일 스레드입니다. 'tags' generation과 같은 외부 백그라운드 프로세스는 (신중하게) 실행할 수 있지만 Vim 함수는 실행할 수 없습니다. – romainl

+0

@Benj @romainl 외부 프로세스가': lcd'와 같은 vim 명령을 호출하는 일은 거의 없습니다. –

답변

5

당신은 새 스레드를 시작하고 거기에 당신의 일을 할 수 파이썬과 같은 더 강력한 언어 바인딩 중 하나를 사용할 수 있습니다. 그러나 이것은 일반적으로 어려운 일입니다. 또한 vim 구조를 수정하거나 다른 스레드에서 vim 함수를 호출해서는 안됩니다. vim core에는 스레드 안전이 없습니다.

+0

이 작품이 좋을까요? 지원되는 언어 중 하나에서 새 스레드를 쉽게 만들 수 있다고 동의하지만 vim은 반환하기 전에 python/perl/ruby ​​프로세스가 완료 될 때까지 기다립니다. 이 기능을 사용하려면 실제로 vim 및 서비스 비동기 요청과 병렬로 실행되는 별도의 프로세스를 만들어야합니다. – Benj

+1

프로세스가 완료 될 때까지 기다리는 vim이 무엇을 의미하는지 확신 할 수 없습니다. 새로운 프로세스가 없을 것입니다. 예를 들어 vim이 + python으로 컴파일 된 경우 vim에 포함 된 언어를 사용하여 스레드를 만드는 방법에 대해 설명합니다. –

+0

vim이 + python으로 컴파일 된 경우, 즉, 파이썬 스크립트가 vim 함수에 포함될 때 해당 함수를 실행해야 할 때 파이썬 하위 프로세스가 시작됩니다. 이 자식 프로세스는 vim 함수가 수명이 다할 때까지 계속 살 것입니다. 즉, vim 함수가 얼마나 많은 스레드를 만들어도 vim 함수가 반환 할 수 없다는 것을 의미합니다. – Benj

관련 문제