มีปลั๊กอินเติมข้อความอัตโนมัติสำหรับกลุ่มหรือไม่?


12

มีปลั๊กอินเติมข้อความอัตโนมัติสำหรับกลุ่มหรือไม่? ตัวเลือกของฉันที่นี่มีอะไรบ้าง

ในขณะที่ฉันกำลังใช้AutoComplPopแต่มีการรวมที่ไม่ดีกับ snipMate ที่ฉันใช้และตายช้าในไฟล์ Ruby (แม้ <100 บรรทัด)

ฉันเคยเห็นปลั๊กอินอื่นสองสามอัน แต่ก็ตายไปอย่างน้อยก็กว่าหนึ่งปี ดังนั้นความคิดใด ๆ


1
ACP ทำงานได้ดีมากที่นี่และฉันไม่มีปัญหากับ SnipMate มีการตั้งค่า ( let g:acp_behaviorSnipmateLength=-1ดู:help autocomplpop) คุณควรจะเพิ่มใน. vimrc ของคุณคุณเพิ่มหรือไม่
romainl

คำตอบ:


16

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

ก่อนอื่นคุณต้องเข้าใจว่าVim เป็นตัวแก้ไขข้อความไม่ใช่โปรแกรมแก้ไขรหัส เครื่องมือแก้ไขรหัส IDES เป็นเครื่องมือเช่นชุดเครื่องมือ Jetbrains, Visual Studio Code, Eclipse และอื่น ๆ

เป็นกลุ่มพื้นฐานไม่สามารถรหัส "เติมข้อความอัตโนมัติ" ได้อย่างถูกต้อง การเติมข้อความอัตโนมัติต้องมีการตรวจสอบซอร์สโค้ดของคุณและวิเคราะห์ AST พิจารณาว่า Vim ไม่สามารถดำเนินการแบบอะซิงโครนัสได้จนกว่า Vim 8 จะเปิดตัวในปี 2559 ดังนั้นการพยายามเรียกใช้ซอฟต์แวร์การสอดแทรกรหัสใด ๆ ในปลั๊กอิน Vim จะเป็นฝันร้าย มันถูกอบเข้าสู่ประวัติศาสตร์ของระบบนิเวศ Vim ที่จะไม่ทำเช่นนี้ และทุกคนที่พยายามทำสิ่งนี้เช่น Tern For Vim นั้นเป็นฝันร้ายที่จะใช้จริง ๆ

โปรแกรมแก้ไขข้อความที่ดีที่สุดสามารถทำได้คือตัวอย่างและทำคำ / บรรทัด / ฯลฯ ให้เหมือนกัน หากคุณกำลังมองหาการเติมข้อความอัตโนมัติคุณควรใช้โปรแกรมแก้ไขรหัสไม่ใช่โปรแกรมแก้ไขข้อความ

