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