В последнее время я использую clang_complete
для завершения кода C ++.Это хорошо и быстро для небольшой программы, но слишком медленно для моего случая (я работаю с большой базой кода и обычно один файл занимает несколько секунд для компиляции), даже если я использовал libclang, который может кэшировать некоторые проанализированные результаты для ускорения последующего анализа,если я правильно понимаю.
В настоящее время clang_complete
будет блокироваться в ClangComplete
, пока libclang
не завершит синтаксический анализ.Даже несмотря на то, что он запускает рабочий поток, основной поток все еще неоднократно проверяет, нажал ли пользователь CTRL C или рабочий поток успешно завершен.В течение этого периода vim перестает отвечать на запросы и, следовательно, затрудняет использование этого плагина.
Я хочу внести некоторые улучшения в это поведение, например, ClangComplete
не будет блокировать, но вернет пустые результаты, если это займет больше времени.чем 0,2 секунды, пока поток еще работает.Когда libclang заканчивает анализ и обнаруживает, что я все еще набираю то же слово завершения, он открывает всплывающее меню завершения.
Сложности для этого следующие:
- как всплытьменю в то время, не вызывая каких-либо тонких состояний гонки между различными потоками,
- как узнать, что я все еще набираю одно и то же слово завершения?Я думаю, что vim сам отслеживает это, потому что, когда я набираю что-то неправильно, например,
std::strang
вместо std::string
, тогда я набираю backspace, чтобы удалить неправильный ang
, меню завершения появится снова.Так как мне получить доступ к этому внутреннему флагу?