我遇到了 vim 启动缓慢的问题。我使用 flag--startuptime
进行调查,结果如下:
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.003 000.003: --- VIM STARTING ---
000.082 000.079: Allocated generic buffers
000.103 000.021: locale set
000.112 000.009: GUI prepared
000.115 000.003: clipboard setup
000.119 000.004: window checked
000.496 000.377: inits 1
000.513 000.017: parsing arguments
000.514 000.001: expanding arguments
000.527 000.013: shell init
1000.786 1000.259: xsmp init
1001.055 000.269: Termcap init
1001.108 000.053: inits 2
1001.315 000.207: init highlight
1001.702 000.298 000.298: sourcing /usr/share/vim/vim80/debian.vim
1002.839 000.950 000.950: sourcing /usr/share/vim/vim80/syntax/syncolor.vim
1002.954 001.139 000.189: sourcing /usr/share/vim/vim80/syntax/synload.vim
1013.304 000.029 000.029: sourcing /home/daniel/.vim/ftdetect/tree.vim
1013.520 010.526 010.497: sourcing /usr/share/vim/vim80/filetype.vim
1013.594 011.841 000.176: sourcing /usr/share/vim/vim80/syntax/syntax.vim
1013.642 012.296 000.157: sourcing $VIM/vimrc
1014.184 000.410 000.410: sourcing /usr/share/vim/vim80/debian.vim
1014.724 000.270 000.270: sourcing /home/daniel/.vim/bundle/Vundle.vim/autoload/vundle.vim
1015.021 000.197 000.197: sourcing /home/daniel/.vim/bundle/Vundle.vim/autoload/vundle/config.vim
1015.683 000.015 000.015: sourcing /usr/share/vim/vim80/filetype.vim
1015.782 000.040 000.040: sourcing /usr/share/vim/vim80/ftplugin.vim
1015.875 000.035 000.035: sourcing /usr/share/vim/vim80/indent.vim
1016.281 000.298 000.298: sourcing /usr/share/vim/vim80/syntax/nosyntax.vim
1016.592 000.211 000.211: sourcing /usr/share/vim/vim80/syntax/syncolor.vim
1016.715 000.390 000.179: sourcing /usr/share/vim/vim80/syntax/synload.vim
1016.744 000.796 000.108: sourcing /usr/share/vim/vim80/syntax/syntax.vim
1016.810 000.011 000.011: sourcing /usr/share/vim/vim80/filetype.vim
1016.875 000.009 000.009: sourcing /usr/share/vim/vim80/ftplugin.vim
1016.937 000.009 000.009: sourcing /usr/share/vim/vim80/indent.vim
1017.797 000.567 000.567: sourcing /usr/share/vim/vim80/pack/dist/opt/matchit/plugin/matchit.vim
1017.906 000.013 000.013: sourcing /usr/share/vim/vim80/filetype.vim
1018.017 000.011 000.011: sourcing /usr/share/vim/vim80/ftplugin.vim
1018.085 000.010 000.010: sourcing /usr/share/vim/vim80/indent.vim
1018.539 000.209 000.209: sourcing /usr/share/vim/vim80/syntax/syncolor.vim
1019.006 000.203 000.203: sourcing /usr/share/vim/vim80/syntax/syncolor.vim
1019.385 000.203 000.203: sourcing /usr/share/vim/vim80/syntax/syncolor.vim
1020.619 002.482 001.867: sourcing /home/daniel/.vim/colors/minimalist.vim
1020.903 000.207 000.207: sourcing /home/daniel/.vim/autoload/camelcasemotion.vim
1021.384 007.678 002.596: sourcing ~/.vim/vimrc
1021.387 000.098: sourcing vimrc file(s)
1022.101 000.586 000.586: sourcing /home/daniel/.vim/plugin/camelcasemotion.vim
1022.503 000.221 000.221: sourcing /home/daniel/.vim/autoload/ctrlp/mrufiles.vim
1022.753 000.632 000.411: sourcing /home/daniel/.vim/plugin/ctrlp.vim
1023.103 000.273 000.273: sourcing /home/daniel/.vim/bundle/tabular/plugin/Tabular.vim
1023.450 000.090 000.090: sourcing /usr/share/vim/vim80/plugin/getscriptPlugin.vim
1023.712 000.247 000.247: sourcing /usr/share/vim/vim80/plugin/gzip.vim
1023.994 000.268 000.268: sourcing /usr/share/vim/vim80/plugin/logiPat.vim
1024.023 000.013 000.013: sourcing /usr/share/vim/vim80/plugin/manpager.vim
1024.263 000.229 000.229: sourcing /usr/share/vim/vim80/plugin/matchparen.vim
1024.941 000.662 000.662: sourcing /usr/share/vim/vim80/plugin/netrwPlugin.vim
1025.013 000.043 000.043: sourcing /usr/share/vim/vim80/plugin/rrhelper.vim
1025.066 000.033 000.033: sourcing /usr/share/vim/vim80/plugin/spellfile.vim
1025.286 000.202 000.202: sourcing /usr/share/vim/vim80/plugin/tarPlugin.vim
1025.408 000.098 000.098: sourcing /usr/share/vim/vim80/plugin/tohtml.vim
1025.658 000.231 000.231: sourcing /usr/share/vim/vim80/plugin/vimballPlugin.vim
1025.937 000.246 000.246: sourcing /usr/share/vim/vim80/plugin/zipPlugin.vim
1026.087 000.026 000.026: sourcing /usr/share/vim/vim80/pack/dist/opt/matchit/plugin/matchit.vim
1026.105 000.839: loading plugins
1026.146 000.041: loading packages
1026.676 000.274 000.274: sourcing /home/daniel/.vim/bundle/tabular/autoload/tabular.vim
1028.950 002.703 002.429: sourcing /home/daniel/.vim/bundle/tabular/after/plugin/TabularMaps.vim
1028.955 000.106: loading after plugins
1029.433 000.478: inits 3
1029.736 000.303: reading viminfo
1031.466 001.730: setup clipboard
1031.483 000.017: setting raw mode
1031.490 000.007: start termcap
1031.510 000.020: clearing screen
1031.954 000.444: opening buffers
1032.050 000.096: BufEnter autocommands
1032.052 000.002: editing files in windows
1032.146 000.094: VimEnter autocommands
1032.148 000.002: before starting main loop
1033.609 001.461: first screen update
1033.613 000.004: --- VIM STARTED ---
有问题的行显然是1000.786 1000.259: xsmp init
,我相信这表明 vim 正在连接到 X 服务器。
谷歌搜索表明,解决这个问题的唯一方法是重新编译而不使用xclip
。但人们总是使用系统剪贴板,而这种缓慢连接引起的大多数问题似乎与远程使用 vim 有关,而我并没有这样做。延迟如此接近一秒的事实也让我怀疑有些愚蠢的事情可能很容易解决。
那么,我该怎么做才能调查 X 在这里初始化的速度有多慢?
额外信息:当我通过 gnome-terminal 和简单终端运行带有 bash 的 vim 时遇到了这个问题。
答案1
在窗口管理器合成器使我的 Xorg 会话(或至少是我的窗口管理器)崩溃后,我遇到了同样的问题,在此过程中将我的所有应用程序踢出。在我的新 Xorg 会话中,我打开了一个新终端并重新连接到我现有的 tmux(2.8)会话,但注意到我现在在启动 Vim 时有延迟,在“xsmp init”中恰好有一秒钟,只有在通过 tmux 使用 Vim 时才会出现这种情况。这一秒是如此完美,以至于我怀疑这是超时,可能是由于 tmux 尝试连接到我之前的 Xorg 实例。
对我有用的是:我完全退出了 tmux 会话,确认没有 tmux 进程仍在运行,然后我启动了一个新的 tmux 会话。延迟消失了!
所以我猜测 tmux 存在 Xorg 会话消失的问题。
答案2
vim-gtk3
我在 Ubuntu 上的 Xmonad 上运行 Vim(包中的常规 vim)时遇到了类似的问题。
添加以下内容即可.xprofile
解决:
export SESSION_MANAGER=
这样做可以保留 Vim 的 X-clipboard 功能(使用寄存器复制/粘贴"
),同时消除启动时的 1 秒延迟。
这个答案从何而来?通过查看 Vim 的源代码,我确实确认它尝试建立某种连接,在 1 秒后超时。挖掘协议后,xsmp
我发现为此指定的环境变量是SESSION_MANAGER
,检查它后,我确认它指向的可能是我的情况中已死的东西(我发行版中的“其他”窗口管理器)
我怀疑当周围环境重新启动时,Tmux 内部的会话也会发生同样的情况。