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

Bug with matchadd() highlighting?

Expand Messages
  • John Szakmeister
    I ve been using Syntastic lately, and I noticed an interesting quirk. Syntastic will highlight the location of the error in your buffer by calling matchadd()
    Message 1 of 6 , Feb 22, 2013
    • 0 Attachment
      I've been using Syntastic lately, and I noticed an interesting quirk.
      Syntastic will highlight the location of the error in your buffer by
      calling matchadd() providing the line and column number to highlight
      in the pattern. What I noticed is that if I start editing the file
      above the error location, then hit enter a couple of times, then Vim
      would not only highlight the new location of the line, but the old one
      as well.

      After spending some time chasing it down, I believe it may be a Vim
      bug. Here are the steps to reproduce it:

      cat > file.txt <<HERE
      line a
      line b
      line c
      line d
      HERE

      # set colorscheme however you like, just as long as there
      # is an 'Error' highlight group.
      vim -u NONE -U NONE -c 'set nocp' -c 'colorscheme elflord' file.txt \
      -c "call matchadd('Error', '\%3l\%1c')"

      When Vim starts up, you should see line 3 (the one that reads "line
      c") have it's first character highlighted. Go to insert mode, and hit
      enter twice. Now lines 3 and 5 have their first character highlighted
      ("line a" and "line c"). Also note, there's a pattern. If instead I
      do this:

      cat > file.txt <<HERE
      line a
      line b
      line c
      line d
      line e
      line f
      line g
      line h
      line i
      line j
      HERE

      vim -u NONE -U NONE -c 'set nocp' -c 'colorscheme elflord' file.txt \
      -c "call matchadd('Error', '\%9l\%1c')"

      Then I need to hit enter 8 times before the error shows up. I'm using
      MacVim, but I've recently updated:

      VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 8 2013 21:32:33)
      MacOS X (unix) version
      Included patches: 1-806
      Compiled by john@...
      Huge version with MacVim GUI. Features included (+) or not (-):
      +arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent
      +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
      +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff
      +digraphs +dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi
      +file_in_path +find_in_path +float +folding -footer +fork() +fullscreen
      -gettext -hangul_input +iconv +insert_expand +jumplist +keymap +langmap
      +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession
      +modify_fname +mouse +mouseshape +mouse_dec -mouse_gpm -mouse_jsbterm
      +mouse_netterm +mouse_sgr -mouse_sysmouse +mouse_urxvt +mouse_xterm +multi_byte
      +multi_lang -mzscheme +netbeans_intg +odbeditor +path_extra +perl
      +persistent_undo +postscript +printer +profile +python -python3 +quickfix
      +reltime +rightleft +ruby +scrollbind +signs +smartindent -sniff +startuptime
      +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white
      +tcl +terminfo +termresponse +textobjects +title +toolbar +transparency
      +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace
      +wildignore +wildmenu +windows +writebackup -X11 -xfontset +xim -xsmp
      -xterm_clipboard -xterm_save
      system vimrc file: "$VIM/vimrc"
      user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
      system gvimrc file: "$VIM/gvimrc"
      user gvimrc file: "$HOME/.gvimrc"
      system menu file: "$VIMRUNTIME/menu.vim"
      fall-back for $VIM: "/Applications/MacVim.app/Contents/Resources/vim"
      Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM
      -Wall -Wno-unknown-pragmas -pipe -DMACOS_X_UNIX -no-cpp-precomp -g
      -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
      -I/System/Library/Frameworks/Tcl.framework/Headers -D_REENTRANT=1
      -D_THREAD_SAFE=1 -D_DARWIN_C_SOURCE=1
      Linking: gcc -L. -L. -L/usr/local/lib -o Vim -framework
      Cocoa -framework Carbon -lncurses -liconv -framework Cocoa
      -L/usr/local/lib
      -L/System/Library/Perl/5.10.0/darwin-thread-multi-2level/CORE -lperl
      -lm -lutil -lc -framework Python -F/System/Library/Frameworks
      -framework Tcl -framework CoreFoundation -framework Ruby

      Thank you!

      -John

      --
      --
      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 John! ... Looks like a redrawing problem. I think, the screen is not correctly updated, but when doing Ctrl-L it does instead update correctly. Mit
      Message 2 of 6 , Feb 22, 2013
      • 0 Attachment
        Hi John!

        On Fr, 22 Feb 2013, John Szakmeister wrote:

        > I've been using Syntastic lately, and I noticed an interesting quirk.
        > Syntastic will highlight the location of the error in your buffer by
        > calling matchadd() providing the line and column number to highlight
        > in the pattern. What I noticed is that if I start editing the file
        > above the error location, then hit enter a couple of times, then Vim
        > would not only highlight the new location of the line, but the old one
        > as well.
        >
        > After spending some time chasing it down, I believe it may be a Vim
        > bug. Here are the steps to reproduce it:
        >
        > cat > file.txt <<HERE
        > line a
        > line b
        > line c
        > line d
        > HERE
        >
        > # set colorscheme however you like, just as long as there
        > # is an 'Error' highlight group.
        > vim -u NONE -U NONE -c 'set nocp' -c 'colorscheme elflord' file.txt \
        > -c "call matchadd('Error', '\%3l\%1c')"

        Looks like a redrawing problem. I think, the screen is not correctly
        updated, but when doing Ctrl-L it does instead update correctly.


        Mit freundlichen Grüßen
        Christian
        --
        In jedem großen Problem steckt ein kleines, das gerne raus möchte.
        In jedem kleinen Problem steckt ein großes, das gerne raus möchte.

        --
        --
        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.
      • John Szakmeister
        On Fri, Feb 22, 2013 at 3:57 PM, Christian Brabandt wrote: [snip] ... It sure does. Using Ctrl-L, I see that it s all redrawn fine. -John
        Message 3 of 6 , Feb 24, 2013
        • 0 Attachment
          On Fri, Feb 22, 2013 at 3:57 PM, Christian Brabandt <cblists@...> wrote:
          [snip]
          > Looks like a redrawing problem. I think, the screen is not correctly
          > updated, but when doing Ctrl-L it does instead update correctly.

          It sure does. Using Ctrl-L, I see that it's all redrawn fine.

          -John

          --
          --
          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.
        • John Szakmeister
          On Fri, Feb 22, 2013 at 3:57 PM, Christian Brabandt wrote: [snip] ... Is the next step to file a bug report? Sorry for the silly
          Message 4 of 6 , Feb 26, 2013
          • 0 Attachment
            On Fri, Feb 22, 2013 at 3:57 PM, Christian Brabandt <cblists@...> wrote:
            [snip]
            >> # set colorscheme however you like, just as long as there
            >> # is an 'Error' highlight group.
            >> vim -u NONE -U NONE -c 'set nocp' -c 'colorscheme elflord' file.txt \
            >> -c "call matchadd('Error', '\%3l\%1c')"
            >
            > Looks like a redrawing problem. I think, the screen is not correctly
            > updated, but when doing Ctrl-L it does instead update correctly.

            Is the next step to file a bug report? Sorry for the silly question,
            but I'm still learning Vim's organization and community.

            Thanks!

            -John

            --
            --
            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 John! ... It is probably in Bram s todo list already, but he hasn t pushed the runtime files yet to the public repository (at
            Message 5 of 6 , Feb 26, 2013
            • 0 Attachment
              Hi John!

              On Di, 26 Feb 2013, John Szakmeister wrote:

              > On Fri, Feb 22, 2013 at 3:57 PM, Christian Brabandt <cblists@...> wrote:
              > [snip]
              > >> # set colorscheme however you like, just as long as there
              > >> # is an 'Error' highlight group.
              > >> vim -u NONE -U NONE -c 'set nocp' -c 'colorscheme elflord' file.txt \
              > >> -c "call matchadd('Error', '\%3l\%1c')"
              > >
              > > Looks like a redrawing problem. I think, the screen is not correctly
              > > updated, but when doing Ctrl-L it does instead update correctly.
              >
              > Is the next step to file a bug report? Sorry for the silly question,
              > but I'm still learning Vim's organization and community.

              It is probably in Bram's todo list already, but he hasn't pushed the
              runtime files yet to the public repository (at
              http://code.google.com/p/vim/source/browse/#hg%2Fruntime)

              If he does and you have updated your runtime files, you'll find it
              somewhere in :h todo.txt (but don't expect a fix soon, the list is
              huge).

              regards,
              Christian
              --
              Wie man sein Kind nicht nennen sollte:
              Jo Del

              --
              --
              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
              ... This patch fixes it, but is probably wrong, since it makes screen redrawing much slower. diff --git a/src/screen.c b/src/screen.c ... +++ b/src/screen.c @@
              Message 6 of 6 , Feb 26, 2013
              • 0 Attachment
                On Di, 26 Feb 2013, Christian Brabandt wrote:

                > Hi John!
                >
                > On Di, 26 Feb 2013, John Szakmeister wrote:
                >
                > > On Fri, Feb 22, 2013 at 3:57 PM, Christian Brabandt <cblists@...> wrote:
                > > [snip]
                > > >> # set colorscheme however you like, just as long as there
                > > >> # is an 'Error' highlight group.
                > > >> vim -u NONE -U NONE -c 'set nocp' -c 'colorscheme elflord' file.txt \
                > > >> -c "call matchadd('Error', '\%3l\%1c')"
                > > >
                > > > Looks like a redrawing problem. I think, the screen is not correctly
                > > > updated, but when doing Ctrl-L it does instead update correctly.
                > >
                > > Is the next step to file a bug report? Sorry for the silly question,
                > > but I'm still learning Vim's organization and community.
                >
                > It is probably in Bram's todo list already, but he hasn't pushed the
                > runtime files yet to the public repository (at
                > http://code.google.com/p/vim/source/browse/#hg%2Fruntime)
                >
                > If he does and you have updated your runtime files, you'll find it
                > somewhere in :h todo.txt (but don't expect a fix soon, the list is
                > huge).

                This patch fixes it, but is probably wrong, since it makes screen
                redrawing much slower.

                diff --git a/src/screen.c b/src/screen.c
                --- a/src/screen.c
                +++ b/src/screen.c
                @@ -1623,6 +1623,9 @@
                #endif
                || idx >= wp->w_lines_valid
                || (row + wp->w_lines[idx].wl_size > bot_start)
                +#ifdef FEAT_SEARCH_EXTRA
                + || wp->w_match_head != NULL /* match list might need to be redrawn */
                +#endif
                || (mod_top != 0
                && (lnum == mod_top
                || (lnum >= mod_top


                regards,
                Christian
                --
                Die Dunkelheit gewisser Maximen ist nur relativ. Nicht alles
                ist dem Hörenden deutlich zu machen, was dem Ausübenden einleuchtet.
                -- Goethe, Maximen und Reflektionen, Nr. 1121

                --
                --
                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.