เสร็จสิ้นชื่อไฟล์โดยใช้โหมด บริษัท


11

ฉันเปิดใช้งาน บริษัท โดยใช้คำสั่งต่อไปนี้ใน init.el ของฉัน:

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

อย่างไรก็ตามฉันไม่ได้รับชื่อไฟล์ที่สมบูรณ์แม้ว่าจะมีผู้ให้บริการบางรายในแหล่งที่มาและเว็บไซต์ดังกล่าวได้รับการสนับสนุน

ฉันเริ่มพิมพ์ / home / emmanuel ... และไม่มีอะไรเกิดขึ้นถึงแม้ว่าฉันคาดว่าจะเสร็จสิ้นเพื่อเริ่มตัวเลือกการเสนอหรือไม่

นอกจากนี้การตรวจจับอัตโนมัติของโหมด บริษัท จะตรวจสอบเส้นทางที่สัมพันธ์กันอย่างไรฉันคิดว่าฉันอ่านว่ารองรับแล้ว แต่ฉันไม่แน่ใจว่ามันจะตรวจจับได้อย่างไร


1
คุณควรพูดถึงโหมดหลักที่คุณพยายามทำให้การเติมอัตโนมัติผ่านโหมด บริษัท หรือบางทีคุณกำลังมองหาชื่อไฟล์ที่สมบูรณ์ใน minibuffer? กรุณาระบุ
paprika

1
ฉันเป็นผู้เริ่มต้นทั้งหมด ฉันต้องการที่จะใช้มันในทุกโหมดที่สำคัญตามที่ฉันเข้าใจ (เสียงกระเพื่อม, ข้อความธรรมดา, ภาษาการเขียนโปรแกรมใด ๆ ) และการทำให้คำหลักง่าย ๆ (ให้คำที่ใช้ในที่อื่นในบัฟเฟอร์) ปรากฏขึ้นเพื่อทำงานในการแก้ไขเสียงกระเพื่อมเช่นเดียวกับโหมดอื่น ๆ
Emmanuel Touzery

โปรดทราบว่าในภายหลังฉันจะพยายามทำให้ Haskell มีความสมบูรณ์มากยิ่งขึ้นด้วย แต่นั่นจะเป็นเฉพาะสำหรับโหมด haskell เท่านั้นและตอนนี้ฉันยังคงพยายามทำให้คุณลักษณะนั้นทำงานได้ในทุกโหมด
Emmanuel Touzery

คำตอบ:


8

คุณต้องเรียกใช้company-filesไฟล์ให้เสร็จ คุณสามารถผูกแผนที่ที่แตกต่างกันเพื่อให้ไฟล์เสร็จสมบูรณ์ด้วย

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

ตรวจสอบให้แน่ใจว่าคุณมีไฟล์ บริษัท ในแบ็กเอนด์ของ บริษัท ( M-x> กำหนดกลุ่มเอง> บริษัท > แบ็กเอนด์ของ บริษัท )


คุณไม่จำเป็นต้องผูกคีย์เพื่อเติมชื่อไฟล์ให้สมบูรณ์ company-backendsผมคิดว่าจุดสำคัญที่นี่คือการกำหนดค่า ตัวอย่างเช่นคุณสามารถใส่company-filesก่อนในรายการนั้นหรือรวมไว้ในแบ็กเอนด์กลุ่ม
ลูกัส

ฉันคิดว่ามันจำเป็นต้องเขียนฟังก์ชั่นเพื่อกระตุ้นcompany-filesหรือกำหนดค่าบางอย่าง อย่างน้อยสำหรับฉันมันไม่ได้ถูกกระตุ้นโดยอัตโนมัติแม้ว่าจะอยู่ในcompany-backends
Jesse

ฉันสงสัยว่าเป็นเพราะคุณมีแบ็กเอนด์อื่น ๆ อยู่ข้างหน้าในรายการหรือไม่ โหมด บริษัท จะใช้แบ็กเอนด์แรกที่ระบุว่าสามารถรองรับคำนำหน้าปัจจุบันได้ ถ้าคุณแทรกcompany-filesที่จุดเริ่มต้นของcompany-backendsรายการมันควรจะเติมให้สมบูรณ์โดยอัตโนมัติ แน่นอนว่านี่อาจไม่ใช่สิ่งที่คุณต้องการจริง ๆ เพียงชี้ให้เห็นว่าไฟล์แบ็คเอนด์เป็นเพียงแบ็กเอนด์อื่น ...
ลูกัส

จริงฉันไม่รู้ ฉันเป็นผู้ใช้ที่เป็นกลุ่มโยกย้ายไปยัง emacs และในกลุ่มฉันมีไฟล์เสร็จสมบูรณ์ที่ถูกเรียกโดยอัตโนมัติในบางกรณีและรหัสเสร็จในคนอื่น ๆ ฉันคิดว่ามันจะเป็นอุดมคติ
เจสซี่

คุณสามารถใช้โหมดเบ็ดเพื่อระบุรายการแบ็กเอนด์ที่แตกต่างกันในโหมดที่แตกต่างกัน ยกตัวอย่างเช่นในโหมดเสียงกระเพื่อมคุณอาจต้องการเสร็จสัญลักษณ์และเชลล์สคริปต์ที่คุณต้องการเพิ่มเสร็จสิ้นชื่อไฟล์ ฯลฯ
glucas

15

สิ่งที่คุณต้องการที่นี่คือ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)))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.