ฉันจะทำให้การรหัสฟัซซี่สมบูรณ์


27

เมื่อใช้ ReSharper ในสัญลักษณ์ Visual Studio สามารถป้อนอัตโนมัติได้โดยใช้การจับคู่แบบคลุมเครือแทนที่จะเป็นการจับคู่คำนำหน้า ตัวอย่างเช่นถ้าฉันกำลังมองหาฟังก์ชั่นที่มีชื่อว่าDoSomethingAmazingฉันสามารถเขียนDoSoAmและมันจะพยายามที่จะขยายแบบสอบถามของฉันเพื่อให้ตรงกับสัญลักษณ์ทั้งหมดที่มีDo, SoและAmหนึ่งในชื่อของพวกเขา

อีกตัวอย่างหนึ่งสามารถพบได้ใน gif ด้านล่าง คุณสามารถเห็นการขยายหลายครั้งที่มีการขยายสตริงที่ไม่ใช่คำนำหน้าเป็นสัญลักษณ์ที่ถูกต้อง (ไม่สนใจการขยายตัวอย่างในคำถามนี้ฉันเกี่ยวข้องกับการจับคู่แบบคลุมเครือเท่านั้น)gif แสดงตัวอย่างของการจับคู่แบบคลุมเครือในการกระทำ

ตัวอย่างอื่นสามารถเห็นได้ในปลั๊กอิน YouCompleteMe สำหรับ Vim: gif แสดงตัวอย่างเพิ่มเติมของการจับคู่แบบคลุมเครือในการดำเนินการเป็นกลุ่ม

การเติมข้อความอัตโนมัติและโหมด บริษัททั้งคู่ดูเหมือนจะมีการจับคู่คำนำหน้า แต่ฉันไม่สามารถหาวิธีเปิดใช้งานการจับคู่แบบคลุมเครือได้

การแก้ปัญหาจะเป็นการดีที่จะเป็นผู้ไม่เชื่อเรื่องภาษาและนำไปใช้กับแพคเกจการเติมสัญลักษณ์ใด ๆ ที่ฉันใช้ แต่ฉันก็สนใจในการแก้ปัญหาเฉพาะภาษาด้วย ฉันดูHelm แล้วแต่ไม่พบวิธีที่จะนำไปใช้กับการเติมโค้ดให้สมบูรณ์

ฉันได้พิจารณาทางเลือกอื่น ๆ เช่นการมีปุ่มลัดเพื่อเปิดใช้งานการเติมเต็มสัญลักษณ์โดยใช้Helm buffer แต่ฉันหวังว่าจะมีวิธีการทำเช่นนี้โดยใช้การเติมสไตล์ป๊อปอัป

ฉันยังเปิดให้ทำการตั้งค่าด้วยตนเองบนพื้นฐานต่อภาษาเนื่องจากบางภาษาแยกสัญลักษณ์ที่มีเครื่องหมายขีดกลางในขณะที่คนอื่นใช้ขีดเส้นใต้หรือขีดคั่นซึ่งฉันคิดว่าจะส่งผลกระทบต่อวิธีการจับคู่จะทำ


คำตอบ:


19

ฟังก์ชั่นการเติมเต็มที่สมบูรณ์แบบของ Emacs ให้การจับคู่แบบฟัซซี่ที่คล้ายกัน (โดยค่าเริ่มต้นมันใช้สำหรับ "do-so-am" แทนที่จะเป็น "DoSoAm") และโหมด บริษัท ในเวอร์ชันล่าสุดของ IIUC ใช้อย่างน้อยในบางกรณี

