sponsor Vim development Vim logo Vim Book Ad

basic Tip #303: Statusline Tab Level Function Ruler TVIM

 tip karma   Rating -1/3, Viewed by 1963 

created:   August 8, 2002 2:05      complexity:   basic
author:   TVIM Tamed Vim      as of Vim:   6.0

I use this function to let me know if my cursor is on a TAB column.
The t* on the ruler means I am not. But t3 means the cursor is on tablevel 3
~vimrc  ----------------------- My Ruler ------------------------ r4,c13,t3
~vimrc  ----------------------- My Ruler ------------------------ r4,c14,t*
If you want to change a tab level you can drag or push the first character
of a line to a desired tab level. (more on that later)
This ruler replacement will let you know where you are, whether you
like to use space tabs (see vimtip #12 ) or regular tabs.  My function is set
to four space tabs stops and only goes 9 levels but can be easily modified.

Actually I just wanted to learn how to use a function in my _vimrc
and this was my first attempt.  Add this to your _vimrc

"--------------------cut------------------
set laststatus=2
"This makes sure the ruler shows.  See    help laststatus
set statusline=%f\ ---------\ My\ Ruler\ ----------\ r%l,c%c,t%{ShowTab()}
"See help statusline  (I toggle between 12 helpful rulers -- more on that later)
fu ShowTab()
    let TabLev='*'
    let Col=(col("."))
    if Col == 1 | let TabLev='0' | en  
    if Col == 5 | let TabLev='1' | en
    if Col == 9 | let TabLev='2' | en
    if Col ==13 | let TabLev='3' | en
    if Col ==17 | let TabLev='4' | en
    if Col ==21 | let TabLev='5' | en
    if Col ==25 | let TabLev='6' | en
    if Col ==29 | let TabLev='7' | en
    if Col ==33 | let TabLev='8' | en
    if Col ==37 | let TabLev='9' | en
return TabLev
endf
"The ruler (statusline) shows a t* unless you are on col 1,5,9,13,...
"-------------------cut-------------------

This function ShowTab() gets called and updates the ruler with every cursor
move but it does not slow things down as I type.  Perhaps a speed typist
may complain :-)
In case I write something else you may search on the key word TVIM
Best Wishes        TVIM Tamed Vim        [email protected]

 rate this tip  Life Changing Helpful Unfulfilling 

<<Use gvim in kmail | fold braces and javadoc >>

Additional Notes

[email protected], August 8, 2002 7:32
Looks like the tab level is basically set to ( col( '.' ) - 1 ) / 4.  The 4 is probably the value of &ts; instead.  Of course, this always returns a value even if you're in the middle of a tab (not actually ON a tabstop), so something like this:

let TabLevel = ( col( '.' ) - 1 ) / &ts;
if ( ( TabLevel * &ts; + 1 ) != col( '.' ) )
  let TabLevel = '*'
endif

Works for all levels of tabs. . .  The proof and verification thereof is left to the reader as an exercise(TM).
sputnik, May 20, 2003 14:14
well, the 2nd example didnty work for me... so,

fu ShowTab()
   let TabLevel=(col('.')-1)
   if TabLevel == 0
      let TabLevel='*'
   endif
   return TabLevel
endf
sputnik, May 20, 2003 14:26
and finaly i found THE solution......

fu ShowTab()
   let TabLevel = (indent('.') / &ts; )
   if TabLevel == 0
      let TabLevel='*'
   endif
   return TabLevel
endf
Anonymous, May 22, 2003 14:53
vimtip #477
If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to [email protected] after searching the archive. Help Bram help Uganda.
Sponsored by Web Concept Group Inc. SourceForge Logo