Monday, February 21, 2011

Re: Vim count selection and put in statusline

Hi,

carlosp wrote:
>
> Dear all, I would like to know if there is some non-baroque way of, when
> doing a selection of some text, set in the status line just the number of
> characters in the selection (and of course, when one modifies the selection,
> as moving the coursor in the visual mode) the status line should be updated
> automatically. The solutions that occurred to me involve using external
> commands (like wc -l) and then sending that to vim, each time I move the
> selection etc. Does anyone knows a clean way of doing such a thing?

put the following function in your .vimrc or in a file named
~/.vim/plugin/VisualSelectionSize.vim

function! VisualSelectionSize()
if mode() == "v"
" Exit and re-enter visual mode, because the marks
" ('< and '>) have not been updated yet.
exe "normal \<ESC>gv"
if line("'<") != line("'>")
return (line("'>") - line("'<") + 1) . ' lines'
else
return (col("'>") - col("'<") + 1) . ' chars'
endif
elseif mode() == "V"
exe "normal \<ESC>gv"
return (line("'>") - line("'<") + 1) . ' lines'
elseif mode() == "\<C-V>"
exe "normal \<ESC>gv"
return (line("'>") - line("'<") + 1) . 'x' . (abs(col("'>") - col("'<")) + 1) . ' block'
else
return ''
endif
endfunction

and then change your 'statusline' option so that it contains

%{VisualSelectionSize()}

at an appropriate place, e.g., with

:set statusline.=%(\ %{VisualSelectionSize()}%)

you would append it to your current status line. The group %(...%) takes
care of removing the space if VisualSelectionSize() returns an empty
string when you are not in a visual mode.

Regards,
Jürgen

--
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)

--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

No comments: