2012-04-30 15 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'生成のような外部バックグラウンドプロセスは(慎重に)実行できますが、Vim関数は実行できません。 – romainl

+0

@Benj @romainl ':lcd'のようないくつかのvimコマンドを呼び出すことはほとんどありません。 –

答えて

5

あなたは新しいスレッドを開始し、そこに自分の仕事をするために(Pythonなど)より強力な言語バインディングのいずれかを使用することができます。しかし、これは一般的には正しいことをするのは本当に難しい作業です。また、vimの構造を変更したり、これらの他のスレッドからvim関数を呼び出そうとしてはいけません。つまり、vimコアではスレッドセーフです。

+0

これは機能しますか?サポートされている言語のいずれかで新しいスレッドを簡単に作成できますが、vimはPython/perl/ruby​​プロセスが終了するまで待ってから返されることに同意します。したがって、これを動作させるには、実際にvimやサービスの非同期リクエストと並行して実行される別個のプロセスを作成する必要があります。 – Benj

+1

プロセスが終了するのを待っているvimが何を意味するのか分かりません。新しいプロセスはありません。たとえば、vimが+ pythonでコンパイルされている場合は、vimに埋め込まれた言語を使ってスレッドを作成します。 –

+0

vimが+ pythonでコンパイルされている場合、つまり、Pythonスクリプトがvim関数に組み込まれていると、その関数を実行する必要があるときにpythonの子プロセスが起動されます。この子プロセスはvim関数の生涯にわたって生きていると思います(つまり、vim関数がいくつのスレッドを生成してもvim関数は返せません)。 – Benj

関連する問題