2011-01-03 3 views
67

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

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

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

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

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

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

EDIT: Некоторые люди голосуют по этому вопросу, но ни один орган не знает ответа. Поэтому просто хотел упомянуть, что вам не нужно давать полный ответ; частичные ответы на любой из упомянутых пунктов были бы хорошими также.

+0

Упрощение вопроса, как правило, означает, что они находят вопрос полезным, понятным, лаконичным или интересным. Если вы получаете много оборотов, это, вероятно, потому, что многие люди хотят знать ответ и не знают себя или хотят услышать больше деталей. – jmort253

+1

Спасибо. К сожалению, никто не знает ответа :-(Вероятно, мы должны поговорить с разработчиками Vim (или, может быть, он только один), рассмотреть это серьезно, потому что это главный недостаток Vim. – Rafid

ответ

4

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

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

+0

Хорошо, давайте упростим это. можно проверить, когда написано «.» или «->», и соответственно показывают автоматическое завершение? – Rafid

15

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

8

Чтобы ВИМ вызвать определенное поведение при нажатии клавиши необходимо сопоставить ключ к функции.

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

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

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

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

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

20

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

+1

+1. Это то, что я использую. –

+0

Для Python это не идеально, но лучше, чем по умолчанию. :) +1 – Walter

2

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

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

+0

Выглядит интересно. Тем не менее, с автоматическим завершением Vim заключается в том, что он не учитывает контекст. Например, если я пишу '.' или '->' после переменной, я должен видеть только члены этой переменной, а не все возможные доработки. – Rafid

+0

Именно по этой причине я закончил использование плагинов, таких как VsVim и ViEmu. – Rafid

+0

а? У меня сложилось впечатление, что это то, что заканчивается omni. Но я только что начал свой поиск, чтобы получить такую ​​функциональность. Я надеялся, что так или иначе ctags и omnicompletion смогут это сделать. Я попытался переключиться на более распространенную среду IDE, но я чувствовал себя настолько грязным, когда загружаю его, и бросает все это накладные расходы по дороге, ха-ха ... возможно, это дойдет до этого, хотя ~ – neildaemond

1

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

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

объявления 2)
Этих 2 играть хорошо вместе КСТАТИ:. YCM может даже обеспечить определение функции (= список параметров) из недавно завершенной функции!

объявление 3)
это то, что делает YCM в любом случае

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

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

Смежные вопросы