завершение имени файла в режиме компании

11

Я включил компанию, используя следующие команды в моем init.el:

(require 'company)
(add-hook 'after-init-hook 'global-company-mode)

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

Я начинаю набирать / home / emmanuel ... и ничего не происходит, хотя я ожидаю, что завершение начнет предлагать варианты?

Кроме того, как происходит автоматическое определение завершения в режиме компании для относительных путей, я думаю, что я прочитал, что оно поддерживается, но я не уверен, как оно его обнаружит, без начального символа "/" в качестве подсказки?

Эммануэль Тузери
источник
1
Вы должны указать, в каком основном режиме вы пытаетесь выполнить автозаполнение в режиме компании. Или, может быть, вы ищете завершение имени файла в минибуфере? Пожалуйста уточни.
паприка
1
Я абсолютный новичок. Я хотел бы использовать его во всех основных режимах, насколько я понимаю (шрифт, простой текст, любые языки программирования). И действительно, простое завершение ключевого слова (предлагая слово, используемое где-то еще в буфере), похоже, работает в редактировании lisp, а также в других режимах.
Эммануэль Тузери
обратите внимание, что позже я попытаюсь получить более мощное завершение для Haskell, но это будет только для режима haskell, и сейчас я все еще пытаюсь заставить эту функцию работать во всех режимах.
Эммануэль Тузери

Ответы:

8

Вы должны запустить company-filesдля завершения файла. Вы можете привязать другую карту для завершения файлов с помощью

(define-key global-map (kbd "C-.") 'company-files)

Также убедитесь, что у вас есть файлы компании в бэкэндах компании ( M-x> группа настройки> компания> бэкэнды компании)

Джесси
источник
Вам не обязательно связывать ключ для завершения имени файла. Я думаю, что ключевым моментом здесь является настройка company-backends. Например, вы можете поставить company-filesпервым в этом списке или включить его в бэкэнд группы.
глюк
Я думаю, что нужно написать какую-то функцию для запуска company-filesили что-то настроить. Для меня, по крайней мере, он не запускается автоматически, даже если он включенcompany-backends
Джесси
Я подозреваю, что это потому, что у вас есть другие бэкэнды впереди в списке? Режим компании будет использовать первый бэкэнд, который указывает, что он может обрабатывать текущий префикс. Если вы вставите company-filesв начало company-backendsсписка, он должен автоматически заполниться. Конечно, это может быть не тем, чего вы на самом деле хотите, просто указав, что
файловый
Правда, я этого не знал. Я перевожу пользователя vim на emacs, и в vim в некоторых случаях завершение файла запускалось автоматически, а в других - завершение кода. Я думаю, что это было бы идеально.
Джесси
Вы можете использовать ловушку режима, чтобы указать другой список бэкэндов в разных режимах. Например, в режиме lisp вам может потребоваться завершение символа, а для сценариев оболочки вы хотите добавить завершение имени файла и т. Д.
glucas
15

Как уже указывал @Jesse, вам нужен company-filesбэкэнд. Есть несколько способов использовать его:

  1. Привязать ключ, чтобы позвонить company-filesнапрямую.

  2. Используйте команду company-begin-backend. Это предложит вам использовать бэкэнд, а затем предложит кандидатов на завершение.

  3. Используйте company-other-backendдля поворота по списку бэкэндов (см. Следующий пункт). Это может использоваться для запуска завершения или после запуска режима компании для переключения на другой набор кандидатов на завершение. Вы можете назначить привязку ключа на карте компании, например(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Настройте переменную company-backends. Режим компании пересекает этот список, чтобы найти серверную часть, которая принимает текущий префикс (т. Е. Текст перед точкой). Вполне возможно иметь в списке бэкэнд, который принимает текущий префикс, но не предлагает никаких кандидатов на завершение, и в этом случае режим компании ничего не завершит автоматически. Вы можете настроить список, чтобы упорядочить бэкэнды в соответствии с вашими потребностями.

Несколько примеров модификации company-backends:

Если вы когда-либо хотели завершить имена файлов, вы можете сделать это своим единственным бэкэндом:

(setq company-backends '(company-files))

Это кажется маловероятным, поэтому вам лучше сначала поставить свой наиболее часто используемый бэкэнд, а затем использовать один из упомянутых ранее вариантов, чтобы переключать бэкенд или вызывать его по имени, когда вам нужно что-то еще.

Вы также можете настроить «групповой» бэкэнд, который создает объединенный набор кандидатов на завершение. Попробуйте это, например:

(setq company-backends '((company-capf company-dabbrev-code company-files)))

Здесь указывается один сервер, который объединяет кандидатов из трех других серверов. Это даст вам результаты из точки завершения, dabbrev и файловой системы.

Вы можете использовать ловушки режима, чтобы указать различный набор бэкэндов для разных основных режимов. Например:

(add-hook 'org-mode-hook
          (lambda ()
            (setq-local company-backends '((company-files company-dabbrev)))))

(add-hook 'emacs-lisp-mode-hook
          (lambda ()
            (setq-local company-backends '((company-capf company-dabbrev-code)))))
glucas
источник