Подтвердить что ты не робот

Vim: автоматическое завершение

Я использую ctags, taglist и т.д. для автоматического завершения в Vim. Однако он очень ограничен по сравнению с автозавершением Visual Studio intellisense или Eclipse. Мне интересно, можно ли настроить Vim на:

  • Показывать автозаполнение всякий раз. или → . Но только после некоторого текста, который может быть переменной (например, не показывать автоматическое завершение после номера).

  • Показывать функциональные параметры, когда (набрано.

  • Прекратите удаление списка автозаполнения, когда некоторые из них удаляют все символы после. или → : Когда я ввожу имя переменной, нажмите. или → для поиска определенного члена, мне часто приходится удалять все символы, которые я печатаю после. или → , но это заставляет Vim скрывать список автозавершения. Я хотел бы сохранить его видимым, если не нажимаю Esc.

  • Отображение связанного автоматического завершения: когда я ввожу переменную и нажимаю ^ X ^ O, она обычно показывает мне все теги в файле ctags. Я хотел бы, чтобы он показывал только теги, связанные с переменной.

Спасибо за помощь.

РЕДАКТИРОВАТЬ. Некоторые люди голосуют за этот вопрос, но ни один орган не знает ответа. Поэтому просто хотел упомянуть, что вам не нужно давать полный ответ; частичные ответы на любой из упомянутых пунктов были бы хорошими также.

4b9b3361

Ответ 1

AutoComplPop - это то, что вам нужно.

Ответ 2

Для (1) при работе с С++ или C clang complete это действительно хороший вариант

Ответ 3

Чтобы заставить vim запускать определенное поведение при нажатии клавиши, вам нужно сопоставить ключ с функцией.

Например, для сопоставления ключа . для вызова некоторого типа завершения в режиме INSERT вам нужно будет:

:inoremap <expr> <buffer> . MyFunction()

а затем функции нужно будет оценить контекст, в котором он был вызван, и предоставить соответствующий ответ пользователю.

Изменить. Это основа того, как работает clang complete, описанная @honk.

Я не уверен, что вы можете настроить поведение omnifunc для удовлетворения ваших потребностей, но по моему опыту я никогда не заходил слишком далеко. Как сказал @Mikhail, вам нужно будет отслеживать все, что на практике означает интерпретацию или даже запуск кода в некоторой степени.

Ответ 4

Я использую vim каждый день, и я не знаю о существующих script, которые могут это сделать. Это действие потребует понимания классов и отслеживания переменных. someObject-> означает, что VIM будет знать, какой класс является переменной someObject, а затем сможет искать методы/переменные в этом классе.

Написание скриптов для vim относительно просто, хотя, как вы прокомментировали, никто не ответил на это. Проголосовать от меня.

Ответ 5

Я хотел бы иметь ту же функциональность, которую вы ищете, и просто наткнулся на перспективный плагин:

https://github.com/Shougo/neocomplcache похоже, что это может быть новый autocomplpop, и, кажется, работает очень хорошо во время моих начальных испытаний... теперь для настройки omni завершение работы с scala ~

Ответ 6

Недавно я обнаружил YouCompleteMe, он ведет себя аналогично инструменту автозаполнения Visual Studio. Демонстрация можно увидеть здесь:

https://www.youtube.com/watch?v=YuMyHAHF0xs

Ответ 7

В любом случае, я рекомендую YouCompleteMe (YCM). Он обеспечивает (нечеткое) сопоставление идентификаторов вашего текущего файла, а также завершение пути, интеграцию с внешними механизмами завершения,...

ad 1)
Если вам нравится семантическое завершение затмения, используйте eclim для интеграции vim с eclipse. (альтернативно использовать другой семантический движок для YCM)

ad 2)
: 2 YCM может даже обеспечить определение функции (= список параметров) недавно завершенной функции!

ad 3)
что YCM делает в любом случае

ad 4)
не совсем уверен, что вы подразумеваете под этим. никогда не использовал ctags!

PS: Я настоятельно рекомендую использовать UltiSnips и Tagbar (и если вам нравится UndoTree), то, что делает vim идеальным IDE для меня.