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


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)

Також переконайтеся, що у вас є файли компанії в компанії-backends ( M-x> налаштувати-групу> компанія> мікстури компанії)


Вам не обов’язково потрібно прив’язувати ключ для завершення імені файлу. Я думаю, що ключовим моментом тут є налаштування company-backends. Наприклад, ви можете поставити company-filesперше в цьому списку або включити його в груповий бекенд.
глюкас

Я думаю, що потрібно записати якусь функцію для запуску company-filesабо щось налаштувати. Принаймні, для мене це не спрацьовує автоматично, навіть якщо він єcompany-backends
Джессі

Я підозрюю, що це тому, що у вас в списку є інші мішки? Компаній режим використовуватиме перший бекенд, який вказує, що він може обробляти поточний префікс. Якщо ви вставите company-filesна початку company-backendsсписку, він повинен автоматично заповнитися. Звичайно, це може бути не те, чого ви насправді хочете, лише вказуючи на те, що бекенд файлів - це ще один бекенд ...
glucas

Щоправда, я цього не знав. Я мігруюча користувач 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)))))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.