Настроить:
Версия графического интерфейса GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) 2015-07-25 на KAEL
, используя последнюю версию от MELPA
Windows 7 x64 бит.
Ситуация:
Например, я печатаю в буфере foobarsentence.
А затем начните новую строку ниже и, набрав fooba, я ожидал, что меня предложат в foobarsentence
окне завершения всплывающего окна. Но нет foobarsentence
.
Из другого ответа я узнал, что для этого я могу использовать company-dabbrev`` M-/. Но я не мог понять, как я мог «подать» предложения из company-dabbrev
всплывающего окна. Я сделал гифку, чтобы прояснить свой вопрос.
Как видите, M-/звонки company-dabbrev
. Но я хотел бы видеть, что предлагается во всплывающем окне завершения компании. Меня удивило, что это не по умолчанию.
Любое предложение, чтобы «накормить» предложения company-dabbrev
всплывающим окном компании?
источник
Ответы:
Вот как работает завершение в компании (я немного упрощаю, более подробное описание можно найти в документации к
company-backends
C-hvcompany-backends
RET.У вас есть список бэкэндов (двигателей завершения), которые компания должна попытаться предоставить в момент завершения. Компания пробует каждый из этих бэкэндов один за другим, и первый, который возвращает кандидатов, используется для завершения, а остальные бэкэнды игнорируются. Таким образом, по умолчанию используется только один бэкэнд.
В вашем случае (вы, похоже, в emacs-lisp-mode) бэкэнд emacs-lisp возвращает кандидатов на завершение и поэтому
company-dabbrev
никогда не используется компанией для завершения, и вы никогда не получитеfoobarsentence
завершение. Так что вы можете захотеть изменить backends компании так, чтобы этоcompany-dabbrev
происходило раньшеcompany-elisp
(илиcompany-capf
в недавнем emacsen). Но я полагаю, что это не то, что вам нужно, поскольку это изменило бы текущую ситуацию, и вы не получите завершения от emacs-lisp backend (в этом случае читайте дальше).Компания предоставляет способ объединения дополнений из нескольких источников, используя то, что она называет
grouped
бэкэндами. Обычно членыcompany-backends
являются отдельными бэкэндами, но это также может быть список бэкэндов, и в этом случае завершение из бэкэндов объединяется при условии, что они возвращают то же самоеprefix
или текст, который должен быть завершен (см. Документациюcompany-backends
для подробного описания).Так что, если вы хотите объединить дополнения из
company-elisp
(на недавних emacsencompany-capf
используется) иcompany-dabbrev
просто сделайте этоКроме того, вы можете объединить различные бэкэнды, используя
:with
ключевое словоЭто отличается от примера со списком бэкендов,
:with
так как компания будет использовать только бэкэнды:with
для определенияprefix
(текст, который необходимо заполнить). Это подразумевает, что кандидаты из бэкэндов после:with
будут игнорироваться компанией, независимо от того, вернут ли бэкэнды aprefix
или нет, если ни один из бэкэндов до не:with
вернул aprefix
.Вы можете установить это локально в буфере emacs-lisp (я предпочитаю делать это)
источник
:with