นี่คือตัวเลือกของคุณซึ่งฉันได้ลองทั้งหมด:

  • แป้นพิมพ์ลัดที่มีประโยชน์สองแบบคือCtrl- nซึ่งจะเติมคำให้สมบูรณ์โดยอัตโนมัติตามบัฟเฟอร์ปัจจุบันที่คุณเปิด (ไม่มีการแทรกโค้ด) และCtrl- xCtrl- lซึ่งจะเติมข้อความเต็มบรรทัดโดยอัตโนมัติหากคุณต้องการทำซ้ำ คุณอาจจะรู้Ctrl- xCtrl- ซึ่งจะทำให้สมบูรณ์อัตโนมัติชื่อไฟล์รวมทั้งเส้นทางเทียบกับปัจจุบันf รูปแบบที่สมบูรณ์ปลั๊กอินจะมีประโยชน์อย่างอ่อนโยนถ้าคุณไม่ได้ค้นหาด้วย:pwd/\v

  • สร้างขึ้นใน Vim " Omnicompletion " ซึ่งถูกเรียกใช้โดยCtrl- x, Ctrl- o(นั่นคือสิ่งที่ผู้เขียน Vim ต้องการให้คุณพิมพ์ทุกครั้ง) พร้อมกับปลั๊กอินภาษาเฉพาะจำนวนมากหากมีอยู่ คุณสามารถ:echo &omnifuncในไฟล์เพื่อดูว่าคุณมีการตั้งค่า Omnicompletion โดย Vim ไว้ในไฟล์ที่คุณเลือกหรือไม่

  • AutoComplPopสำหรับเปิดเมนู Omnicompletion ด้านบนโดยอัตโนมัติเมื่อพิมพ์

  • SuperTabที่ให้คุณกดTabเพื่อเรียกใช้ Vim ที่สร้างเสร็จ

  • NeoComplCacheซึ่งเป็นการเติมคำหลัก (ไม่ได้ระบุว่าแตกต่างจาก Vim ที่สร้างเสร็จแล้วหรือไม่) การ.vimrcตั้งค่าที่ซับซ้อนและNeoSnippetสำหรับการทำตัวอย่างข้อมูล

  • การรวมกันของสัตว์ประหลาดexuberant-ctagsและDoctorJS(โครงการ Mozilla ที่ตายไปแล้วเป็นเวลาหนึ่งปี) TagBarและสิ่งที่ปลูกเองในบ้านเพื่อดึงไฟล์ที่สมบูรณ์ออกจากไฟล์แท็ก

  • SnipMateซึ่งเป็นปลั๊กอินเสริมการแท็กพื้นฐานพร้อมด้วยตัวอย่างและคิดวิธีการเพิ่มตัวอย่างของคุณเองเนื่องจากมันค่อนข้างยุ่งยาก

  • UltiSnipsพร้อมกับUltiSnips-Snippetsซึ่งแตกต่างจากตัวอย่างด้านบน

  • Tern for Vimเป็นห้องสมุดที่มีแนวโน้มที่จะทำการวิปัสสนารหัสจริง ๆ เพื่อรับการเติมข้อความอัตโนมัติที่ถูกต้อง อย่างไรก็ตามมันเป็นรถช้ามากมีการรั่วไหลของหน่วยความจำที่จะผิดพลาดเป็นกลุ่มและอาจจะทิ้ง

  • YouCompleteMeซึ่งเป็นความสมบูรณ์แบบฟัซซี่ในแบบที่คุณเรียกใช้เซิร์ฟเวอร์ในพื้นหลังพร้อมกับฟังก์ชั่นที่ปลูกเองในบ้านเพื่อเติมเต็มข้อมูลโค้ด

  • Eclim - ความพยายามอันสูงส่งในการรันเซิร์ฟเวอร์ Eclipse ในพื้นหลังและแจ้งให้กลุ่มการเติมข้อความอัตโนมัตินั้นวิปัสสนาวิปัสสนาทันที มันทำงานเกี่ยวกับเช่นเดียวกับนกนางนวล

  • สุดท้ายClosetagหรือdelimitMateหรือAutoCloseหรือbananagram บ้านปลูกปิดอัตโนมัติของแท็กและวงเล็บโดยอัตโนมัติในการพิมพ์

ปลั๊กอินเกือบทั้งหมดในรายการนี้จะขัดแย้งกับปลั๊กอินอื่นเกือบทั้งหมดในรายการนี้

YouCompleteMe น่าจะเป็นผู้นำของกลุ่ม แต่ฉันไม่เคยได้รับมันเพื่อทำงานอย่างถูกต้องด้วยการเติมแท็กและการเติมโค้ดที่วิปัสสนาสมบูรณ์ยังไม่ได้พิสูจน์ว่ามีประสิทธิภาพ

ความคิดเห็นส่วนตัวของฉันคือสถานะปัจจุบันของการเติมข้อความอัตโนมัติของกลุ่ม Vim นั้นอยู่ในสภาพที่ไม่ดี สำหรับโครงการขนาดเล็กคุณอาจใช้วิธีการแก้ปัญหาข้างต้นอย่างใดอย่างหนึ่ง หากคุณกำลังจัดการกับ API อย่างง่ายคุณสามารถเก็บไว้ในหัวของคุณเป็นส่วนใหญ่ความสมบูรณ์ที่ไม่ใช่โค้ด หากคุณกำลังจัดการกับโครงการขนาดใหญ่หรือต้องการประโยชน์ด้านความปลอดภัยของประเภทขณะเขียนโปรแกรม IDE แบบเต็ม ( Eclipse , Visual Studio , WebStorm ) จะเหมาะกับคุณมากกว่า Vim

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

Vim มีอคติภาษาปานกลางต่อภาษา C-like ที่ไม่ได้พิมพ์และมีความคาดหวังว่าผู้ใช้จะเพิ่มคุณสมบัติเฉพาะภาษาใด ๆ เป็นปลั๊กอิน น่าเสียดายที่สิ่งนี้นำไปสู่ระบบนิเวศการเติมข้อความอัตโนมัติที่มีเศษซาก ตัวเลือกบางอย่างดี แต่ไม่มีอะไรสมบูรณ์แบบและไม่ค่อยมีผู้นำเสียงข้างมาก / แนวปฏิบัติที่ดีที่สุด


