Bagaimana menambahkan perusahaan-dabbrev ke popup penyelesaian Perusahaan?

12

Mempersiapkan:

Versi GUI GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) dari 2015-07-25 di KAEL

Dikompilasi dari EmacsW64.

, menggunakan versi terbaru dari MELPA

Windows 7 x64 bit.

Situasi:

Sebagai contoh, saya mengetik di buffer foobarsentence.

Dan kemudian mulai baris baru di bawah itu, dan mengetik fooba, saya diharapkan untuk mendapatkan foobarsentencesaran dari jendela penyelesaian popup Perusahaan. Tetapi tidak ada foobarsentence.

Saya menemukannya dari jawaban lain bahwa saya bisa menggunakan company-dabbrev`` untuk itu, terikat M-/,. Tapi saya tidak tahu bagaimana saya bisa 'memberi makan' saran dari company-dabbrevdalam jendela sembulan. Saya membuat screencast gif untuk memperjelas pertanyaan saya.

masukkan deskripsi gambar di sini

Seperti yang Anda lihat, M-/panggilan company-dabbrev. Tapi saya ingin melihat yang disarankan dalam popup penyelesaian perusahaan. Itu mengejutkan saya ini bukan secara default.

Adakah saran untuk 'memberi makan' saran dari company-dabbrevke jendela sembulan perusahaan?

ReneFroger
sumber
Mode utama apa ini?
PythonNut

Jawaban:

24

Inilah cara penyelesaian dalam pekerjaan perusahaan (saya menyederhanakan sedikit deskripsi yang lebih rinci dapat ditemukan dalam dokumentasi company-backends C-hvcompany-backendsRET.

Anda memiliki daftar backend (mesin penyelesaian) perusahaan harus mencoba untuk memberikan penyelesaian pada titik. Perusahaan mencoba masing-masing backend ini satu demi satu dan yang pertama yang mengembalikan setiap kandidat digunakan untuk penyelesaian dan sisanya dari backend diabaikan. Jadi secara default hanya satu backend yang digunakan sekaligus.

Dalam kasus Anda (Anda tampak dalam mode emacs-lisp-mode) backend emacs-lisp adalah mengembalikan kandidat untuk penyelesaian dan karenanya company-dabbrevtidak pernah digunakan oleh perusahaan untuk penyelesaian dan Anda tidak pernah mendapatkan foobarsentencepenyelesaian. Jadi, Anda mungkin ingin mengubah backend perusahaan sehingga company-dabbrevdatang sebelumnya company-elisp(atau company-capfdi emacsen baru-baru ini). Tapi saya kira itu bukan yang Anda inginkan karena itu akan membalikkan situasi saat ini dan Anda tidak akan mendapatkan penyelesaian dari backend emacs-lisp (dalam hal ini baca terus).

Perusahaan menyediakan cara untuk menggabungkan penyelesaian dari berbagai sumber menggunakan apa yang disebutnya groupedbackend. Biasanya anggota company-backendsbackend individu, tetapi juga bisa menjadi daftar backend dalam hal penyelesaian dari backend digabung asalkan mereka mengembalikan yang sama prefixatau teks yang harus dilengkapi (silakan lihat dokumentasi company-backendsuntuk deskripsi rinci).

Jadi jika Anda ingin menggabungkan penyelesaian dari company-elisp(pada emacsen terbaru company-capfdigunakan) dan company-dabbrevcukup lakukan ini

(add-to-list 'company-backends '(company-capf company-dabbrev))

Selain itu, Anda dapat menggabungkan berbagai backend menggunakan :withkata kunci

(add-to-list 'company-backends '(company-capf :with company-dabbrev))

Ini berbeda dari contoh daftar backend tanpa :withkarena perusahaan hanya akan menggunakan backend sebelum :withuntuk menentukan prefix(teks yang harus diisi). Ini menyiratkan bahwa calon dari backend setelah :withakan diabaikan oleh perusahaan, terlepas dari apakah backend mengembalikan a prefixatau tidak, jika tidak ada dari backend sebelum :withmengembalikan a prefix.

Anda mungkin ingin mengatur ini secara lokal di buffer emacs-lisp (saya lebih suka melakukannya)

Iqbal Ansari
sumber
@wasamasa terima kasih atas umpan baliknya, edit jawaban saya untuk menyebutkan:with
Iqbal Ansari
Pak, Anda berhak memilih saya. Saya sangat menikmati penjelasan Anda, dan mempelajari hal-hal tentang Perusahaan. Terima kasih untuk itu.
ReneFroger
Senang saya bisa membantu
Iqbal Ansari