ฉันนำเสนอ 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และหมุน