เช่นถ้าคุณเปิดใช้ Elisp บัฟเฟอร์ Emacs-24.4 และ บริษัท -โหมดใหม่ล่าสุดถ้าคุณพิมพ์(wi-syบริษัท จะปรากฏขึ้นเมนูเสร็จสิ้นการแสดงwindow-system, และwindow-system-for-displaywith-syntax-table


2
ด้วย Emacs 24.4 company-modeสนับสนุนcompletion-styles, โพสต์นี้แสดงให้เห็นการตั้งค่าที่เป็นไปได้สำหรับการพยายามออก
wasamasa

หลังจากติดตั้ง 24.4 ฉันพบว่านี่คือสิ่งที่ฉันกำลังมองหา น่าเสียดายที่ดูเหมือนว่าเฉพาะภาษาและจะต้องมีการเปลี่ยนแปลงแบ็กเอนด์ของ บริษัท เพื่อให้ทำงานกับภาษาอื่น ๆ อย่างไรก็ตามจากคำตอบมันเป็นสิ่งที่ใกล้เคียงที่สุดที่ฉันเคยพบและหวังว่าจะมีเวลามากขึ้นในการใช้ภาษามากขึ้น ขอบคุณ!
Jake Woods

company-ycmdเป็นแบ็กเอนด์อื่นที่รองรับการเสร็จสมบูรณ์แบบคลุมเครือ
Dmitry

9

ด้วยcompany-modeคุณสามารถใช้C-sเพื่อค้นหาผู้สมัครที่มีอยู่ซึ่งแสดง ข้อความค้นหาจะแสดงใน modeline (ไม่ใช่เรื่องง่ายที่จะสังเกตเห็นฉันรู้ว่าฉันยื่นปัญหาที่นี่ )

หากคุณต้องการที่จะใช้หางเสือให้เสร็จสิ้นพิจารณาใช้หางเสือ บริษัทหรือAC-หางเสือ ไม่ได้พยายามที่มีac-helmแต่กับคุณโดยตรงสามารถผูกให้กุญแจสำคัญในการเปลี่ยนอินเตอร์เฟซมาตรฐานhelm-companycompany-complete


นี่ใกล้กับสิ่งที่ฉันกำลังมองหา ฉันหวังว่าจะเสร็จสมบูรณ์โดยไม่ต้องเรียกใช้ปุ่มกด แต่ฉันพบว่าการใช้งานร่วมกับการจับคู่คำนำหน้าเป็นทางเลือกที่เหมาะสม ขอบคุณ!
Jake Woods

หากคุณใช้company-modeUI คุณสามารถกดC-sเพื่อค้นหาผู้สมัครจากรายการผู้สมัครที่มีcompanyให้คุณ
Tu Do

ใช่ฉันเข้าใจและชอบพูดในความคิดเห็นด้านบนที่ใกล้เคียงกับสิ่งที่ฉันกำลังมองหา ทางออกที่ดีที่สุด (สำหรับฉัน) ไม่จำเป็นต้องใช้ Cs และจะค้นหาผู้สมัครแบบอินไลน์ในหน้าต่างป๊อปอัปขณะที่ฉันพิมพ์ แต่วิธีการ Cs นั้นน่าสนใจอย่างแน่นอนและฉันตั้งใจจะรวมเข้ากับเวิร์กโฟลว์
Jake Woods

ในขณะที่ใช้ บริษัท ผมพบว่าเป็นวิธีที่ดีกว่าC-M-s C-sด้วยเมตามันจะกรองผู้สมัครแทนที่จะค้นหา
พี่เลี้ยง

@ พี่ที่ดีที่จะรู้ว่า
Tu Do

5

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


มันจะดีที่จะแสดงสิ่งที่ "ถูกต้อง" หมายถึงที่นี่
Jason Hu

2

มีหลายแพ็คเกจที่ให้ความสมบูรณ์แบบฟัซซี่ไม่ว่าอย่างใดอย่างหนึ่ง ฉันจินตนาการว่า Helm ทำเช่น (ตั้งแต่คุณพูดถึง)

ถ้าคุณใช้ไลบรารี่ไลเซนส์คุณสามารถเลือก (ทันที) ในหลาย ๆ วิธีการเติมเต็มด้วยฟัซซี - มีทางเลือกมากกว่าที่ฉันเคยเห็นในที่อื่น (ฉันไม่ได้เป็นแฟนตัวยงของการทำให้เสร็จคลุมเครือตัวเอง แต่ฉันให้มัน)

หยาดเสร็จสิ้น (เสร็จเลือนดังนั้นหากคุณเลือกที่) ใช้สวยมากทุกที่ แต่มีไม่มากทั้งหยาด -specific รหัส -completion คุณสมบัติ หน้านี้ของเอกสารIciclesพูดเกี่ยวกับความสมบูรณ์ของข้อความบัฟเฟอร์


ด้วย Iciclesให้ใช้ตัวอย่างของ Stefan ในการทำให้สำเร็จ(wi-syในโหมด Emacs Lisp:

  1. ด้วยความสมบูรณ์แบบหยาด (สิ่งที่ Emacs มอบให้การเคารพ) คุณจะได้รับสัญลักษณ์แบบเดียวกันกับที่ Stefan กล่าวถึงvanillacompletion-styles

  2. ด้วยความสมบูรณ์ของสัญลักษณ์เลือน Icicles Swank (จากไลบรารี่el-swank-fuzzy.el ) เป็นวิธีการกรอกข้อมูล TAB ในปัจจุบันคุณจะได้ผู้สมัครที่สำเร็จเหล่านี้:

    หน้าต่างระบบ                
    กับไวยากรณ์ตาราง
    หน้าต่างระบบสำหรับการแสดงผล
    เครื่องมือการเข้ารหัสระบบดำเนินการ
    เครื่องมือสัญลักษณ์พร้อมรับคำภายใน
    เครื่องมือการเข้ารหัสระบบพรอมต์ที่มีมูลค่า
    กับ swfy-struct
    เครื่องมือ-ระบุ-doc
    กับ swfy-หมดเวลาแล้ว
    เครื่องมือ-ระบุเขต
    เครื่องมือ-ระบุใช้งาน
    เครื่องมือ-ระบุปุ่ม
    เครื่องมือ-ระบุแทรก
    เครื่องมือ-ระบุตัวอย่าง
    เครื่องมือ-ระบุลับ
    เครื่องมือ-ระบุ-ใช้งาน
    หน้าต่างอย่างปลอดภัย-shrinkable-P
    เครื่องมือประเภทสำเนา
    หน้าต่างปรับขนาดสมัคร
    หน้าต่าง - ปรับขนาดรากหน้าต่างในแนวตั้ง
    หน้าต่างแสดงผลตาราง
    หน้าต่าง - จอแสดงผลบัฟเฟอร์
    หน้าต่าง - ปรับขนาดสมัคร-P
    หน้าต่างปรับขนาดสมัคร-ทั้งหมด
    widgetp-แสดงผลสำเร็จ
    หน้าต่างต์สิ้นทริกเกอร์
    ที่มีปรากฏบัฟเฟอร์หน้าต่าง
    เครื่องมือการมองเห็นมูลค่าสร้าง
    เครื่องมือ-emacs ห้องสมุดการเชื่อมโยงการกระทำ
    เครื่องมือที่สามารถแก้ไขได้รายการรายการสร้าง
    เครื่องมือ-emacs-เห็นการเชื่อมโยงการกระทำ

ผู้สมัคร 3 คนแรกคือผู้ที่ Stefan กล่าวถึงอีกครั้ง

  1. ด้วยการจับคู่ fuzzy-matchธรรมดา( ไลบรารี่fuzzy-match.el) ผู้สมัครคนเดียวคือwith-syntax-table

  2. ด้วยIcicles โปรย fuzzyคุณจะได้ผู้สมัครทั้งหมดที่ Swank fuzzy สำเร็จเสนอพร้อมด้วยต่อไปนี้:

    Ange-FTP รอไม่ยุ่ง
    dired ลงใน dir ที่มี symlinks
    ediff-เลือกหน้าต่างการติดตั้งฟังก์ชั่นอัตโนมัติ
    ediff-แต่งหน้าจอแสดงผลกว้าง
    ediff-สลับกว้างจอแสดงผล
    ediff หน้าต่างแสดงผล-P
    ediff หน้าต่าง-ok สำหรับการแสดงผล
    ediff ที่มีไวยากรณ์ตาราง
    พบ-new-buffer ไฟล์เข้ารหัสระบบ
    GNUS กรอบหรือหน้าต่างแสดงผลชื่อ
    ช่วยเหลือหน้าต่างแสดงผลข้อความ
    หน้าต่างสำหรับกันชนหน้าจอน้ำแข็ง-เลือก-
    ย้อนกลับบัฟเฟอร์ที่มีการเข้ารหัสระบบ
    ตั้ง w32 ระบบการเข้ารหัสระบบ
    ชุดหน้าต่างแสดงผลตาราง
    ตั้งหน้าต่างต์สิ้นทริกเกอร์
    เปลือกเขียนประวัติศาสตร์-on-ทางออก
    แยกเป็นตุเป็นตะหน้าต่าง
    ต้นไม้ Widget - ค้นหา-ไดเรกทอรีย่อย
    w32 หาไฟล์ที่ไม่พบชุด-buffer ไฟล์เข้ารหัสระบบ
    w32-การเริ่มต้นหน้าต่างระบบ
  1. ด้วยIcicles Levenshtein (1) substring เสร็จสมบูรณ์ฝอย (Levenshtein ระยะทาง 1) คุณจะได้รับความสำเร็จเหล่านี้เท่านั้น:
    ช่วยเหลือติดตามสัญลักษณ์
    ข้อความเช็คข่าวไวยากรณ์
    w32-initialize-window-system หน้าต่างระบบ
    หน้าต่างระบบสำหรับการแสดงผล
  1. ด้วยระยะทางของ Levenshtein 2 แทนที่จะเป็น 1 จึงมีผู้สมัครสำเร็จมากกว่า 300คน

  2. ด้วยความสำเร็จของ Levenshtein ที่เข้มงวด (1 หรือ 2) จึงไม่มีผู้สมัคร ในทำนองเดียวกันสำหรับIcicles Jaro-เคลอร์เสร็จสิ้นเลือน


1
ฉันยอมรับว่ามีการทับซ้อน API ที่เป็นไปได้บางอย่างสำหรับการทำให้เสร็จสมบูรณ์แบบคลุมเครือ แต่โดยทั่วไปการทำโค้ดให้เสร็จสมบูรณ์นั้นจำเป็นต้องใช้การตรวจสอบคอมไพล์หรือรันไทม์เฉพาะโหมด ในขณะที่คุณพูดด้วยตัวเอง Icicles จะมอบวิธีการใช้คุณลักษณะการเติมโค้ดให้น้อยดังนั้นจึงไม่เกี่ยวข้องกับคำถามในมือ
dgtized

@dgtized: ดีฉันไม่เห็นด้วย คุณเคยลองcompletion.elไหม (ในทำนองเดียวกันdabbrevและhippie-expand- ทั้ง 3 อย่างรวมอยู่ใน GNU Emacs) สิ่งเหล่านี้มีประโยชน์มากเมื่อมีการเติมโค้ดให้สมบูรณ์แม้ว่าตามที่คุณแนะนำพวกเขาไม่มีความรู้เฉพาะรหัส คุณอาจแปลกใจว่ามีประโยชน์แค่ไหน และเช่นนี้การทำโค้ดเฉพาะใด ๆ ที่ใช้ minibuffer ให้เสร็จสมบูรณ์เมื่อมีผู้สมัครหลายคนจะได้รับประโยชน์จากการทำIcicles fuzzy
Drew

2

หากคุณใช้ivyในการอัปเดตล่าสุดivyรองรับการทำงานที่จุดในการซ้อนทับ Ivy flxสนับสนุนการจับคู่คลุมเครือด้วยความช่วยเหลือของ ชำระเงินวิดีโอนี้เกี่ยวกับวิธีการทำงาน :)

สิ่งที่คุณต้องทำคือกดปุ่มเชื่อมcomplete-symbolที่เป็นค่าเริ่มต้นC-M-iและการซ้อนทับจะปรากฏขึ้นและคุณใช้การจับคู่ที่คลุมเครือเพื่อให้ได้ผู้สมัครที่สมบูรณ์

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