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

68803Re: Suggestion: Highlight the search pattern in :g/.../# or :g/.../p

Expand Messages
  • Barry Arthur
    Mar 21, 2013
    • 0 Attachment
      The final version I added to SearchParty:

      function! PrintWithHighlighting() range
        let lnum = a:firstline
        let lnum_len = len(line('$'))
        for line in getline(a:firstline, a:lastline)
          echohl LineNr
          echon printf("%*s ", lnum_len, lnum)
          echohl none
          let lnum += 1

          let ms = match(line, @/)
          let me = matchend(line, @/)
          while ms != -1
            echohl none
            echon strpart(line, 0, ms)
            echohl Search
            echon strpart(line, ms, me - ms)
            echohl none
            let line = strpart(line, me)
            let ms = match(line, @/)
            let me = matchend(line, @/)
          endwhile
          echon line . "\n"
        endfor
      endfunction

      command! -range P <line1>,<line2>call PrintWithHighlighting()



      On 22 March 2013 02:12, Axel Bender <axel.bender@...> wrote:
      Thanks all!

      Based on your input my final version (taking into account vim's number setting):

      command! -nargs=? P :call PrintHighlighted(<q-args>)

      function! PrintHighlighted(arg)
         echo ""

         if a:arg == "#" || &number
            let l:lnum = line(".")

            echohl LineNr
            echon " " . repeat(" ", len(line("$")) - strlen(l:lnum)) . l:lnum . " "
            echohl NONE
         endif

         let l:line = getline(".")
         let l:pos  = 0

         while 1
            let l:ms = match(l:line, @/, l:pos)

            if l:ms == -1
               echon strpart(l:line, l:pos)
               return
            endif

            echon strpart(l:line, l:pos, l:ms - l:pos)

            let l:me = matchend(l:line, @/, l:pos)

            echohl MarkerBlue
            echon strpart(l:line, l:ms, l:me - l:ms)
            echohl NONE

            if l:pos == l:me
               echon strpart(l:line, l:me)
               return
            endif

            let l:pos = l:me
         endwhile
      endfunction

      --
      --
      You received this message from the "vim_dev" 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

      ---
      You received this message because you are subscribed to a topic in the Google Groups "vim_dev" group.
      To unsubscribe from this topic, visit https://groups.google.com/d/topic/vim_dev/V2vGo2CcHqU/unsubscribe?hl=en.
      To unsubscribe from this group and all its topics, send an email to vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.



      --
      --
      You received this message from the "vim_dev" 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
       
      ---
      You received this message because you are subscribed to the Google Groups "vim_dev" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
       
       
    • Show all 13 messages in this topic