ดูเหมือนว่าจะทำงานได้ค่อนข้างดีและทำสิ่งที่มีเหตุผลเมื่อใช้<C-a>
กับ 9 (95 กลายเป็น 105) หรือใช้<C-x>
กับ 0 (105 กลายเป็น 95):
nnoremap g<C-a> :call search('\d', 'c')<CR>a <Esc>h<C-a>lxh
nnoremap g<C-x> :call search('\d', 'c')<CR>a <Esc>h<C-x>lxh
- ครั้งแรกที่เราค้นหาหลักใด ๆ ที่มีประโยชน์จากการไม่รีเซ็ต
search()
@/
a <Esc>h
- ไปที่โหมดแทรกเพิ่มช่องว่างหลังตัวเลขแล้วไปทางซ้ายเพื่อให้เคอร์เซอร์อยู่ด้านบนของตัวเลข
- ตอนนี้เราสามารถใช้หรือ
<C-a>
<C-x>
- เราใช้
lxh
เพื่อลบพื้นที่ที่เราเพิ่ม
ฉันได้แมปนี้g<C-a>
และg<C-x>
ดังนั้นคุณยังสามารถเรียกเดิม
รุ่นที่แตกต่างกันเล็กน้อยซึ่งจะค้นหาเฉพาะตัวเลขในบรรทัดปัจจุบัน (แต่จะเว้นช่องว่างหากไม่มีหมายเลขในบรรทัดปัจจุบัน):
nnoremap g<C-a> :call search('\d', 'c', line('.'))<CR>a <Esc>h<C-a>lxh
nnoremap g<C-x> :call search('\d', 'c', line('.'))<CR>a <Esc>h<C-x>lxh
และนี่คืออีกเวอร์ชั่นที่ใช้แนวคิดเดียวกันกับเมื่อก่อน แต่ยังเพิ่มช่องว่างก่อนหลัก ซึ่งจะทำให้g<C-a>
ไม่สนใจสัญญาณ Munis ใด ๆ ก่อนที่หมายเลข (โดยค่าเริ่มต้น<C-a>
ใน-42
พระทัย 'เพิ่ม' -41
ไปยัง
นอกจากนี้ยังยอมรับการนับเพื่อที่5g<C-a>
จะเพิ่มจำนวน 5:
fun! Increment(dir, count)
" No number on the current line
if !search('\d', 'c', getline('.'))
return
endif
" Store cursor position
let l:save_pos = getpos('.')
" Add spaces around the number
s/\%#\d/ \0 /
call setpos('.', l:save_pos)
normal! l
" Increment or decrement the number
if a:dir == 'prev'
execute "normal! " . repeat("\<C-x>"), a:count
else
execute "normal! " . repeat("\<C-a>", a:count)
endif
" Remove the spaces
s/\v (\d{-})%#(\d) /\1\2/
" Restore cursor position
call setpos('.', l:save_pos)
endfun
nnoremap <silent> g<C-a> :<C-u>call Increment('next', v:count1)<CR>
nnoremap <silent> g<C-x> :<C-u>call Increment('prev', v:count1)<CR>
10<C-a>
เพื่อเพิ่ม 10 หรือr2
เพื่อแทนที่ 1 ด้วย 2