ฉันนำเสนอ 3 วิธี สองกรณีแรกเป็นกรณีพิเศษซึ่งต้องใช้การกดแป้นน้อย คนสุดท้ายคือทั่วไป
|แทนตำแหน่งเคอร์เซอร์
สลับอาร์กิวเมนต์ที่อยู่ติดกัน (ใช้ไม่ได้สำหรับสองรายการสุดท้าย)
function func(foo[0], |bar(), baz.spam, qux->norf)
ขั้นตอน:
dW ลบคำปัจจุบัน (อาร์กิวเมนต์)
W ไปที่อักขระตัวแรกของอาร์กิวเมนต์ถัดไป
P วางก่อนเคอร์เซอร์
สลับสองอาร์กิวเมนต์สุดท้าย
function func(foo[0], bar()|, baz.spam, qux->norf)
ขั้นตอน:
dt, ลบจนกว่าเครื่องหมายจุลภาคถัดไป
E ไปที่ตัวละครสุดท้ายของการโต้แย้งต่อไป
P วางก่อนเคอร์เซอร์
สลับสองอาร์กิวเมนต์ใด ๆ
function func(|foo[0], bar(), baz.spam, qux->norf)
ขั้นตอน:
vt,d มองเห็นลบจนกว่าเครื่องหมายจุลภาค
W หลายครั้งจนกว่าคุณจะถึงอาร์กิวเมนต์ที่คุณต้องการแลกเปลี่ยน
gP วางก่อนเคอร์เซอร์และวางเคอร์เซอร์บนถ่านหลังจากวางเนื้อหา
dt,ลบจนกว่าเครื่องหมายจุลภาคถัดไป แทนที่,ด้วย)หากนี่คืออาร์กิวเมนต์สุดท้าย
`< กลับไปที่จุดเริ่มต้นของพื้นที่ภาพล่าสุด (เคอร์เซอร์จะอยู่ที่เครื่องหมายจุลภาค)
P วางก่อนเคอร์เซอร์
แก้ไข: ตามที่ชี้ไปโดย @ aharris88 OP ต้องการให้อาร์กิวเมนต์สุดท้ายเป็นอาร์กิวเมนต์แรกและย้ายอาร์กิวเมนต์อื่นทั้งหมดให้ถูกต้อง
หมุนอาร์กิวเมนต์ไปทางขวา
function func(foo[0], bar(), baz.spam|, qux->norf)
ขั้นตอน:
dw ลบ ,␣
dt) ลบอาร์กิวเมนต์ล่าสุด
%p ข้ามไปยังการเปิดวงเล็บและวางอาร์กิวเมนต์สุดท้าย
a,␣ ใส่เครื่องหมายจุลภาคและช่องว่าง
<Esc> กลับสู่โหมดปกติ
หรือถ้าคุณไม่ต้องการออกจากโหมดปกติ:
"rdwลบ,␣ลงทะเบียนr
dt) ลบอาร์กิวเมนต์ล่าสุด
%p ข้ามไปยังการเปิดวงเล็บและวางอาร์กิวเมนต์สุดท้าย
"rp วางเนื้อหาของการลงทะเบียน r
โบนัส: GIF สำหรับแต่ละกรณี:
swap1 , swap2 , swap3และหมุน