ฉันจะต้องการที่จะดำเนินการคิดเช่น:'<,'>s/^\ \ \ \ //
ในรูปแบบย่อเช่น:'<,'>s_lw
(ไม่ว่าสิ่งที่จริงจะเป็นไปได้ว่าs_lw
) โดยใช้vim
ฟังก์ชันการทำงานที่ฐานแรกพยายามที่จะไม่พึ่งพาในส่วนขยายเช่นCommandAlias: Make ชื่อแทนคำสั่งที่เป็นกลุ่ม
เป็นไปได้ไหม?
ฉันจะต้องการที่จะดำเนินการคิดเช่น:'<,'>s/^\ \ \ \ //
ในรูปแบบย่อเช่น:'<,'>s_lw
(ไม่ว่าสิ่งที่จริงจะเป็นไปได้ว่าs_lw
) โดยใช้vim
ฟังก์ชันการทำงานที่ฐานแรกพยายามที่จะไม่พึ่งพาในส่วนขยายเช่นCommandAlias: Make ชื่อแทนคำสั่งที่เป็นกลุ่ม
เป็นไปได้ไหม?
คำตอบ:
คุณสามารถใช้ตัวย่อของโหมดบรรทัดคำสั่งเพื่อ:
:cnoreab s_lw s/^\ \ \ \ //
ข้อดีของการใช้อักษรย่อบนการแมป ( :cnoremap
) คือคุณยังสามารถพิมพ์สิ่งนี้ (เช่นในการค้นหา) โดยไม่ขยายออกไปโดยไม่ได้ตั้งใจ
<
ตัวอย่างที่คุณให้อาจจะทำได้ด้วย
อย่างไรก็ตามคุณสามารถใช้คำสั่งที่กำหนดเองได้:
" remove 4 leading spaces on the current line or a range
command! -range=% SLW execute <line1> . ',' . <line2> . 's/^ \{4}//'
" usage 1:
foo
:SLW<CR>
foo
" usage 2:
foo
bar
vj
:'<,'>SLW<CR>
foo
bar
" usage 3:
foo
bar
:,+SLW<CR>
foo
bar
การแมปโหมดภาพ:
xnoremap ,slw :s/^ \{4}//<CR>
หรือการแมปโหมด commandline:
cnoremap slw s/^ \{4}//
หรือตัวย่อโหมด commandline เหมือนในคำตอบของ Ingo
@:
สามารถใช้สำหรับการทำซ้ำการกระทำ