【问题标题】:Terminal Vim redraw issues in OS X LionOS X Lion 中的终端 Vim 重绘问题
【发布时间】:2011-08-07 00:43:20
【问题描述】:

最近从 MacVim 切换到标准 vim,这样我就可以强迫自己在 vim 中移动而无需 MacVim 包装器的帮助。自从这样做以来,我遇到了一些奇怪的重绘问题。我已经在 iTerm2 和 Lion 的标准终端中对此进行了测试。

当我编辑文件、打开 NERDTree 等时,最后一个窗口的片段出现在我当前的缓冲区中。有时“.. (up a dir)”会留在新缓冲区中。底部状态栏会自我复制。唯一似乎摆脱这种情况的方法是手动调用 ":redraw!"。

我制作了一个简短的视频来展示我在说什么,因为我的 Google-fu 没有产生任何结果。 Video Demo

这真的让我很烦。有人对可能导致此问题的原因有任何想法吗?

更新

我仔细检查了 Vim 和 iTerm2/Terminal 都设置为 UTF-8 进行字符编码。我什至在 iTerm2 中启用了这个设置:双宽字符:将不明确的字符视为双宽。

ECHO $TERM 输出(iTerm2 和标准终端相同)xterm-256color

:version 输出

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Aug  5 2011 10:58:31)
MacOS X (unix) version
Included patches: 1-260
Compiled by chris@nix
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_sysmouse +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 -isysroot /Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -arch x86_64 -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.       -Wl,-syslibroot,/Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -arch x86_64 -L/usr/local/lib -o Vim -framework Cocoa -framework Carbon      -lncurses -liconv -framework Cocoa    -fstack-protector -L
/usr/local/lib  -L/System/Library/Perl/5.12/darwin-thread-multi-2level/CORE -lperl -lm -lutil -lc -framework Python  -F/System/Library/Frameworks -framework Tcl -framework CoreFoundation -lruby.1.9.1 -lobjc -L/Users/chris/.rvm/rubies/ruby
-1.9.2-p290/lib

更多更新 更新状态行似乎没有任何改变。仍然吓坏了并且有同样的问题。还有其他想法吗?

【问题讨论】:

  • 快速重绘的方法也是Ctrl+L。
  • 能否提供:version:echo $TERM的输出?
  • 当您的状态行具有默认格式时,是否会出现问题? (尝试通过set stl=重置它。)

标签: macos vim osx-lion


【解决方案1】:

如果 vim 和您的终端不同意所使用的字符编码,有时会发生这种情况。例如,如果 vim 想要使用多字节 UTF-8 序列来绘制一个字符,而您的终端不太理解这一点并绘制了 两个 字符,那么 vim 和您的终端不同意最终的位置光标。这可能会导致各种错误绘制的屏幕元素。

在 vim 中使用 :set encoding 命令设置与您的终端设置使用的任何内容一致的编码。

【讨论】:

    【解决方案2】:

    看来我终于弄明白了。似乎是 Lion 和我的 MBP 的硬件/驱动程序问题。 Lion 10.7.1 发布后,问题已经消失。我对背景颜色有点奇怪,但是一旦我将终端 bg 颜色与我的 vim 配色方案相匹配,一切都变得很漂亮。感谢大家的建议。

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2012-08-02
      相关资源
      最近更新 更多