Коротше кажучи, я шукаю працюючу функцію автозаповнення для редактора Vim. Я раніше заперечував, що Vim повністю замінює IDE під Linux, і хоча це, безумовно, правда, йому не вистачає однієї важливої особливості: автозавершення.
Я знаю , про Ctrl+ N, інтеграції Буйний Ctags , Taglist , cppcomplete і OmniCppComplete . На жаль, жодне з них не відповідає моєму опису "працюючого автозавершення:"
- Ctrl+N добре працює (лише), якщо ви забули, як написати
class
, абоwhile
. Що ж, добре. - Ctags дає вам зачатки, але має безліч недоліків.
- Теглист - це лише пакунок Ctags і, як такий, успадковує більшість його недоліків (хоча він добре працює для перерахування декларацій).
- cppcomplete просто не працює так, як обіцяли, і я не можу зрозуміти, що я зробив неправильно, або якщо він працює «правильно», а обмеження - за задумом.
- Схоже, у OmniCppComplete є ті ж проблеми, що і cppcomplete, тобто автоматичне завершення не працює належним чином. Крім того,
tags
файл ще раз потрібно оновити вручну.
Мені відомо про те, що навіть сучасні, повномасштабні ІДЕ не пропонують гарного завершення коду C ++. Тому я досі прийняв відсутність Віма в цій галузі. Але я думаю, що фундаментальний рівень заповнення коду не надто просимо, а насправді необхідний для продуктивного використання. Тому я шукаю те, що може досягти хоча б наступних речей.
Усвідомлення синтаксису . cppcomplete обіцянки (але не доставляє для мене), виправте, чітко усвідомлене автоматичним завершенням наступного:
variableName.abc variableName->abc typeName::abc
І справді, все інше є абсолютно марним.
Налаштування . Мені потрібно вказати (легко), де знаходяться вихідні файли, а отже, де сценарій отримує інформацію про автоматичне завершення. Насправді у мене в каталозі Makefile, який вказує необхідні шляхи включення. Eclipse може інтерпретувати знайдену в ньому інформацію, а чому б і сценарій Vim?
Актуальність . Як тільки я щось міняю у своєму файлі, я хочу, щоб автоматичне завершення відображало це. Я не хочу вручну запускати
ctags
(чи щось порівнянне). Крім того , зміни повинні бути інкрементний , тобто , коли я змінив тільки один файл , це абсолютно неприйнятно дляctags
для повторного розбору всього дерева каталогів (який може бути величезним).
Я щось забув? Не соромтеся оновлюватись.
Мені подобається досить велика кількість конфігурації та / або майстерності, але я не хочу програмувати рішення з нуля, і я не дуже добре налагоджувати сценарії Vim.
Підсумкове зауваження, мені б дуже хотілося чогось подібного для Java та C #, але, мабуть, на це надто сподіватись: ctags
лише файли коду аналізують і Java, і C # мають величезні попередньо складені рамки, які потрібно було б індексувати. На жаль, розвиток .NET без IDE - це навіть більше, ніж PITA, ніж C ++.
clang_complete
технічно є найбільш надійним, але непомірно повільним через відсутність кешування результатів та часткової компіляції. Я мушу визнати, що я не пробував усіх відповідей, тому що деякі вимагають складних, трудомістких налаштувань. Я затримаю дихання на корисний плагін тепер, коли кланг нарешті дозволяє розробникам створювати AST з C ++ джерел (до цих пір не було в наявності хороших безкоштовних аналізаторів для C ++).
clang_complete
нещодавно пробували ? Він може використовуватись libclang
із кешуванням зараз, і таким чином повинен бути швидшим.
formatted like this
.)
sh
(мається на увазі, що це в моїй бібліотеці), після чого йде абревіатура мого класу. НаприкладshP
дляParser
класу. Тоді все, що вам потрібно зробити, - це написатиshP
та натиснути CTRL + p (або CTRL + n, якщо хочете) та отримати учасників класу від останнього використання до першого (або першого в останнє, якщо CTRL + n)