ทำคำสั่งโหมด command-line พิมพ์ <Esc> และ Ctrl


11

ลองนึกภาพคุณต้องการพูดคำด้านล่าง หาก|เป็นตำแหน่งเคอร์เซอร์คุณสามารถพูดคำด้วยcw""<Esc>Pจากโหมดปกติได้อย่างง่ายดาย

|below

ฉันต้องการที่จะบรรลุพฤติกรรมเดียวกันในโหมดบรรทัดคำสั่ง คำถามของฉันคือฉันจะพูดกับโหมดบรรทัดคำสั่งที่ฉันต้องการพิมพ์ได้<Esc>อย่างไร ฉันพยายาม:norm cw""<Esc>Pและบางรูปแบบอื่น ๆ แต่ผมเพิ่งได้รับแทน""<Esc>P"below"

ยังคงเกี่ยวข้องกับสิ่งนี้ฉันต้องการที่จะรู้ว่าฉันจะทำคำสั่ง Ctrl ประเภทโหมดบรรทัดคำสั่งได้อย่างไร ตัวอย่างเช่นฉันสามารถพูดคำดังกล่าวด้วยcw"<C-r>""<Esc>แทน แต่ฉันก็ต้องใช้ Command-line พิมพ์<C-r>ให้ฉัน ฉันจะทำสิ่งนี้ได้อย่างไร


1
เช่นเดียวกับที่มี<C-x><C-e>ใน readline เพื่อแก้ไขบรรทัดคำสั่ง$EDITORคุณมี<C-f>Vim เพื่อเปิดหน้าต่างบรรทัดคำสั่ง :help cmdline-windowดู
romainl

คำตอบ:


11

<C-v>คือสิ่งที่คุณกำลังมองหา มันช่วยให้คุณป้อนตัวอักษร (เช่นตัวอักษรEscแทนสตริง "Esc") โดยไม่ต้องให้คุณหนีอะไร

:norm cw""<C-v><Esc>P

แสดงเป็น:

:norm cw""^[P

และจะทำสิ่งที่คุณต้องการ (เช่นอ้างคำพูด) คุณสามารถใช้สิ่งนี้กับ<C-?>การแมปอื่น ๆ ตัวอย่างเช่นคำขอที่สองของคุณ:

:norm cw"<C-v><C-r>""

แสดงเป็น:

:norm cw"^R""

และจะส่งผลเช่นเดียวกับข้างต้น ไม่จำเป็นต้องเพิ่มEscส่วนท้ายในตอนท้าย


10

เพราะนี่คือกุญแจพิเศษเช่น<Esc>ไม่ได้แปลในคำสั่งและได้รับการปฏิบัติเช่นเดียวกับคุณกดnormal <Esc>เพื่อแก้ไขปัญหานี้คุณสามารถใช้execคำสั่ง ชอบมาก

:exec "norm cw\"\"\<Esc>P"

โปรดทราบว่าคุณต้องใส่แบ็กสแลชก่อนเครื่องหมายคำพูดและและการ<Esc>ใช้เครื่องหมายคำพูดเดี่ยวแทนเครื่องหมายคำพูดคู่จะไม่ทำงาน


ใช้งานได้กับคำสั่ง Ctrl ด้วยหรือไม่ ฉันจะเขียนมันลงในคำสั่งได้อย่างไร?
Gonçalo Ribeiro

ใช่มันควรจะทำงาน คุณสามารถเขียนได้ดังนี้:"\<C-{insert key}>"
EvergreenTree

2

โหมดบรรทัดคำสั่งนั้นแตกต่างกัน คุณไม่สามารถใช้คำสั่งแก้ไข (โหมดปกติ) เดียวกันได้ :help c_CTRL-Vคุณสามารถค้นหารายการของคำสั่งที่

ตอนนี้มีหน้าต่างบรรทัดคำสั่ง ( :help command-line-window) ซึ่งสามารถป้อนผ่านq:จาก<C-F>โหมดปกติและจากโหมดบรรทัดคำสั่ง ในที่หน้าต่างคุณสามารถใช้คำสั่งปกติและแมปเพื่อที่จะเป็นตัวเลือกที่ 1

ตัวเลือก 2 เป็นการแมปพิเศษสำหรับโหมดบรรทัดคำสั่ง อย่างที่ฉันบอกไปแล้วว่าคุณไม่สามารถใช้วิธีการผ่าน:normalet al ได้ กุญแจสำคัญในการกำหนดเหล่านั้นคือการ:help c_CTRL-\_eทำแผนที่ซึ่ง "ประเมิน [s] {expr} และแทนที่ [s] บรรทัดคำสั่งทั้งหมดด้วยผล" นี่เป็นตัวอย่างง่ายๆที่ทำงานอย่างถูกต้องในตอนท้ายของบรรทัดคำสั่ง:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

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