เป็นไปได้หรือไม่ที่จะมีชื่อฟังก์ชั่นเติมตัวแปรอัตโนมัติ ฯลฯ เมื่อใช้กับโปรแกรม?


56

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

ตัวอย่างเช่นฉันพิมพ์โปรแกรม Python ดังต่อไปนี้

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

บรรทัดeatFจะแสดงโดยอัตโนมัติeatFood()เป็นตัวเลือกการเติมข้อความอัตโนมัติที่มีอยู่

Vim มีความสามารถนี้หรือไม่? ถ้าเป็นเช่นนั้นฉันจะเปิดใช้งานได้อย่างไร

คำตอบ:


42

มีการเติมข้อความอัตโนมัติหลาย ๆ รสชาติในกลุ่ม วิธีการหนึ่งที่อาจจะมีการใช้SuperTab นี่เป็นวิธีใช้แท็บเสร็จในเวลาไม่มากก็น้อย สิ่งนี้จะช่วยให้คุณสามารถตีTabหลังจากคุณพิมพ์คำบางส่วนเพื่อรับรายการที่สมบูรณ์ ตัวอย่างเช่นพิมพ์eatFตามด้วยTabเพื่อขยายeatFood.

โปรดทราบ : รูปภาพเหล่านี้ทั้งหมดเชื่อมโยงไปยังตัวอย่าง gif ที่ใช้งานจริง

ความสำเร็จ supertab

เป็นกลุ่มมีตัวเลือกอื่น ๆ ที่ยอดเยี่ยม คุณควรอ่าน:h ins-completionเพื่อดูความหลากหลายของตัวเลือกในตัวเสร็จสมบูรณ์ การใช้เสียงเรียกเข้าCtrl- XCtrl- O, รวมกับปลั๊กอินที่รู้จัก python เช่นjediสามารถให้รสชาติที่สมบูรณ์ เจไดสามารถกำหนดค่าเพื่อให้เอกสารเกี่ยวกับการกรอกข้อมูลให้ครบถ้วน (นี่คือสิ่งที่Ctrl- XCtrl- Oทำ) จากนั้นเอกสารประกอบสำหรับผู้สมัครที่กรอกข้อมูลครบถ้วนจะปรากฏในหน้าต่างแยก

ctrlxctrlo เสร็จสิ้น

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

ป้อนคำอธิบายรูปภาพที่นี่

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


ฉันได้ลองพวกเขาทั้งหมดแล้วฉันจะกลับมาที่ SuperTab ตลอดเวลาซึ่งเป็นการรบกวนที่น้อยที่สุด
craigp

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

3
ฉันเปลี่ยนภาพเคลื่อนไหวเป็น "เมื่อคลิก" ในแง่ที่ว่ามันเชื่อมโยงกับภาพเคลื่อนไหว gif
davidlowryduda

1
ฉันไม่สามารถใช้ YouCompleteMe บนคอมพิวเตอร์ที่ทำงานของฉันได้เพราะฉันไม่มีรูตในการติดตั้งการพึ่งพา SuperTab เป็นตัวเลือกที่ดีที่สุดถัดไป
Charles Clayton

@mixedmath ในกรณีของฉัน superTab ไม่ทำงาน
alhelal

24

ฟังก์ชั่นดังกล่าว - เช่นการค้นหาไฟล์ปัจจุบัน (และไฟล์ที่เปิดทั้งหมด) สำหรับการทำให้สมบูรณ์อัตโนมัติควรเปิดใช้งานตามค่าเริ่มต้นด้วยCtrl+P:

ภาพหน้าจอของการเติมข้อความอัตโนมัติที่ใช้งานอยู่

คุณสามารถไปที่nข้อเสนอแนะต่อกับCtrl+Nที่หน้าข้อเสนอแนะ revious ด้วยCtrl+Pและเลือกโดยการพิมพ์ตัวอักษรใด ๆ (ซึ่งจะถูกผนวกขวาหลังจากที่ข้อเสนอแนะ)


