Vim logo vim online Vim Book Ad

basic Tip #303: Statusline Tab Level Function Ruler TVIM

 tip karma   Rating -1/1, Viewed by 651 

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).
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.
SourceForge Logo