Vim启动时间非常长

56

自从上次注销并重新登录后,我发现vim和其他无关程序的启动时间非常缓慢。以下是vim的启动时间日志:

> times in msec  clock   self+sourced   self:  sourced script  clock  
> elapsed:              other lines
> 
> 000.005  000.005: --- VIM STARTING ---
> 000.073  000.068: Allocated generic buffers
> 000.168  000.095: locale set
> 000.180  000.012: GUI prepared
> 000.181  000.001: clipboard setup
> 000.188  000.007: window checked
> 000.621  000.433: inits 1
> 000.626  000.005: parsing arguments
> 000.627  000.001: expanding arguments
> 000.637  000.010: shell init
> 000.909  000.272: Termcap init
> 000.942  000.033: inits 2
> 001.031  000.089: init highlight
> 023.418  000.234  000.234: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/syncolor.vim
> 023.543  001.811  001.577: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/synload.vim
> 044.397  015.231  015.231: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/filetype.vim
> 044.449  025.111  008.069: sourcing /grid/common/pkgs/vim/latest/share/vim/vim73/syntax/syntax.vim
> 052.532  000.199  000.199: sourcing /grid/common/pkgsData/vim-v7.3/Linux/RHEL4.0-2007-x86_64/share/vim/vim73/syntax/nosyntax.vim
> 059.858  000.175  000.175: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/syncolor.vim
> 059.966  003.842  003.667: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/synload.vim
> 060.002  010.259  006.218: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/syntax.vim
> 069.085  000.178  000.178: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/syncolor.vim
> 072.326  000.173  000.173: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/syncolor.vim
> 076.317  000.175  000.175: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/syntax/syncolor.vim
> 076.477  013.311  012.785: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/colors/desert.vim
> 079.768  000.019  000.019: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/filetype.vim
> 080.322  065.921  017.221: sourcing $HOME/.vimrc
> 080.330  013.378: sourcing vimrc file(s)
> 106.526  000.376  000.376: sourcing /home/haitham/.vim/plugin/genutils.vim
> 111.139  001.435  001.435: sourcing /home/haitham/.vim/plugin/multiselect.vim
> 113.534  000.147  000.147: sourcing /home/haitham/.vim/plugin/omap-param.vim
> 119.245  000.073  000.073: sourcing /home/haitham/.vim/plugin/qfixtoggle.vim
> 122.821  000.696  000.696: sourcing /home/haitham/.vim/plugin/surround.vim
> 172.247  000.098  000.098: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/getscriptPlugin.vim
> 176.387  000.252  000.252: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/gzip.vim
> 179.876  000.183  000.183: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/matchparen.vim
> 182.748  000.620  000.620: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/netrwPlugin.vim
> 186.171  000.051  000.051: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/rrhelper.vim
> 189.739  000.046  000.046: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/spellfile.vim
> 193.406  000.195  000.195: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/tarPlugin.vim
> 199.206  000.060  000.060: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/tohtml.vim
> 202.299  000.152  000.152: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/vimballPlugin.vim
> 205.345  000.147  000.147: sourcing /grid/common/pkgs/vim/v7.3/share/vim/vim73/plugin/zipPlugin.vim
> 205.394  120.533: loading plugins
> 12343.581  12138.187: inits 3
> 12349.592  006.011: reading viminfo
> 18421.239  6071.647: setup clipboard
> 18421.264  000.025: setting raw mode
> 18421.270  000.006: start termcap
> 18421.293  000.023: clearing screen
> 18421.504  000.211: opening buffers
> 18421.564  000.060: BufEnter autocommands
> 18421.566  000.002: editing files in windows
> 18425.833  004.267: VimEnter autocommands
> 18425.835  000.002: before starting main loop
> 18426.587  000.752: first screen update
> 18428.334  001.747: --- VIM STARTED ---

显然,最重要的组件是“inits 3”和“setup clipboard”。

有什么线索可以解决这个问题吗?


3
看起来实际上是在“inits 3”和“setup clipboard”之前的那些缓慢部分。在“loading plugins”后面有一个大的时间跳跃。使用“vim -u”启动Vim,以查看是否更快。逐个禁用插件,直到找到问题所在。 - gpojd
3
尝试 这个链接 可以获得更精确的性能分析。 - romainl
@MichaelBerkowski viminfo='100,<50,s10,h - Haitham Gad
4
其他程序启动需要很长时间,这表明vim并没有任何关系。诊断电脑整体速度缓慢的原因并不容易,也不存在单一的Stack Overflow问题能够解决这个问题的范围之内。 - Jim Stewart
2
让我这样说吧:vim启动时间中的“inits 3”和“setup clipboard”组件是什么意思?这更像是一个vim问题。 - Haitham Gad
显示剩余5条评论
2个回答