6

นี่คือสิ่งที่ดี: YouCompleteMe

YouCompleteMe ที่ทำให้เมนูแบบเลื่อนลงปรากฏขึ้นโดยอัตโนมัติในขณะที่คุณพิมพ์และรองรับการเลือกแบบฟัซซีดังนั้นหากคุณมีตัวระบุที่เรียกว่าpartition_finderและคุณพิมพ์สิ่งที่ต้องการptfขณะแก้ไขไฟล์ C ++ รายการคำแนะนำแบบเลื่อนลงจะรวมทั้งprintfและpartition_finderเนื่องจากมีตัวอักษรเดียวกัน ในลำดับเดียวกัน หากคุณมีตัวแปรที่เรียกว่าmyBrainคุณสามารถพิมพ์brnและมันจะแนะนำว่า YouCompleteMe ยังให้ความสำคัญกับข้อเสนอแนะตามความถี่การใช้งานก่อนหน้า



2

ฉันลองใช้ necomplecache กับneosnippetฉันเดาว่ามันจะมีการรวมที่ดีขึ้นเพราะทั้งคู่เขียนโดยคนคนเดียวกัน


1

ฉันเชื่อว่ากลุ่มมีหนึ่งในตัวที่เรียกว่า OmniComplete ในโหมดแทรกใช้ctrl+x,ctrl+oในการใช้งานโหมดแทรก

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

หากคุณไม่พบคำที่คุณต้องการctrl+nในที่สุดก็จะวนออกจากรายการและคุณสามารถพิมพ์ต่อไปหรือคุณสามารถกดESCและจากนั้นbcwไปbที่จุดเริ่มต้นของคำที่ละเมิดและcแขวนwอ๊อดที่คุณต้องการ


Vim ในตัวดูเหมือนว่าจะดูด เมื่อใดก็ตามที่ฉันกด <cx> <co> เพียงแค่บอกว่า "ไม่พบรูปแบบ" อย่างไรก็ตามหากฉันกด <cn> ความสำเร็จจะปรากฏในรายการแบบหล่นลงด้านล่างคำที่พิมพ์ นั่นคือสิ่งเดียวกันหรือไม่ มีวิธีทำให้การเติมข้อความอัตโนมัติสมบูรณ์ปรากฏขึ้นโดยอัตโนมัติโดยไม่ต้องกดปุ่มลัดหรือไม่?
trusktr

ฉันไม่ทราบว่ามีปลั๊กอินที่ทำให้การเติมข้อความอัตโนมัติปรากฏขึ้นโดยไม่ต้องมีการโต้ตอบขอโทษ :( <c-x><c-o>ใช้ได้กับสิ่งต่าง ๆ ที่ vim ได้รับการบอกวิธีการสนับสนุนอย่างชัดเจนเท่านั้นโดยค่าเริ่มต้นฉันคิดว่ามันสามารถทำได้เพียงสองสามอย่าง เช่น CSS เสร็จสมบูรณ์ แต่ถ้าคุณต้องการสิ่งที่คล้าย Eclipse มีปลั๊กอินที่เป็นกลุ่มสองสามตัวที่พยายามจัดหาสิ่งนั้นให้คุณ
Conrad.Dean

1
ผมพบว่าปลั๊กอินสำหรับกลุ่มที่เรียกว่า YouCompleteMe ที่ทำให้เมนูแบบเลื่อนลงปรากฏขึ้นโดยอัตโนมัติขณะที่คุณพิมพ์และสนับสนุนการเลือกเลือนดังนั้นถ้าฉันมีตัวระบุเรียกว่าpartition_finderและฉันพิมพ์สิ่งที่ต้องการptfในขณะที่แก้ไข c ++ แฟ้มเมนูแบบเลื่อนลงจะแนะนำทั้งสองprintfและpartition_finderเนื่องจากมีตัวอักษรเดียวกันในลำดับเดียวกัน หากฉันมีตัวแปรที่เรียกว่าmyBrainฉันสามารถพิมพ์brnและมันจะปรากฏขึ้น YouCompleteMe ยังให้ความสำคัญกับข้อเสนอแนะตามความถี่การใช้งานก่อนหน้า ลองดูที่นี่: valloric.github.io/YouCompleteMe
trusktr

1

ฉันได้รวบรวมปลั๊กอินใหม่SimpleAutoComplPopจาก AutoComplPop ดั้งเดิม แม้ว่าฉันไม่คุ้นเคยกับ ruby ​​หรือ snipMate คุณอาจลองแล้วก็ดีใจที่ได้รับคำติชม :)

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