gvim 重绘失败

gvim 重绘失败

我遇到了 gvim 的问题,屏幕重绘部分失败。很难解释,但当我打开一个文本文件并向下或向上翻页时,整个文本文件无法正确重绘。我必须先移动光标,然后它才能重绘。我这里有一个屏幕截图,因为它演示了这个问题: http://www.box.net/shared/l4m1vrffl0dhigi80huz

似乎问题仅限于 gvim,因为我运行的其他所有应用程序都运行正常,并且能够正确重绘。我很容易在 gvim 中重现此问题。控制台 vim 运行正常。这让我认为问题仅限于 gvim。

操作系统是 Arch linux 3.0,运行 nvidia 驱动程序,运行 Gnome3(无 compiz)。

uname 的输出

Linux cyclops 3.0-ARCH #1 SMP PREEMPT 2011 年 8 月 30 日星期二 07:32:23 UTC i686 Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz 正版英特尔 GNU/Linux

修改

lsmod | grep nvidia
nvidia              10225284  40 
agpgart                22096  1 nvidia
i2c_core               16625  2 nvidia,i2c_nforce2

gvim --version

gvim --version VIM - Vi IMproved 7.3(2010 年 8 月 15 日,编译于 2011 年 9 月 30 日 05:51:10) 包含的补丁:1-322 由 ArchLinux 编译的带有 GTK2 GUI 的大版本。包含的功能(+)或不包含的功能(-):+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() +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_sysmouse +mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg +path_extra +perl +persistent_undo +postscript +printer -profile +python/dyn +python3/dyn +quickfix +reltime +rightleft +ruby +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -t​​cl +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 系统 vimrc 文件:“/etc/vimrc” 用户 vimrc文件:“$HOME/.vimrc” 用户 exrc 文件:“$HOME/.exrc” 系统 gvimrc 文件:“/etc/gvimrc” 用户 gvimrc 文件:“$HOME/.gvimrc” 系统菜单文件:“$VIMRUNTIME/menu.vim” $VIM 的后备文件:“/usr/share/vim” 编译: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/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng14 -I/usr/local/include -march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=1链接:gcc -L。 -Wl,--hash-style=gnu -Wl,--as-needed -rdynamic -Wl,-export-dynamic -Wl,-E -Wl,-rpath,/usr/lib/perl5/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu -L/usr/local/lib -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 -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lelf -lnsl -lacl -lattr -lgpm -ldl -Wl,-E -Wl,-rpath,/usr/lib/perl5/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu -fstack-protector -L/usr/local/lib -L/usr/lib/perl5/core_perl/CORE -lperl -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc -lruby -lpthread -lrt -ldl -lcrypt -lm -L/usr/lib

答案1

我遇到了这个问题,可以通过启动 gvim 并使用该--sync选项来解决这个问题。这会使 X 调用异步。

(感谢 Christian Brabandt 评论中的链接为我指明了正确的方向。)

答案2

它有助于提供有关您的操作系统、视频卡等的信息。看起来像 GNOME3......?

我在使用 Compiz 作为窗口管理器并使用 NVIDIA 显卡运行 GVIM 和其他应用程序时遇到了类似的问题,通过转到“Compiz 配置设置管理器”>“解决方法”> 检查“Qt 窗口修复”解决了该问题。

不知道这或其他东西是否会对您的情况有所帮助,特别是当您使用 Mutter 而不是 Compiz 时。

答案3

除了自带的插件之外,您还在 Vim 中安装了哪些插件?

您的某个通常稳定的插件可能出现了小故障。是的,GTK 揭示了问题,但这可能不是问题本身。任何创建弹出窗口或临时创建迷你缓冲区或类似内容的东西。自动完成、片段……如果是额外的插件或功能,请尝试将其关闭,看看问题是否消失。

虽然我没有在您的电影中看到任何此类弹出窗口,但是插件可能正在创建其弹出窗口,意识到它实际上并不需要,然后清除弹出窗口,但随后不会重新绘制原来的内容。

进行全屏滚动不会重新绘制整个缓冲区。光标显然会强制缓冲区重新绘制相邻缓冲区。

当然,这可能是核心 GTK/GVim 问题(我认为 X 或 OpenGL 与此无关),但在我看来不太可能(尽管我不常用 Arch)。

如果您确实发现它是一个插件,您可能需要强制升级或降级版本(除了“损坏”版本之外的任何版本)。

答案4

值得一提的是,我通过安装 vim-gtk3 包并替换vim-gtk(Ubuntu)解决了这个问题。

注意!由于某种原因,当我安装软件包时,默认的 gvim 命令未映射到 vim-gtk3,因此我必须手动运行 update-alternatives,如下所示:

sudo update-alternatives --set gvim /usr/bin/vim.gtk3

非常感谢你在这个帖子中提示 GTK 可能是问题所在。即使使用 Google 也很难找到这个问题!  

相关内容