I'm using the SpaceHi plugin to highlight spaces at the end of lines
and tabs anywhere in my files.  As far as I can tell, this plugin just
enables two syntax rules:

    syntax match spacehiTab /\t/ containedin=ALL
    syntax match spacehiTrailingSpace /\s\+$/ containedin=ALL

I've found that when I have these syntax rules enabled, Vim
occasionally gets into a state where it scrolls very slowly.  That is,
ctrl+e will lock up Vim and spin my CPU for a second or two.  When I
disable these syntax rules, Vim is responsive once again, and when I
re-enable the rules, Vim again becomes unresponsive.

It might be my imagination, but I think I hit this problem only when
I've had Vim open for a long time (at least a few hours, maybe a few
days).  Scrolling is only slow in files which have tabs or trailing
whitespace, but as far as I can tell, I don't have the same problem
after I restart Vim and open the same files.  The files are entirely
ASCII, and I've encountered this problem with both large (10k line)
and small (100 line) files.  They've mostly been C/C++ files, although
I believe I encountered the problem with a plain-text file once.

I caught this behavior inside perf, but unfortunately my Vim was
compiled without debugging symbols, so I didn't get a useful trace.
I've since compiled version 7.3.112 from hg with debugging symbols,
but I haven't been able to reproduce the problem with either binary
since.

I was able to reproduce something which seemed similar to the problem
above by creating a line with about 1000 trailing space characters.
(Of course when I actually encounter this problem, it's on less
pathological files.)  I've attached the perf report below.  This is at
least superficially similar to the perf report I got when I profiled
my system's vim -- it has two Vim routines, followed by two libc
routines, followed by more vim routines.

It seems to me that Vim should have no trouble matching 1000 spaces at
the end of a line.  Seeing as I can't reproduce on command the issue I
care about, I was hoping to at least get some help with the file with
the trailing spaces.  Perhaps the solution is as simple as tweaking
the syntax rules.

I'd really appreciate any help with this.

Regards,
-Justin

-----

$ uname -a
Linux jlebar-laptop 2.6.35-25-generic #44-Ubuntu SMP Fri Jan 21
17:40:44 UTC 2011 x86_64 GNU/Linux

-----

~/vim/src$ hg sum
parent: 2694:fcea35e2a41f tip
 updated for version 7.3.112

Output of compiling vim with -g -O2 -fno-omit-frame-pointer, then running

$ perf record -g vim file-with-lots-of-spaces

and scrolling around, then running

$ perf report.

I find it awfully strange that utfc_ptr2len shows up as the hottest
function, considering how little it actually does when fed ASCII text.

    28.10%      vim  vim                   [.] utfc_ptr2len
                |
                --- utfc_ptr2len
                   |
                   |---11.10%-- regrepeat
                   |          regtry
                   |          vim_regexec_both
                   |          vim_regexec_multi
                   |          syn_regexec
                   |          syn_current_attr
                   |          get_syntax_attr
                   |          win_update
                   |          update_screen
                   |          ins_redraw
                   |          edit
                   |          invoke_edit
                   |          normal_cmd
                   |          main_loop
                   |          main
                   |          __libc_start_main
                   |
                   |--36.30%-- regtry
                   |          vim_regexec_both
                   |          vim_regexec_multi
                   |          syn_regexec
                   |          syn_current_attr
                   |          get_syntax_attr
                   |          win_update
                   |          update_screen
                   |          ins_redraw
                   |          edit
                   |          invoke_edit
                   |          normal_cmd
                   |          main_loop
                   |          main
                   |          __libc_start_main
                    --0.10%-- [...]

    23.93%      vim  vim                   [.] regrepeat
                |
                --- regrepeat
                   |
                   |--12.16%-- regtry
                   |          vim_regexec_both
                   |          vim_regexec_multi
                   |          syn_regexec
                   |          syn_current_attr
                   |          get_syntax_attr
                   |          win_update
                   |          update_screen
                   |          ins_redraw
                   |          edit
                   |          invoke_edit
                   |          normal_cmd
                   |          main_loop
                   |          main
                   |          __libc_start_main
                    --0.12%-- [...]

    21.96%      vim  libc-2.12.1.so        [.] 0x00000000086f4c
                |
                --- 0x7f0e136d5f8c

                | (snipped callers, all address only.)

     9.99%      vim  libc-2.12.1.so        [.] memset
                |
                --- memset
                    ga_grow
                    push_current_state
                    push_next_match
                    syn_current_attr
                    get_syntax_attr
                    win_update
                    update_screen
                    ins_redraw
                    edit
                    invoke_edit
                    normal_cmd
                    main_loop
                    main
                    __libc_start_main

     7.43%      vim  vim                   [.] syn_current_attr
                |
                --- syn_current_attr
                   |
                   |--99.87%-- get_syntax_attr
                   |          win_update
                   |          update_screen
                   |          ins_redraw
                   |          edit
                   |          invoke_edit
                   |          normal_cmd
                   |          main_loop
                   |          main
                   |          __libc_start_main
                    --0.13%-- [...]

