สร้างคำสั่งโหมดปกติที่ยอมรับตัวเลขเป็นอาร์กิวเมนต์ใน Vim

คุณจะสร้างคำสั่งโหมดปกติที่ยอมรับตัวเลขเป็นส่วนหนึ่งของคำสั่งได้อย่างไร ตัวอย่าง ได้แก่ 6>> (เยื้องข้อความ 6 บรรทัด), 2dw (ลบ 2 คำ) และ 23yy (คัดลอก 23 บรรทัดไปยังบัฟเฟอร์การคัดลอก) มีวิธีการทำเช่นนี้โดยใช้ nmap หรือลักษณะเดียวกันหรือไม่?

โดยเฉพาะฉันต้องการสร้างการแมปเช่นนั้นถ้าฉันป้อน

<leader>4bu

ในโหมดปกติ Vim จะทำ

:4buf<CR>

vim
person gotgenes    schedule 06.04.2011    source แหล่งที่มา


คำตอบ (2)


คุณต้องกำหนดโอเปอเรเตอร์ของคุณเอง ดู:

:help :map-operator
person Raimondi    schedule 06.04.2011

  1. ใช้ nnoremap ไม่ใช่ nmap
  2. หมายเลขที่ให้กับคำสั่งโหมดปกติล่าสุดสามารถเข้าถึงได้ผ่านตัวแปร v:count ดังนั้น ตัวอย่างเช่น การแมปต่อไปนี้จะเพิ่มหมายเลขที่ให้มาให้กับจำนวนข้อความบัฟเฟอร์ครั้ง:

    nnoremap ,a a<C-r>=v:count<CR><Esc>
    

    สาเหตุที่ 20,a บวก 20 20 ครั้งก็เนื่องมาจาก 20,a ถูกเขียนใหม่เป็น 20a<C-r>... เพื่อหลีกเลี่ยงไม่ให้คุณสามารถใช้

    nnoremap ,a :<C-u>call feedkeys("a".v:count."\e", "n")<CR>
    

    . <C-u> จะละทิ้งการนับสำหรับคำสั่ง ex แต่ยังคงสามารถเข้าถึงได้จากตัวแปร v:count

person ZyX    schedule 07.04.2011