在Mac的屏幕中,哪个默认设置会使Vim变得非常缓慢?

3
尽管我接受了一个答案,但问题并未解决。
问题:在 Mac 的 Screen 中,尽管 lazyredraw 和 showcmd 已关闭,Vim 屏幕更新非常缓慢。
以下是英文原文的翻译:

例如,当我有行号时,它们会出现在foldColumn上,如下所示:

alt text http://dl.getdropbox.com/u/175564/vimScreenFold.png

当我的.vimrc文件中没有任何内容时,问题可以通过在彼此上面添加多行注释来看到:

alt text http://dl.getdropbox.com/u/175564/vimScatteredBug.png

我在左侧没有输入以下注释超过一次。

"set list...

观察结果

  1. 似乎仅出现在注释行和空行中。但是,我有(2)的证据表明这并非如此。
  2. 散布主要发生在左侧窗口。它们也会在单个窗口中出现。但是,用单个窗口更难检测到。
  3. 当我没有任何内容在 .vimrc 中时,该错误会稍微不同。然而,“停滞”情况在两种情况下都会发生:空的 .vimrc 和非空的 .vimrc。

识别 Bug

依赖变量

依赖于Vim自动放置的注释符号。当Vim自动在文件中放置Python的注释符号#,但无法显示整个文件时,我注意到了消失的像素。
至少需要OS/X Leopard的支持。 独立变量
  1. 与文件无关:发生在所有由Vim编辑的文件中。
  2. 与行无关:出现在没有注释和空行的Python代码中。
  3. 与 .vimrc 无关:在空的 .vimrc 中出现。
  4. 与 .screenrc 无关:在空的 .screenrc 中出现。
  5. 与 shell 无关:在Bash和Zsh中出现。
  6. 与 Screen 版本无关:在Leopard默认屏幕和Screen 4.0.3中出现。
  7. 与不同的注释字符无关:例如,在向下滚动 .zshrc、.vimrc 和 .screenrc 时出现。

如何禁用Vim的默认设置


你使用的是什么操作系统?你使用的是哪个Shell?等等... - hasen
@hasen:我使用的是Mac Leopard和Zsh。 - Léo Léopold Hertz 준영
@LB:您的意思是说,这个错误是否出现在具有不同编码和语法高亮的不同文件中?如果是这样,那么这个错误似乎与语言无关,因为当滚动 .screenrc、.vimrc 和 .zshrc 时都会出现这个错误。 - Léo Léopold Hertz 준영
我一点头绪也没有...我无法重现这个错误,虽然我正在使用 screen 和 vi.... - LB40
1
如果涉及到vi,你能打印出vim --version吗? - LB40
显示剩余2条评论
8个回答

3
我猜想问题可能出在你的termcap和terminfo设置上。尝试在screenrc中将它们注释掉,然后重新启动screen。
另外,你使用的是哪个(非虚拟)终端?
啊,看起来你正在使用OSX的Terminal.app,这正是我使用的(与screen/zsh/vim一起)。/usr/bin/screen应该默认使用空的.screenrc和.vimrc与/usr/bin/vim配合工作。
% touch empty_screenrc
% cat empty_screerc
% /usr/bin/screen -c empty_screenrc
#...and within screen
% /usr/bin/vim -u NONE

如果问题仍然存在,可能是您的shell出了问题。但如果这解决了问题,我建议您发布您的~/.vimrc以便进一步诊断。

我已将这些行注释掉,但问题仍然存在。我的非虚拟终端显然是xTerm-color:http://dl.getdropbox.com/u/175564/terminalMode.png。 - Léo Léopold Hertz 준영

2

我认为OS X默认版本的screen不支持256种颜色。你可以在你的.vimrc文件中设置vim使用较少数量的颜色:

set t_Co=16

在Mac OS X上,您可以重新构建屏幕以使用256种颜色,请参见此处:http://pjkh.com/articles/2008/07/09/osx-iterm-screen-vim-256-colors
以下是简要说明:
重新构建屏幕,确保包括256种颜色选项。
./configure --enable-colors256

然后您需要将以下内容添加到您的~/.screenrc文件中:
# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
# erase background with current bg color
defbce "on"

源代码


好的建议,但它并没有解决问题,即使在iTerm中也是如此。我正确设置了路径并安装了最新的推荐版本Screen,并启用了256色支持。 - Léo Léopold Hertz 준영
散乱的窗口仍然像以前一样出现。 - Léo Léopold Hertz 준영
将vim更改为使用少于256种颜色有何影响?这样做有什么区别吗? - Doug
@Doug:没有区别。同样的问题仍然存在。 - Léo Léopold Hertz 준영

2

我曾遇到过类似的问题(终端运行极慢),后来发现是因为在Terminal.App和ITerm中使用了Consolas字体。在我的情况下,将字体切换为Monaco后速度明显提升。


2
我没有插件,也没有在 .vimrc 和 .screenrc 中设置任何内容。问题仍然存在。 错误的识别
  1. 与文件无关: 在所有由 Vim 编辑的文件中都会出现该问题
"停滞" 现象似乎主要发生在注释行和空白行中。但是,该 bug 也会在没有注释和空白行的情况下出现,但其影响似乎小得多。 观察结果2的图片 alt text http://dl.getdropbox.com/u/175564/cruxMoveInVimScattered.png

1

我曾经遇到过类似的问题,与irssi和bash有关,这是由于颜色代码没有正确关闭所导致的。

你尝试过不同的vim主题(特别是默认主题),或者运行:syntax off吗?


谢谢您的回答,但是即使使用“syntax off”,仍然存在相同的问题。我始终使用默认主题,因此这不是问题所在。--- 我已经注意到,问题显然不仅仅是由Vim引起的。问题似乎主要是由Screen或Mac的Terminal.app引起的。 - Léo Léopold Hertz 준영

1

关键点:这个错误似乎是由于Vim的一些默认选项引起的。

我现在使用我的默认配置文件.vimrc和.screenrc,因为我观察到它们不会引起这个错误。

这个错误似乎稍微与注释和空行有关。我已经找到了证据。

我的Python代码中没有注释和空行。然而,我注意到当Vim无法显示完整的行时,它会在我的代码中放置注释标记。例如,请注意Vim放置的三个#标记。

这导致了像素消失。

alt text http://dl.getdropbox.com/u/175564/pythonBug.png


当我无法看到Vim自动放置的注释符号时,错误似乎发生在同一文件中。

alt text http://dl.getdropbox.com/u/175564/counterExample.png

我特意复制了图片代码,以便您可以清楚地看到消失的像素。

我曾经注意到,在玩Python代码时,当我向代码中添加一个空行后,“停滞”现象会大大发生。但是,我还没有成功地复制该事件。


通过 .vimrc 未能成功解决 bug 的尝试

  1. 禁用 Vim 自动设置的注释符号

    set formatoptions-=c


1

看起来与 OS X 的换行模式相关的一些已知问题,可以参见编号 1. 这里。它提供了一个解决方法。


@Todd:感谢您指出这一点!似乎Vim和MacVim中也存在同样的错误。-- 问题中的错误不在列表中。 - Léo Léopold Hertz 준영

0

调试:

有人建议我通过冻结终端来防止其他应用程序的更改影响我的调试工作。

ttyctl -f

然而,它似乎没有解决问题。 尽管如此,这可能有助于我们找到错误,因为现在我们没有其他应用程序改变情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接