----

Output of vim --version for system vim:

VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Sep 28 2010 11:02:36)
Included patches: 1-330
Compiled by buildd@
Huge version with GTK2-GNOME GUI.  Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
+cryptv +cscope +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() +gettext -hangul_input +iconv +insert_expand
+jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap
+menu +mksession +modify_fname +mouse +mouseshape +mouse_dec +mouse_gpm
-mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte
+multi_lang -mzscheme +netbeans_intg -osfiletype +path_extra +perl +postscript
+printer +profile +python +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 +user_commands +vertsplit +virtualedit +visual
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup
+X11 -xfontset +xim +xsmp_interact +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: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK
-pthread -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0
-I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/freetype2 -I/usr/include/libpng12   -DORBIT2=1 -pthread
-D_REENTRANT -I/usr/include/libgnomeui-2.0 -I/usr/include/libart-2.0
-I/usr/include/gconf/2 -I/usr/include/gnome-keyring-1
-I/usr/include/libgnome-2.0 -I/usr/include/libbonoboui-2.0
-I/usr/include/libgnomecanvas-2.0 -I/usr/include/gtk-2.0
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gnome-vfs-2.0
-I/usr/lib/gnome-vfs-2.0/include -I/usr/include/orbit-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
-I/usr/include/libbonobo-2.0 -I/usr/include/bonobo-activation-2.0
-I/usr/include/libxml2 -I/usr/include/pango-1.0
-I/usr/include/gail-1.0 -I/usr/include/freetype2
-I/usr/include/atk-1.0 -I/usr/lib/gtk-2.0/include -I/usr/include/cairo
-I/usr/include/gio-unix-2.0/ -I/usr/include/pixman-1
-I/usr/include/libpng12     -Wall -g -O2    -D_REENTRANT -D_GNU_SOURCE
-DDEBIAN  -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64  -I/usr/lib/perl/5.10/CORE
-I/usr/include/python2.6 -pthread -I/usr/include/tcl8.4
-D_REENTRANT=1  -D_THREAD_SAFE=1  -D_LARGEFILE64_SOURCE=1
-I/usr/lib/ruby/1.8/x86_64-linux
Linking: gcc   -L. -Wl,-Bsymbolic-functions -rdynamic
-Wl,-export-dynamic  -Wl,-E  -Wl,--as-needed -o vim   -pthread
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0
-lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpng12 -lpango-1.0
-lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt
-lglib-2.0     -lgnomeui-2 -lbonoboui-2 -lgnomevfs-2 -lgnomecanvas-2
-lgnome-2 -lpopt -lbonobo-2 -lbonobo-activation -lORBit-2 -lart_lgpl_2
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0
-lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype
-lfontconfig -lpng12 -lgconf-2 -lgmodule-2.0 -lgobject-2.0
-lgthread-2.0 -lrt -lglib-2.0   -lXt -lncurses -lselinux  -lacl -lgpm
-Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.10/CORE
-lperl -L/usr/lib/python2.6/config -lpython2.6 -lutil -Xlinker
-export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions -L/usr/lib -ltcl8.4
-lieee -lruby1.8 -lrt -lm

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

Reply via email to