Vim: умное автозаполнение - PullRequest
       15

Vim: умное автозаполнение

73 голосов
/ 03 января 2011

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

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

  2. Показывать параметры функции при наборе (

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

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

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

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

Ответы [ 7 ]

21 голосов
/ 03 января 2011

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

15 голосов
/ 03 января 2011

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

8 голосов
/ 03 января 2011

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

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

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

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

Редактировать : Это основа работы clang complete, упомянутой @honk.

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

5 голосов
/ 03 января 2011

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

Написание скриптов для vim относительно просто, хотя, как вы прокомментировали- никто еще не ответил на это.Голосуй за меня.

2 голосов
/ 04 июля 2012

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

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

1 голос
/ 07 мая 2015

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

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

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

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

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

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

1 голос
/ 10 января 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...