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

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

Expand Messages
  • Choi, Jin-yong
    How about using :grep when searching through the entire file? function! Grep(pattern) exe grep . a:pattern let @/ = substitute(a:pattern, / (.* )/.*$ ,
    Message 1 of 13 , Mar 21, 2013
    • 0 Attachment

      How about using ‘:grep’ when searching through the entire file?

       

       

      function! Grep(pattern)

          exe 'grep ' . a:pattern

          let @/ = substitute(a:pattern, '/\(.*\)/.*$', '\1', '')

          copen

      endfunction

      command! -nargs=+   Grep    call Grep(<q-args>) | set hls

       

      cnoreabbrev   grep    Grep<Space>//<Space>%<C-Left><C-Left><Right><C-r>=Eatchar('\s')<CR>

       

      (for Eatchar(), :helpgrep Eatchar )

       

       

      I prefer Quickfix list more than ‘:print’ output. Just personal preference :)

       

       

      From: vim_dev@... [mailto:vim_dev@...] On Behalf Of Barry Arthur
      Sent: Friday, March 22, 2013 6:54 AM
      To: vim_dev@...
      Subject: Re: Suggestion: Highlight the search pattern in :g/.../# or :g/.../p

       

      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.
       
       

      --
      --
      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.
       
       
    • Christian Brabandt
      Hi Barry! ... I think, you might be getting problems, if your pattern match is zero-width, e.g. searching for :g/^/P might not work correctly. regards,
      Message 2 of 13 , Mar 22, 2013
      • 0 Attachment
        Hi Barry!

        On Fr, 22 Mär 2013, Barry Arthur wrote:

        > 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()

        I think, you might be getting problems, if your pattern match is
        zero-width, e.g. searching for :g/^/P might not work correctly.

        regards,
        Christian
        --

        --
        --
        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.
      • Barry Arthur
        Ooops! Good catch. I think this fixes it: diff --git a/plugin/SearchParty.vim b/plugin/SearchParty.vim index 373ffd3..2b194f7 100644 ... +++
        Message 3 of 13 , Mar 22, 2013
        • 0 Attachment
          Ooops! Good catch. I think this fixes it:

          diff --git a/plugin/SearchParty.vim b/plugin/SearchParty.vim
          index 373ffd3..2b194f7 100644
          --- a/plugin/SearchParty.vim
          +++ b/plugin/SearchParty.vim
          @@ -282,7 +282,7 @@ function! PrintWithHighlighting() range
           
               let ms = match(line, @/)
               let me = matchend(line, @/)
          -    while ms != -1
          +    while ms != -1 && ms != me
                 echohl none
                 echon strpart(line, 0, ms)
                 echohl Search



          On 22 March 2013 15:03, Christian Brabandt <cblists@...> wrote:
          Hi Barry!

          On Fr, 22 Mär 2013, Barry Arthur wrote:

          > 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()

          I think, you might be getting problems, if your pattern match is
          zero-width, e.g. searching for :g/^/P might not work correctly.

          regards,
          Christian
          --

          --
          --
          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.
           
           
        • Choi, Jin-yong
          ... to ... for ... First of all, I apologize for violating the mailing rule. I think my previous e-mail is somehow strange-looking unlike others . But I
          Message 4 of 13 , Mar 22, 2013
          • 0 Attachment
            On March 21, 2013 6:52 PM, Axel Bender wrote:

            > How about implementing a highlighting of the pattern searched for in
            :g/.../
            > expressions? At times the resulting list is quite long and it is difficult
            to
            > identify the pattern. Highlighting it would be of great benefit (at least
            for
            > me...).


            First of all, I apologize for violating the "mailing rule."
            I think my previous e-mail is somehow strange-looking unlike others'. But I
            didn't recognize the problem. Sorry for the confusion.


            I want to suggest to use ':grep' for searching the text and highlighting
            them.
            Maybe ':grep' is not in your interest. But it could make something more
            convenient cause we can get the result in Quickfix list.

            Here is the code. Tested only on Windows platform and vim version is
            currently 7.3.875.

            function! Grep(pattern)
            exe 'grep ' . a:pattern
            let @/ = substitute(a:pattern, '/\(.*\)/.*$', '\1', '')
            copen
            endfunction
            command! -nargs=+ Grep call Grep(<q-args>) | set hls

            cnoreabbrev grep
            Grep<Space>//<Space>%<C-Left><C-Left><Right><C-r>=Eatchar('\s')<CR>


            for Eatchar(), :helpgrep Eatchar


            --
            --
            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.
          Your message has been successfully submitted and would be delivered to recipients shortly.