124

设置剪贴板

首先尝试使用以下命令运行Vim:

$ vim -X

你可以尝试使用-X --startuptime <file>选项来检查"setup clipboard"组件是否仍然很慢。

如果-X有帮助的话,你可以在你的vimrc文件中添加以下行来达到相同的效果:

set clipboard=exclude:.*

解释

如果这有所帮助,正在启动 Vim 时它会尝试连接到 X 服务器以允许其使用剪贴板。选项-X 告诉 Vim 不要尝试连接到 X 服务器。查看 :help -X 获取更多信息。

-X          Do not try connecting to the X server to get the current
            window title and copy/paste using the X clipboard.  This
            avoids a long startup time when running Vim in a terminal
            emulator and the connection to the X server is slow.
            See --startuptime to find out if affects you.
            Only makes a difference on Unix or VMS, when compiled with the
            +X11 feature.  Otherwise it's ignored.
            To disable the connection only for specific terminals, see the
            'clipboard' option.
            When the X11 Session Management Protocol (XSMP) handler has
            been built in, the -X option also disables that connection as
            it, too, may have undesirable delays.

通过您的 vimrc 文件,可以使用剪贴板选项更持久地实现同样的事情。请查看::help 'clipboard'

  

为了永远不连接到 X 服务器,请使用:          exclude:.*   这与使用 -X 参数具有相同效果。   请注意,当没有连接到 X 服务器时,   窗口标题不会被恢复,无法访问剪贴板。

如果您希望在某些情况下让Vim连接到X服务器,则可以将clipboard=exclude:.*选项细化为仅适用于特定终端。有关更多信息,请查看:help 'clipboard'

对我来说,这个问题是因为我在ssh客户端上启用了“X11转发”,但并不总是在ssh客户端机器上运行X Server所导致的。

当我在目标机器上运行X服务器时,Vim启动得快得多(尽管仍然有点慢)。

在这种设置中,我想保持X11转发,但不需要Vim使用X剪贴板,因此我在我的vimrc中添加了set clipboard=exclude:.*行。现在,Vim的启动对我来说又快了。

inits 3

您似乎已经通过尝试vim -u NONE(并且您说您的vimrc为空)消除了插件/自定义作为可能原因的可能性。

我不熟悉这个问题,但如上所建议,它可能与您的viminfo文件有关。

您可以使用以下命令启动Vim,以确定是否是这种情况:

$ vim -i NONE

根据:help slow-start:

如果启用了"viminfo",加载viminfo文件可能需要一段时间。您可以通过暂时禁用viminfo(使用Vim参数"-i NONE")来查看是否存在此问题。尝试通过":set viminfo='20,<50,s10'"减少存储在寄存器中的行数。


1
当我在运行一个终端时,遇到了剪贴板问题,这个终端是在运行ClipX的Windows环境中托管的,ClipX是一个具有大量历史记录的剪贴板管理器。现在我怀疑我的vim启动时间与剪贴板历史记录的大小和内容成正比。 - J.Churchill
1
另外一个问题:我偶尔使用X11剪贴板寄存器;您知道有没有一种方法可以增加初始化X11连接的速度,而不是完全避免它? - Paul Brannan
需要注意的是,将剪贴板中的内容替换掉解决了这个问题。我相信这是因为我复制了一个非常大的文本文件。 - Noah Passalacqua
1
有趣的是,在我的情况下,在我的 .vimrc 文件开头添加 set clipboard=exclude:.* 并没有改变启动时间。使用 -X 参数启动 vim 大约可以提高一秒钟的速度。我怀疑某个插件正在更改我的剪贴板设置,而设置命令行选项会覆盖 vimscript 的更改。 - dhasenan
1
在将 set clip... 添加到您的 .vimrc 文件后,请关闭终端并重新登录。 - Siwei
显示剩余3条评论

3
我使用的是v7.4版本。 使用-X选项可以成功地增加启动时间(当vim编译时带有+clipboard选项时)。但是,由于现在已禁用与X的连接,我们无法再从x剪贴板复制和粘贴。同时,vim是我写电子邮件、推特、telegram等的唯一方式,所以从vim中进行复制和粘贴是必要的。刚刚发现了一个简单的解决方案:
alias v='nvim'
Nvim会自动使用我的旧.vimrc文件,无需任何配置麻烦即可无缝地使用剪贴板功能。我不是在教唆大家使用nvim,只是发现它是目前解决我的问题最简单的方法。

3
也许将SESSION_MANAGER重置为空会对您有用?这对我保留了复制/粘贴功能,同时消除了延迟。 - Klaas van Schelven

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