Setting the distance between tabs of variable width in Vim

I sometimes want Vim to read tab files in which the most reasonable formatting implies an uneven tab width. In other words, I want to stop the tab at the positions:

5, 30, 50, 60, 70, 80

How can I do this in vim?

+6
vim
source share
2 answers

If you really don't need to change the tabs and can go away by simply inserting the right amount of spaces, I suggest you script it. Here is a quick and dirty version that can 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 
+4
source share

Not at present. Not with any official builds.

However, if you are ready to put a little effort on your side, I remember that there was a patch for something like that. Check out the vim patches page.

+1
source share

All Articles