การเติมคำให้สมบูรณ์


13

<C-p>และ<C-n>อนุญาตให้เสร็จสิ้นคำที่พบในเอกสารปัจจุบัน

ฉันกำลังจดบันทึกและเขียนคำพูด{0,1}^nและ(E,D)หลาย ๆ ครั้ง คำเหล่านี้ประกอบด้วยคำหลายคำ

มีวิธีการที่จะกรอกคำด้วย<C-p>และ<C-n>(หรือins-completionคำสั่งอื่น ๆ ที่เกี่ยวข้อง) หรือไม่?


1
คุณอาจจะใช้ดีกว่า:abbreviateแทน ตัวอย่างเช่นออก:ab 01n {0,1}^nคำสั่ง จากนั้นเวลาที่คุณพิมพ์ทุกเป็นคำที่เป็นอิสระในโหมดแทรกก็จะขยายตัวออกไป01n {0,1}^n
200_success

@ 200_ ประสบความสำเร็จขอบคุณ ฉันคิดถึงตัวย่อ แต่ก็ยังอยากรู้ว่ามันเป็นไปได้ins-completionไหม
Gonçalo Ribeiro

คำตอบ:


5

แทรกโหมดเสร็จสิ้นด้วย Ctrl-n

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

ตัวอย่างเช่นค่าเริ่มต้น 'iskeyword' ของฉัน

iskeyword=@,48-57,_,192-255

จากนั้นฉันก็ตั้งค่าให้เป็นนั้นบวกกับตัวละครเพิ่มเติมด้านบน

:set iskeyword=@,48-57,_,192-255,{,},,,(,),^

นี้จะเพิ่ม{, }, ,, (, )และ^ตัวละครที่ทำขึ้นคำ (นอกเหนือจากสิ่งที่ไม่อยู่แล้ว)

หลังจากนั้นการพิมพ์{Ctrl-nจะเสร็จสมบูรณ์เป็น{0,1}^n(ในไฟล์ที่มีเพียงสองตัวอย่างที่คุณให้ไว้)

หมายเหตุ: มันจะเป็นการดีกว่าถ้าจะทำ:set iskeyword+=กับสิ่งเพิ่มเติมดังนี้:

:set iskeyword+={,},,,(,),^

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

การขยายด้วยตัวย่อ

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

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

แนวคิดพื้นฐานที่อยู่เบื้องหลังตัวย่อคือคุณเชื่อมโยงคำกับข้อความอื่น ๆ และเมื่อใดก็ตามที่บรรณาธิการตรวจพบว่าคุณพิมพ์คำว่า (นั่นคือข้อความที่คุณพิมพ์ล้อมรอบด้วยพื้นที่สีขาวซึ่งการดำเนินการเสร็จสมบูรณ์จะเพิ่มช่องว่างหลังจาก คำหลักหรือออกจากโหมดแทรก) มันจะถูกแทนที่ด้วยข้อความอื่น ๆ

สมมติว่าไฟล์ของคุณมี{0,1}^nจำนวนมากและไม่มีรูปแบบอื่น ๆ การพิมพ์ที่ยืดออกเล็กน้อยคุณอาจต้องการพิมพ์01nหรือmyvalueขยายมัน{0,1}^nแต่เฉพาะเมื่อ01nหรือmyvalueเป็นคำศัพท์ของมันเอง (นั่นคือถ้ามันปรากฏขึ้นในอีกคำหนึ่งไม่ได้ เปลี่ยนมัน)

ใน NVI :abbrev 01n {0,1}^nคุณสามารถทำได้ คุณสามารถทำสิ่งเดียวกันใน Vim ได้ แต่ฉันแนะนำให้ใช้:iabbrev 01n {0,1}^nเพื่อ จำกัด การขยายเพื่อแทรกโหมดเท่านั้น

จากนั้นถ้าคุณมีข้อความ (ซึ่ง|หมายถึงเคอร์เซอร์)

We find that the value 01n|

และจากนั้นคุณจะตีEscหรือSpaceหรือTabหรือมิฉะนั้นย้ายเคอร์เซอร์ข้อความที่ได้รับการแทนที่และคุณมี (ตัวอย่างเช่นการใช้ช่องว่าง)

We find that the value {0,1}^n |

และคุณสามารถพิมพ์ต่อไปได้โดยไม่หยุดชะงัก

โดยปกติจะใช้เพื่อแก้ไขการพิมพ์ทั่วไปที่ผิดพลาดโดยอัตโนมัติ (เช่นการเปลี่ยน 'teh' เป็น 'the') แต่อาจมีประโยชน์เท่า ๆ กันสำหรับกรณีการใช้งานของคุณโดยสมมติว่าคุณไม่สนใจการตั้งค่าการแมปล่วงหน้า


สำหรับฉันดูเหมือนว่า:set iskeyword+={,},,,(,),^ทำงานได้ตามที่คาดไว้
Karl Yngve Lervåg

1
แน่นอนมัน เมื่อฉันลองเป็นครั้งสุดท้ายที่ Vim บอกฉันว่ามันเป็นข้อผิดพลาดทางไวยากรณ์ มันต้องอยู่ที่อื่น กำลังอัปเดตคำตอบของฉัน
John O'M

@ JohnO'M คุณสามารถเพิ่มการอ้างอิงเกี่ยวกับวิธีabbreviateที่เหมาะกับงานนี้มากขึ้นได้อย่างไร
Gonçalo Ribeiro

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