Nếu bạn không thực sự cần thay đổi các tab và có thể lấy đi chỉ bằng cách chèn đúng số lượng khoảng trắng, tôi khuyên bạn nên viết mã. Đây là một phiên bản nhanh và bẩn có thể làm những gì bạn muốn:
let s:tabstops = [0, 5, 30, 50, 60, 70, 80]
fun! Find_next(pos)
if a:pos > min(s:tabstops) && a:pos < max(s:tabstops)
let my_count = 0
while my_count < len(s:tabstops) - 1
if a:pos > get(s:tabstops, my_count) && a:pos < get(s:tabstops, my_count+1)
return get(s:tabstops, my_count+1)
endif
let my_count = my_count + 1
endwhile
return -1
endif
return -1
endfun
fun! Tabbing()
let pos = col('.')
let next_stop = Find_next(pos)
let the_command = "normal i"
let my_count = 0
while my_count < next_stop - pos
let the_command = the_command . " "
let my_count = my_count + 1
endwhile
let the_command = the_command . ""
execute the_command
endfun
imap <TAB> j<ESC>:call Tabbing()<CR>lxi
Có một tính năng được gọi là tabstops biến đã được khởi động trong một thời gian dài trong vim. Nó vừa được tái hòa nhập vào nhánh chính trong vài ngày qua. Tôi đã thử nghiệm nó một chút - đã phải vá nó để tránh một vài lỗi số học, nhưng bây giờ nó xuất hiện khá ổn định. Bạn có thể may mắn sớm thôi. – Cascabel