1
ถึงบรรณาธิการ (แจสเปอร์): ฉันอยากจะเขียนสิ่งที่ฉันเขียนอีกครั้งเมื่อเร็ว ๆ นี้ไม่ใช่สิ่งที่ฉันจะเขียนในอนาคตหรือเป็นจุดเริ่มต้นของไฟล์ ดังนั้น^PIMHO จึงเป็นธรรมชาติมากกว่า ขอขอบคุณสำหรับการแก้ไขเป็นอย่างอื่น (ฉันหวังว่าฉันคลิกปุ่มขวาและคุณได้รับ +2)
yo '

1
อ๋อผมได้จุดที่อินเทอร์เน็ตจินตนาการ :) ฉันคิดเสมอว่ารายการข้อเสนอแนะจะเรียงตามตัวอักษร ...
แจสเปอร์

@ ลำดับของลักษณะที่ปรากฏของแจสเปอร์ (อย่างน้อยสำหรับฉันแน่นอนยังเห็นด้านบน: world,word,woodและไม่ใช่วิธีอื่น ๆ ) ดังนั้น^Pการใช้งานครั้งสุดท้ายเสร็จสิ้นซึ่งมีประโยชน์มาก (ฉันไม่ค่อยไปไกลเกิน 3 รายการในรายการแม้จะเป็นไฟล์ยาว)
yo '

protip:inoremap <C-Space> <C-N>
wchargin

20

เป็นกลุ่มที่มีการสนับสนุนให้เสร็จสมบูรณ์โดยกำเนิด คุณสามารถอ่านเกี่ยวกับความสำเร็จต่าง ๆ ที่ Vim สนับสนุน:h ins-completionได้

โดยทั่วไปแล้วสำหรับวัตถุประสงค์ทั้งหมดที่ฉันได้พบว่าการทำอินสมบูรณ์นั้นเพียงพอสำหรับความชอบของฉันอย่างไรก็ตามมีปลั๊กอินเสริมที่เสร็จสมบูรณ์แล้วซึ่งเพิ่มมูลค่ามากขึ้นกว่าสิ่งที่ข้อเสนอการทำสำเร็จให้เสร็จสมบูรณ์ NeoComplete , YCM (YouCompleteMe)นั้นมีไม่กี่อันที่เหมือนกัน พวกเขามีความก้าวหน้ามากขึ้นในแง่ที่ว่าพวกเขาพยายามที่จะรวมความสำเร็จประเภทต่าง ๆ อย่างแม่นยำมากขึ้นและพวกเขายังมีกลไกการแคชขั้นสูงดังนั้นพวกเขาจึงมีแนวโน้มที่จะเร็วขึ้น YCM ยังทำงานร่วมกับคอมไพเลอร์ / ยูทิลิตี้ภายนอกเพื่อมอบ IntelliSense ที่ดียิ่งขึ้น


9

ใช่มีสคริปต์การทำให้สมบูรณ์อัตโนมัติสำหรับ vim แล้ว ตัวเลือก "ดีที่สุด" ขึ้นอยู่กับภาษาการเขียนโปรแกรมของคุณ ในฐานะที่เป็นรหัสตัวอย่างของคุณเป็นงูหลามฉันขอแนะนำให้ดูที่เจได ต่อเติมจากสิ่งที่คุณทำให้ฉันมีอยู่ซึ่งยังรองรับภาษาอื่นด้วย แต่บางครั้งก็มีขนาดใหญ่เกินไป สำหรับภาษาอื่น ๆ คุณสามารถเรียกดูชุดสคริปต์ vim แบบยาว


7

ในโหมดแทรกให้พิมพ์อักขระสองตัวแรกของคำจากนั้นกด:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อป้อนชื่อของตัวแปรในโปรแกรม

ตัวเลือก 'สมบูรณ์' จะควบคุมการค้นหาคำหลัก (รวมถึงไฟล์ไฟล์แท็กบัฟเฟอร์และอื่น ๆ )

ตัวเลือก 'completeopt' จะควบคุมวิธีการทำให้เกิดความสมบูรณ์ (ตัวอย่างเช่นไม่ว่าจะแสดงเมนู)

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