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
--Suresh