I sometimes want Vim to read tab-formatted files where the most reasonable formatting implies a non-uniform tab width. In other words, I want a tab stop at positions:
5, 30, 50, 60, 70, 80
How can I do this in Vim?
I sometimes want Vim to read tab-formatted files where the most reasonable formatting implies a non-uniform tab width. In other words, I want a tab stop at positions:
5, 30, 50, 60, 70, 80
How can I do this in Vim?
Currently no. Not with any official builds.
However, if you're willing to invest a little effort on your side, I remember there was a patch for something like that. Check out vim's patches page.
Do you need a "hard" tabstop, or just be able to insert enough spaces ("soft" tabstop) when you press ?
If you don't actually need to change the tabstops and can get away with just inserting the correct number of spaces, I would suggest you script it. Here's a quick and dirty version that might do what you want:
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