แทรกอักขระเดี่ยวในกลุ่ม?


25

ใน Vim (7.2) จะมีคำสั่งโหมดปกติrเพื่อแทนที่อักขระเดียวด้วยอักขระอื่น ตัวอย่างเช่นการพิมพ์rXจะแทนที่อักขระหนึ่งตัวภายใต้เคอร์เซอร์ด้วยXจากนั้นให้คุณกลับสู่โหมดปกติ

มีคำสั่งโหมดปกติเพื่อแทรกอักขระเดียวแล้วกลับสู่โหมดปกติหรือไม่?


1
ไซต์ข้ามที่เป็นไปได้ที่ซ้ำกัน: stackoverflow.com/questions/1557893/…
Ciro Santilli 事件改造中心中心法轮功六四

ดูvim.wikia.com/wiki/Insert_a_single_characterสำหรับโซลูชันที่ครอบคลุม
Maxim Suslov

คำตอบ:


6

MelBurslan นั้นถูกต้องว่าคุณสมบัตินี้ไม่มีอยู่จริง แต่การสร้างคำสั่งที่ผู้ใช้กำหนดเองไม่ใช่วิธีการสร้างอย่างแท้จริง ฉัน tinkered ไม่กี่นาทีและมากับสิ่งนี้:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

ซึ่งใช้กลอุบายของ Vim ที่เกี่ยวข้องกับการ "ใส่" ข้อความจากการลงทะเบียนในกรณีนี้การลงทะเบียน "expression" นิพจน์ที่ถูกเสียบเข้ากับรีจิสเตอร์คือ " nr2char(getchar())" ซึ่งจะส่งคืนสตริงอักขระเดี่ยว

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


8

ขอขอบคุณจอห์นนี่ที่ให้คำตอบที่ยอดเยี่ยมแก่เราในความคิดเห็นด้านล่าง:

":nmap <C-i> i_<Esc>r"

แมป Control + i เพื่อแทรกอักขระเดียวและมันกระชับมาก

ในไฟล์ vimrc ของคุณสิ่งนี้จะมีลักษณะดังนี้:

nnoremap <C-i> i_<Esc>r

ฉันเปลี่ยนการจับคู่ของฉันเพื่อใช้พื้นที่และคุณสามารถเปลี่ยนเป็นคีย์ที่คุณต้องการได้:

nnoremap <Space> i_<Esc>r

1
นี่คือคำตอบที่กระชับและง่ายที่สุด
Dylanthepiguy

4

เท่าที่ฉันรู้ไม่มีฟังก์ชั่นดังกล่าวในการกระจายตัวที่กว้างขวางของตัวแก้ไข vi แต่ vim มีเครื่องมืออำนวยความสะดวกในการสร้างคำสั่งที่กำหนดเอง ก่อนหน้านี้มีการพูดถึงที่นี่: ในหัวข้อนี้

คุณอาจจะสามารถสร้างคำสั่งที่กำหนดเองของคุณทำสิ่งที่คุณต้องการจะทำ


3
นี่คือคำสั่งเพื่อแมป Ctrl-I เพื่อแทรกอักขระเดียว: ": nmap <Ci> i_ <esc> r"
Johnny

2

วิธีง่ายๆในการทำเช่นนี้คือการใช้คำสั่งCut xand Put pบอกว่า*เป็นตัวละครที่คุณต้องการแทรก i * Escใส่ได้โดยใช้ xจากนั้นกด ที่จะตัดตัวละคร ตอนนี้คุณสามารถกดpเพื่อใส่อักขระเดี่ยวได้ หากคุณต้องการที่จะแทรกตัวละคร 300 300pครั้งคุณสามารถพิมพ์:

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