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

Исходя из выбора режима завершения Emacs

Кажется, что есть много альтернативных механизмов автозавершения Emacs. Без исчерпывающего поиска на ум приходит следующее: ido, auto-complete, icicles, в завершении буфера, завершение минибуфера и стандартное завершение окна. И затем происходит завершение кода. Много. И многое из этого зависит от языка. Было бы очень полезно, чтобы гуру Emacs, или три, обобщили преимущества основных игроков как для автоматического завершения кода, так и для не-кода. И это, например, Stack Overflow, само собой разумеется, что было бы неплохо определить режимы автоматического завершения, которые лучше всего подходят для механизмов Emacs IDE.

Обновление. Я только что открыл страницу завершения Emacs Wiki, которая усиливает мой основной вопрос: из всех этих вариантов, что хорошего, что менее хорошего, и если бы вы могли играть только с 2-3, которые вы бы порекомендовали?

4b9b3361

Ответ 1

Обычно я использую два пакета завершения (кроме встроенного завершения TAB в буферах минибуфера и буфера).

pabbrev.el - который дает предложение на курсор (нажмите TAB), чтобы принять. Выбор производится путем просмотра частоты слова. Мне это нравится из-за визуального указания того, что будет выполнено, но оно в основном работает только для одного завершения.

hippie-expand - который обычно связан с M-/ вместо dabbrev, потому что он делает все, что делает dabbrev и многое другое. Это хорошо работает, когда вам, возможно, потребуется пройти через некоторые альтернативы, или если вы хотите заполнить имя файла или что-то еще.

Мне нравятся оба, потому что они не требуют движения мыши и работают быстро.

Ответ 2

Wrt Сосульки -

По большей части, Icicles о завершении minibuffer. Есть несколько случаев, когда он предлагает что-то для завершения буфера (например, кода), но в основном это касается завершения минибуфера.

Когда большинство людей думает о завершении минибуфера, они думают о завершении имени файла, завершении имени буфера и завершении команды. Но есть еще много чего.

Как программист Emacs- Lisp, вы можете использовать завершение, где бы вы ни хотели, чтобы пользователи предлагали выбор в интерактивном режиме. Это довольно общее!

Завершение - это действительно соответствие шаблонов для определения наборов, которые вы можете затем манипулировать.

Большинство людей думает, что единственная цель завершения минибуфера - выбрать одно имя (файл, буфер, команда, переменная,...). Но сила завершения действительно заключается в том, чтобы фильтровать и, возможно, сортировать полный набор имен файлов, имен буферов и т.д. По-разному, а затем позволять пользователям делать что-то с результирующим набором или с ним (не обязательно с одним объектом).

Что означает Icicles: позволяет динамически (инкрементно) определять наборы с использованием сопоставления с образцом, а затем действовать на выбранные элементы или все члены этих наборов.

Это не столько цель Ido, либо других пакетов завершения, за исключением, возможно, Helm (Anything).

В отличие от Helm (Anything), который в качестве начальной точки присваивает имена объектов над типами объектов и действиями в Icicles вы обычно вызываете команду, чтобы сделать что-то одному или нескольким объектам данного типа (например, буферам), а затем сузить набор этих объектов, как правило, путем сопоставления имен. В Icicles часто бывает, что вы можете воздействовать на эти объекты несколькими, но связанными способами внутри одной и той же команды.

В Helm (Anything), как правило, ваш вход сопоставляется сначала с именем объекта со всем юниверсом объектов всех типов, а затем вы сужаетесь, чтобы выбрать какую-либо операцию для выполнения.

Наконец, имейте в виду, что каждый из подходов к завершению предлагает для программистов что-то (например, команды) для конечных пользователей и что-то (например, функции завершения).

Если вы выполняете завершение кода, вы обычно просто хотите заполнить имя в точке. Главное, что нужно сделать для завершения кода, - это определение того, какими являются соответствующие кандидаты. Для этого текстовый (например, код) контекст обычно имеет важное значение. Чтобы предложить интеллектуальный выбор, функция завершения должна анализировать контекст (код), включая любой охватывающий контекст (например, код проекта).

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

Не знаю, помогает ли это, но я все равно принимаю.

Ответ 3

Я использую стандартную вкладку в минибуфере для имен файлов, команд M-x и других вещей.

Я также часто использую клавиши M-/ (dabbrev-expand) для динамического завершения любого слова в любом из ваших буферов Emacs. Это фантастика, особенно для длинных имен переменных. Вот документация:

M-/ runs the command dabbrev-expand, which is an interactive
autoloaded Lisp function in `dabbrev.el'.

It is bound to M-/.

(dabbrev-expand ARG)

Expand previous word "dynamically".

Expands to the most recent, preceding word for which this is a prefix.
If no suitable preceding word is found, words following point are
considered.  If still no suitable word is found, then look in the
buffers accepted by the function pointed out by variable
`dabbrev-friend-buffer-function'.

A positive prefix argument, N, says to take the Nth backward *distinct*
possibility.  A negative argument says search forward.

If the cursor has not moved from the end of the previous expansion and
no argument is given, replace the previously-made expansion
with the next possible expansion not yet tried.

The variable `dabbrev-backward-only' may be used to limit the
direction of search to backward if set non-nil.

See also `dabbrev-abbrev-char-regexp' and C-M-/.

Ответ 4

Вы можете посмотреть в корпоративный режим или пакет автозаполнения, который может использовать разные источники завершения, включая CEDET, а также позволяет определять новые источники завершения... Для некоторых языков программирования вы можете напрямую использовать CEDET...