6

最近、私はclang_completeC++ コード補完を行うために使用しています。小さなプログラムには適していて高速ですが、私の場合は遅すぎます (私は大きなコード ベースで作業しており、通常、1 つのファイルをコンパイルするのに数秒かかります)。私が正しく理解していれば。

現在、解析が完了するまでclang_completeブロックされます。ワーカー スレッドを開始しても、メイン スレッドは、ユーザーが押したかどうか、またはワーカー スレッドが正常に完了したかどうかを繰り返しチェックします。この期間中、vim は無反応になるため、このプラグインは使いにくくなります。ClangCompletelibclangCTRLC

この動作を改善したいと考えています。たとえば、ClangCompleteブロックはしませんが、スレッドがまだ実行されている間に 0.2 秒以上かかると空の結果を返します。libclang が解析を終了し、同じ補完単語を入力していることを検出すると、補完メニューがポップアップ表示されます。

これの難しさは次のとおりです。

  1. 異なるスレッド間で微妙な競合状態を引き起こすことなく、その時点でメニューをポップアップする方法、
  2. 私がまだ同じ補完単語を入力しているかどうかをどうやって知るのですか? vim 自体がこれを追跡していると思います。たとえば、 のstd::strang代わりに何か間違ったことを入力するとstd::string、 backspace を入力して間違った を削除するangと、補完メニューが再び表示されるからです。では、この内部フラグにアクセスするにはどうすればよいでしょうか?
4

1 に答える 1

0
  1. Vimscript はシングルスレッドです。レースについて心配する必要はありません。

  2. Vim はベース(つまり、入力済みまたは完了済みの補完単語の一部) を関数に渡します。:help complete-functions詳細と例を確認してください。

一般に、あなたのアプローチ (マルチスレッドに Python や Perl などの組み込み言語を使用していると仮定) は実現可能です。ただし、そのような試みはまだ見たことがありません。

于 2012-12-10T09:57:19.333 に答える