Вот как работает завершение в компании (я немного упрощаю, более подробное описание можно найти в документации к 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
(на недавних emacsen company-capf
используется) и company-dabbrev
просто сделайте это
(add-to-list 'company-backends '(company-capf company-dabbrev))
Кроме того, вы можете объединить различные бэкэнды, используя :with
ключевое слово
(add-to-list 'company-backends '(company-capf :with company-dabbrev))
Это отличается от примера со списком бэкендов, :with
так как компания будет использовать только бэкэнды :with
для определения prefix
(текст, который необходимо заполнить). Это подразумевает, что кандидаты из бэкэндов после :with
будут игнорироваться компанией, независимо от того, вернут ли бэкэнды a prefix
или нет, если ни один из бэкэндов до не :with
вернул a prefix
.
Вы можете установить это локально в буфере emacs-lisp (я предпочитаю делать это)