Loading ...
Sorry, an error occurred while loading the content.

59111RE: Using "strlen" under Visual Mode[answer + question]

Expand Messages
  • Keith Roberts
    May 10 8:46 AM
    • 0 Attachment
      >-----Original Message-----
      >From: Eric Arnold [mailto:eric_p_arnold@...]
      >Sent: Sunday, May 01, 2005 9:45 PM
      >To: jamessan@...; vim@...
      >Subject: Re: Using "strlen" under Visual Mode[answer + question]
      >
      >
      >--- jamessan@... wrote:
      >
      >> On Mon, May 02, 2005 at 06:49:19AM +0800, Edward WIJAYA wrote:
      >> > Suppose I want to measure then length of the string highlighted
      >> > under visual mode.
      >> >
      >> > Is there a way to do it?
      >>
      >> You could yank the text into a register and then call strlen on the
      >> buffer. For example:
      >>
      >> <select visual range>
      >> "ay
      >> :echo strlen(@a)
      >
      >
      >If you want to restore the selection area, try:
      >
      > `<v`>
      >
      >or V or which-ever. I tried making a function to do it automatically,
      >
      > function! Vislen()
      > let modetype = mode()
      > let do = 'normal "by`<' . modetype . '`>'
      > echo do
      > exe do
      > echo modetype . ": strlen(" . @b . ")=" . strlen(@b)
      > endfunction
      > map ,t :call Vislen()<CR>
      >
      >but the "mode()" call returns "n" normal mode when I call the
      >,t macro from a visual selection. The help says:
      >
      > This is useful in the 'statusline'
      >option. In most other
      > places it always returns "c" or "n".
      >
      >Sadly, the help for "mode()" doesn't refer you to what
      >actually works, getregtype(). It does mean that you can't
      >find out the mode without yanking into a register, as far as I
      >can tell.

      I think visualmode() would work here ... It doesn't matter if you've
      crossed into normal mode, since it returns what the mode was last time
      visual mode was entered.

      -Keith
    • Show all 7 messages in this topic