On 4/23/06, Suresh Govindachar <[EMAIL PROTECTED]> wrote:
>
> Hello,
>
>   Earlier today, I asked: "Unless called from the statusline,
>   mode() mostly returns c or n.  So how can one know the mode
>   from viml?"
>
>   Searching the archives, I found a tip from Tony Mechelynck
>   about setting a variable from the statusline.  (I also found
>   a post from Benji from 2002 or 2003 wondering why one would
>   want to know the mode directly from viml -- so he is included
>   in the cc.)
>
>   Here's the solution to having blockwise changes be blockwise
>   irrespective of tw (refer post "Visual mode block change -- bug
>   or 'unchangeable'?"):
>
>   Note:  there are 3 very long lines below which might get split
>          into several lines by the email process.
>
>       function! MySetMode()
>         let b:foo = mode()
>         return ''
>       endfunction
>
>       set statusline=%<%f%h%m%r%=%{strftime(\"%I:%M:%S\ \%p,\ %a\ %b\ %d,\ 
> %Y\")}\ %{&ff}\ %l,%c%V\ %P%{MySetMode()}
>
>       augroup BlockHold
>         au!
>         au InsertEnter * if(b:foo == '') | let b:blockhold_tw = &tw | 
> setlocal tw=0 |  endif
>         au InsertLeave * if(exists("b:blockhold_tw")) | let &l:tw = 
> b:blockhold_tw | unlet b:blockhold_tw | endif
>       augroup END
>
>       finish

Nice trick.

Yakov

Reply via email to