penyelesaian nama file menggunakan mode perusahaan

11

Saya mengaktifkan perusahaan menggunakan perintah berikut di init.el saya:

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

Namun saya tidak mendapatkan penyelesaian nama file, meskipun ada beberapa penyedia dalam sumber dan juga situs web menyebutkan itu didukung.

Saya mulai mengetik / beranda / emmanuel ... dan tidak ada yang terjadi, meskipun saya berharap penyelesaiannya mulai menawarkan opsi?

Juga, bagaimana penyelesaian modus-otomatis perusahaan untuk jalur relatif, saya pikir saya membacanya didukung, tapi saya tidak yakin bagaimana itu akan mendeteksi itu, tanpa "/" awal sebagai tip?

Emmanuel Touzery
sumber
1
Anda harus menyebutkan mode utama mana yang Anda coba selesaikan otomatis melalui mode perusahaan. Atau mungkin Anda mencari penyelesaian nama file di minibuffer? Silakan tentukan.
paprika
1
Saya seorang pemula total. Saya ingin menggunakannya dalam semua mode utama seperti yang saya mengerti (cisp, teks biasa, bahasa pemrograman apa pun). Dan memang penyelesaian kata kunci sederhana (menawarkan kata yang digunakan di tempat lain di buffer) tampaknya berfungsi dalam pengeditan lisp serta mode lainnya.
Emmanuel Touzery
perhatikan bahwa saya nanti akan mencoba untuk mendapatkan penyelesaian yang lebih kuat untuk Haskell juga, tetapi itu hanya akan untuk mode-haskell dan untuk saat ini saya masih mencoba untuk membuat fitur itu berfungsi di semua mode.
Emmanuel Touzery

Jawaban:

8

Anda harus menjalankan company-filesuntuk menyelesaikan file. Anda dapat mengikat peta berbeda untuk penyelesaian penyelesaian file dengan

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

Pastikan juga Anda memiliki file perusahaan di backend perusahaan ( M-x> sesuaikan-grup> perusahaan> backend perusahaan)

Jesse
sumber
Anda tidak perlu mengikat kunci untuk penyelesaian nama file. Saya pikir titik kunci di sini adalah untuk mengkonfigurasi company-backends. Misalnya Anda dapat menempatkan company-filespertama dalam daftar itu, atau memasukkannya dalam backend grup.
glukas
Saya pikir perlu menulis beberapa fungsi untuk memicu company-files, atau mengkonfigurasi sesuatu. Bagi saya, setidaknya, itu tidak dipicu secara otomatis bahkan jika itu dalamcompany-backends
Jesse
Saya menduga itu karena Anda memiliki backend lain di depannya dalam daftar? Mode Perusahaan akan menggunakan backend pertama yang menunjukkan bahwa ia dapat menangani awalan saat ini. Jika Anda menyisipkan company-filesdi awal company-backendsdaftar itu harus lengkapi-otomatis. Tentu saja, ini mungkin bukan yang sebenarnya Anda inginkan, hanya menunjukkan bahwa backend file hanyalah backend lain ...
glucas
Benar, saya tidak tahu itu. Saya pengguna vim yang bermigrasi ke emacs, dan dalam vim saya memiliki penyelesaian file yang dipicu secara otomatis dalam kasus-kasus tertentu, dan penyelesaian kode pada yang lain. Saya pikir itu akan menjadi yang ideal.
Jesse
Anda dapat menggunakan pengait mode untuk menentukan daftar backend yang berbeda dalam mode yang berbeda. Misalnya dalam mode lisp Anda mungkin ingin penyelesaian simbol dan untuk skrip shell Anda ingin menambahkan penyelesaian nama file, dll.
glucas
15

Seperti yang sudah ditunjukkan Jesse, yang Anda inginkan di sini adalah company-filesbackend. Ada beberapa cara berbeda untuk menggunakannya:

  1. Ikat kunci untuk menelepon company-filessecara langsung.

  2. Gunakan perintah company-begin-backend. Ini meminta Anda untuk menggunakan backend, kemudian menawarkan kandidat penyelesaian.

  3. Gunakan company-other-backenduntuk memutar daftar backend (lihat item berikutnya). Ini dapat digunakan untuk memicu penyelesaian atau dapat digunakan setelah mode perusahaan telah dipicu untuk beralih ke satu set kandidat penyelesaian yang berbeda. Anda mungkin ingin menetapkan kunci yang mengikat di peta perusahaan, mis(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Konfigurasikan variabel company-backends. Mode Perusahaan melintasi daftar ini untuk menemukan backend yang menerima awalan saat ini (yaitu teks sebelum titik). Sangat mungkin untuk memiliki backend dalam daftar yang menerima awalan saat ini tetapi tidak menawarkan kandidat penyelesaian, di mana mode perusahaan titik tidak akan menyelesaikan apa pun secara otomatis. Anda dapat menyesuaikan daftar untuk memesan backend dengan cara yang memenuhi kebutuhan Anda.

Beberapa contoh modifikasi company-backends:

Jika Anda hanya ingin melengkapi nama file, Anda dapat menjadikannya sebagai satu-satunya backend:

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

Itu tampaknya tidak mungkin, jadi Anda lebih baik meletakkan backend yang paling sering digunakan terlebih dahulu dan kemudian menggunakan salah satu opsi yang disebutkan sebelumnya untuk beralih backend atau memanggil satu dengan nama ketika Anda membutuhkan sesuatu yang lain.

Anda juga dapat mengonfigurasi backend 'grup' yang membuat kumpulan kandidat penyelesaian yang digabungkan. Coba ini, misalnya:

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

Ini menentukan backend tunggal yang menggabungkan kandidat dari tiga backend lainnya. Ini akan memberi Anda hasil dari penyelesaian-pada-titik, dabbrev, dan sistem file.

Anda dapat menggunakan kait mode untuk menentukan serangkaian backend yang berbeda untuk berbagai mode utama. Sebagai contoh:

(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)))))
glukas
sumber