Neovim Lagging in Tmux Diagnose

遇到在Debian服务器上neovim打开巨慢无比的问题,记录解决过程如下。

现象和环境

现象描述

在macOS上使用iTerm2打开tmux,然后在tmux中使用neovim,有下面3个使用场景:

  1. 在本地macOS直接使用neovim
  2. ssh到本地局域网一台Debian使用neovim
  3. ssh到VPS,也是Debian使用neovim
  • 以上3处的neovim配置、插件完全相同,都是同一份;
  • 上述2和3的Debian系统版本完全一致,neovim安装方式完全一致。
  • 在上述1和2中,使用neovim正常,但是在3上面,打开巨慢无比。

软件版本

  • iTerm2: 3.4.19
  • tmux: 3.3a
  • neovim: 0.9.1

tmux已经配置了xterm-256,初步排除颜色配置不对导致的渲染问题。

诊断过程

1. 无配置启动

首先判断是neovim的bug,还是我的配置导致的问题。

nvim -u NORC

打开速度正常,这就排除了问题是由neovim代码bug造成的可能性,问题原因锁定在了配置上面。 但是同样的配置,在另一台同样的环境的Debian上,却是正常的。

2. 启动日志检查耗时原因

nvim --startuptime cost.txt cost.txt

阅读启动日志,发现严重拖慢启动速度的原因是在加载clipboard.vim上。 尝试关闭option.lua中和clipboard有关的配置,

local opt = vim.opt
-- use system clipboard as default register
-- opt.clipboard:append("unnamedplus")

再次启动,一切正常。

破案了,就是clipboard配置造成的。

3. 两台Debian的差异

但是本地那台Debian上的neovim是同样的配置,却可以正常启动,一点也不慢。 什么原因?

发现在VPS上的Debian安装了xclip和xsel两个工具,导致clipboard.vim尝试使用X环境的clipboard,但两台Debian都是服务器,没有装X环境。

本地的Debian上没有安装这两个工具,所以一切正常。

卸载xclip和xsel之后,两台Debian都表现一致了。

结论和总结

  • 启动巨慢无比是vim.opt.clipboard配置不当导致。

  • xclip和xsel会影响clipboard.vim的行为。

  • 如果确实需要xclip和xsel工具,可以指定系统环境设置clipboard配置即可,只在macOS下使用系统剪贴板:

-- clipboard
local uname = vim.loop.os_uname()
_G.OS = uname.sysname
_G.IS_MAC = OS == 'Darwin'
_G.IS_LINUX = OS == 'Linux'
_G.IS_WINDOWS = OS:find 'Windows' and true or false
_G.IS_WSL = IS_LINUX and uname.release:find 'Microsoft' and true or false

if _G.IS_MAC then
    -- use system clipboard as default register
    -- only use system clipboard on macOS
    opt.clipboard:append("unnamedplus") 
end
  • 定位neovim的异常表现,首先要明确是软件bug还是配置不当导致。
  • vim的启动日志可以快速明确具体的问题点。

END.