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

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

Expand Messages
  • Axel Bender
    Thanks all! Based on your input my final version (taking into account vim s number setting): command! -nargs=? P :call PrintHighlighted( ) function!
    Message 1 of 13 , Mar 21, 2013
    • 0 Attachment
      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 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
      The final version I added to SearchParty: function! PrintWithHighlighting() range let lnum = a:firstline let lnum_len = len(line( $ )) for line in
      Message 2 of 13 , 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.
         
         
      • 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 3 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 4 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 5 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 6 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.