เสร็จสิ้นเป็นกลุ่ม - ระงับการขึ้นบรรทัดใหม่เสมอหลังจากที่ฉันเลือกคำแนะนำด้วยปุ่ม Enter


11

บางครั้งหลังจากที่ฉันเลือกข้อเสนอแนะ (จากป๊อปอัปเสร็จสิ้นที่ปรากฏขึ้นเมื่อกด Ctrl-N) โดยใช้ปุ่ม Enter กลุ่มที่จะเป็นกลุ่มขึ้นบรรทัดใหม่และเคอร์เซอร์จะถูกย้ายไปที่บรรทัดต่อไปนี้ สิ่งนี้ไม่ได้เกิดขึ้นเสมอไป - ดูเหมือนว่า Vim จะพยายามฉลาดและจะย้ายฉันไปยังบรรทัดถัดไปหากคิดว่านี่เป็นสิ่งที่ฉันต้องการ

อย่างไรก็ตามฉันต้องการปิดการใช้งานพฤติกรรมนี้ (เพราะมันไม่ได้ฉลาดเสมอไป) ดังนั้นฉันจะต้องย้ายไปยังบรรทัดถัดไปด้วยตนเองโดยกดปุ่ม Enter ด้วยตนเอง เป็นไปได้ไหม

คำตอบ:


14

สิ่งที่ Vim ทำเพื่อตอบสนองการพิมพ์คีย์ <Enter> ของคุณในขณะที่ใช้การเติมให้สมบูรณ์นั้นขึ้นอยู่กับสถานะของเมนูเสร็จสิ้น พฤติกรรมของเมนูอธิบายไว้ที่นี่:

:help ins-completion-menu

และพฤติกรรมของปุ่มต่าง ๆ เมื่อใช้การเติมเม็ดมีดได้อธิบายไว้ในส่วนถัดไป

:help popupmenu-keys

โดยที่มันอธิบายว่าพฤติกรรมของปุ่ม <Enter> นั้นขึ้นอยู่กับสถานะเมนู ตามที่ฉันเข้าใจแล้วการพิมพ์ <Enter> จะขึ้นบรรทัดใหม่ยกเว้นในกรณีที่คุณได้เลือกการจับคู่จากเมนูโดยใช้ปุ่มลูกศร

วิธีที่ดีที่สุดในการหลีกเลี่ยงการแทรกบรรทัดใหม่เมื่อคุณไม่ต้องการให้มีการยกเลิกหรือทำการเลือกโดยใช้ปุ่มอื่นเช่น Ctrl-Y หรือ Ctrl-E

ดูสิ่งนี้ด้วย

:help complete_CTRL-Y

และสำหรับคำอธิบายทั้งหมดหากการแทรกโหมดสำเร็จ

:help ins-completion

4

คุณสามารถเพิ่มการจับคู่นี้ในไฟล์. vimrc ของคุณ:

inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"

มันจะแมปรหัสส่งคืนในโหมดแทรกเพื่อป้อน CTRL-Y เมื่อมองเห็นเมนูป๊อปอัพ CTRL-Y เลือกรายการที่เลือกในปัจจุบันในเมนูโดยไม่ต้องป้อนบรรทัดใหม่ มิฉะนั้นจะทำให้การส่งคืนคีย์ทำหน้าที่เหมือนปกติ


1
คุณช่วยอธิบายได้ว่าโค้ดนี้ทำอะไรและจัดการกับปัญหาที่ได้รับจาก OP หรือไม่ รหัสที่ไม่ได้อธิบายสามารถปรากฏขึ้นไม่น่าเชื่อถือและเป็นอันตรายต่อผู้ใช้
bwDraco

0

ฉันได้เพิ่มสิ่งนี้ลงใน. vimrc และตอนนี้มันทำงานตามที่ฉันต้องการ:

noremap pumvisible ()? "\": ""

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