tags:

views:

314

answers:

3

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?

A: 

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.

ldigas
A: 

Do you need a "hard" tabstop, or just be able to insert enough spaces ("soft" tabstop) when you press ?

Irha
Welcome to SO! When you need to ask a question before posting an answer, it's best to do it in the "add comment" area below the post. Partly to keep answers with answers, but it also helps that no one can give you a -1 for not answering the question. ;)
ojrac
Thanks, I will keep that in mind.
Irha
I think newbie's can't add comments like that, at least I didn't find a way, which is why I asked the question as an answer. I will look around again.
Irha
+3  A: 

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
Whaledawg
This is a great function, although this will not reformat an existing file, which is what I needed, but assist in formatting my own file on the fly.