Я знаю, что emacs поддерживает завершение кода. Но, честно говоря, я никогда не был хорошим читателем часто задаваемых вопросов, по крайней мере для чего-то, для чего я совершенно новичок. Поэтому мне интересно, что мне нужно скачать и как это сделать, чтобы emacs мог выполнить для меня умное завершение кода на C ++ и Java. Или есть какой-нибудь пакет, который выполняет завершение кода для многих основных языков?
20
complete.el
попробовать стандартную библиотеку . Он очень старый и малоизвестный, но тот тип завершения в буфере, который он предоставляет, может быть полезен.M-x find-library complete
, затем прочитайте Комментарий в файле.Ответ @ Doug немного устарел, и его внимание сосредоточено на расширении кода с использованием предварительно определенных фрагментов кода.
Я думаю, что вопрос OP о intellisense (например, автозаполнение имени метода класса).
Раньше хиппи расширялся , синтаксический анализатор - это теги emacs . Таким образом, он поддерживает все языки, поддерживаемые ctags (включая C ++ и Java). Но результат не идеален, потому что ctags использует только регулярное выражение для анализа кода. Смотрите мой init-hippie-expand.el для деталей. Вы можете начать с проверки значения
hippie-expand-try-functions-list
auto-complete - это современный интерфейс с необычным пользовательским интерфейсом (выпадающее меню, даже в окне консоли). Если вы используете Clang в качестве бэкэнда. Интеллект намного лучше. Чтобы заставить работать clang, вам нужно установить auto-complete-clang, который является плагином auto-complete. Он поддерживает только язык, поддерживаемый Clang (C / C ++ / Obj-C). Как указывал Сильвен Беннер , вы можете использовать emacs-eclim в качестве серверного конца разбора java, который фактически вызывает исполняемый файл eclipse. Таким образом, автозаполнение может поддерживать Java. Смотрите мой init-auto-complete.el для деталей.
semantic предоставляет как пользовательский интерфейс, так и механизм синтаксического анализа. Это медленно. Выпадающий пользовательский интерфейс в порядке, но требует X окна. Результат intellisense лучше, чем ctags. И документация слишком отвратительна для меня. Смотрите init-semantic.el для деталей.
Режим компании аналогичен автозаполнению, но отличается тем, что он упаковывает все в один пакет. Например, разработчикам на C ++ требуется только установить режим компании (для автозаполнения нужен какой-то сторонний плагин). Другое отличие является UI компания покажет кандидат автоматически . Таким образом, вы нажимаете меньше клавиш в компании. То же самое можно сделать в автозаполнении после настройки.
Подводя итог, автозаполнения, компании наиболее популярны два варианта. Семантика и хиппи-экспанд также приветствуются, но используются реже. Другие слишком тривиальны, чтобы упоминать их, и их особенности уже охвачены большой четверкой. Например, автозаполнение может использовать yasnippet в качестве источника ввода (автозаполнение предоставляет пользовательский интерфейс, но фактические кандидаты генерируются серверной частью yasnippet).
Я предлагаю использовать либо автозаполнение, либо компанию в качестве основного плагина для завершения кода, а либо семантическое, либо расширение хиппи в качестве дополнительного плагина .
Я использую режим компании и хиппи, потому что,
Теперь (2017 год) фирменный режим поддерживается более активно, чем автозаполнение, и содержит больше сторонних плагинов (например, латексный плагин)
hippie-expand не очень активно, но не занимает
TAB
ключ, который использует режим компании / semantic / auto-completeЕсли вы используете фирменный режим для C ++ / Java, вы можете захотеть изменить
company-backends
.Еще несколько советов о режиме компании,
Вам может понадобиться настроить значение
company-backends
. Например, предположим, что его значение равно(company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
. Тогда, еслиcompany-eclim
может получить ненулевых кандидатов,company
думает , что вы пишете Java, поэтому он не будет запускать бэкэнды послеcompany-eclim
.Теперь посмотрим
(company-dabbrev-code company-gtags company-etags company-keywords)
. Все эти четыре бэкэнда будут использоваться вместе. Например, даже послеcompany-dabbrev-code
успешной выборки ненулевых кандидатов остальные три бэкэнда по-прежнему выполняются.В реальном мире часто необходимо изменить порядок бэкэндов или добавить новый бэкэнд (
company-rtags
например).источник
Краткий ответ: я не знаю ни одного для Emacs, который полезен для Java. Динамическое развертывание не заботится о библиотеках в вашем пути к классам, оно ничего не знает о набираемом коде и может расширяться только до текста, который уже существует в одном из буферов. JDE и emacs-eclim пытаются предоставить эту функциональность, но лично меня это не впечатлило.
источник
Короткий ответ:
M-/
Длинный ответ: RTFM :-)
источник
C-h r
)C-h k M-/
?