Ответ 1
AutoComplPop - это то, что вам нужно.
Я использую ctags, taglist и т.д. для автоматического завершения в Vim. Однако он очень ограничен по сравнению с автозавершением Visual Studio intellisense или Eclipse. Мне интересно, можно ли настроить Vim на:
Показывать автозаполнение всякий раз. или → . Но только после некоторого текста, который может быть переменной (например, не показывать автоматическое завершение после номера).
Показывать функциональные параметры, когда (набрано.
Прекратите удаление списка автозаполнения, когда некоторые из них удаляют все символы после. или → : Когда я ввожу имя переменной, нажмите. или → для поиска определенного члена, мне часто приходится удалять все символы, которые я печатаю после. или → , но это заставляет Vim скрывать список автозавершения. Я хотел бы сохранить его видимым, если не нажимаю Esc.
Отображение связанного автоматического завершения: когда я ввожу переменную и нажимаю ^ X ^ O, она обычно показывает мне все теги в файле ctags. Я хотел бы, чтобы он показывал только теги, связанные с переменной.
Спасибо за помощь.
РЕДАКТИРОВАТЬ. Некоторые люди голосуют за этот вопрос, но ни один орган не знает ответа. Поэтому просто хотел упомянуть, что вам не нужно давать полный ответ; частичные ответы на любой из упомянутых пунктов были бы хорошими также.
AutoComplPop - это то, что вам нужно.
Для (1) при работе с С++ или C clang complete
это действительно хороший вариант
Чтобы заставить vim запускать определенное поведение при нажатии клавиши, вам нужно сопоставить ключ с функцией.
Например, для сопоставления ключа .
для вызова некоторого типа завершения в режиме INSERT
вам нужно будет:
:inoremap <expr> <buffer> . MyFunction()
а затем функции нужно будет оценить контекст, в котором он был вызван, и предоставить соответствующий ответ пользователю.
Изменить. Это основа того, как работает clang complete
, описанная @honk.
Я не уверен, что вы можете настроить поведение omnifunc для удовлетворения ваших потребностей, но по моему опыту я никогда не заходил слишком далеко. Как сказал @Mikhail, вам нужно будет отслеживать все, что на практике означает интерпретацию или даже запуск кода в некоторой степени.
Я использую vim каждый день, и я не знаю о существующих script, которые могут это сделать. Это действие потребует понимания классов и отслеживания переменных. someObject->
означает, что VIM будет знать, какой класс является переменной someObject
, а затем сможет искать методы/переменные в этом классе.
Написание скриптов для vim относительно просто, хотя, как вы прокомментировали, никто не ответил на это. Проголосовать от меня.
Я хотел бы иметь ту же функциональность, которую вы ищете, и просто наткнулся на перспективный плагин:
https://github.com/Shougo/neocomplcache похоже, что это может быть новый autocomplpop, и, кажется, работает очень хорошо во время моих начальных испытаний... теперь для настройки omni завершение работы с scala ~
Недавно я обнаружил YouCompleteMe, он ведет себя аналогично инструменту автозаполнения Visual Studio. Демонстрация можно увидеть здесь:
В любом случае, я рекомендую YouCompleteMe (YCM). Он обеспечивает (нечеткое) сопоставление идентификаторов вашего текущего файла, а также завершение пути, интеграцию с внешними механизмами завершения,...
ad 1)
Если вам нравится семантическое завершение затмения, используйте eclim для интеграции vim с eclipse. (альтернативно использовать другой семантический движок для YCM)
ad 2)
: 2 YCM может даже обеспечить определение функции (= список параметров) недавно завершенной функции!
ad 3)
что YCM делает в любом случае
ad 4)
не совсем уверен, что вы подразумеваете под этим. никогда не использовал ctags!
PS: Я настоятельно рекомендую использовать UltiSnips и Tagbar (и если вам нравится UndoTree), то, что делает vim идеальным IDE для меня.