感觉 MacVim 比终端 Vim 快好多 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaohanliang
V2EX    Vim

感觉 MacVim 比终端 Vim 快好多

  •  
  •   xiaohanliang 2020-08-02 21:21:39 +08:00 7743 次点击
    这是一个创建于 1894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境

    • 机器: MBP2015
    • 终端: Terminal App, 不是 iTerm
    • 版本: NeoVim(NVIM) v0.4.3
    • 插件: vim-go 套件, deoplete 补全, 插件总数不超过 15 个
    • 其他: 配合 tmux 一起用

    写 Go的, 之前一直都是用的上面的组合, 然后就很卡顿, 是真的很卡顿, 光标移动卡顿, 敲字符卡顿, 补全也卡顿. 升级重装什么的都试过, 也没啥用, 周围的小伙伴有的也面临这种问题.

    昨天心血来潮装了 MacVim. 一下子通畅了很多, 然后我就百思不得其解了, 有没有人知道这到底是因为什么?

    29 条回复    2020-08-13 07:44:01 +08:00
    tangbao
        1
    tangbao  
       2020-08-02 21:23:34 +08:00
    你试试 VIMR ?
    xiaohanliang
        2
    xiaohanliang  
    OP
       2020-08-02 21:28:34 +08:00
    @tangbao 谢谢哥们我觉得 MacVim 挺好了, 我就是有点搞不太明白为什么 MacVim 能快这么多, 仅仅是因为有了一个 GUI 的原因吗?
    vk42
        3
    vk42  
       2020-08-02 21:32:17 +08:00
    vim 的插件对性能影响很大,你把 nvim 配置文件夹改个名再试一下。
    jmc891205
        4
    jmc891205  
       2020-08-02 21:32:33 +08:00 via iPhone
    可能哪个插件对 neovim 支持不好?
    dullwit
        5
    dullwit  
       2020-08-02 22:01:21 +08:00
    有可能是终端原因,试试有 gpu 加速的终端看看
    xiaohanliang
        6
    xiaohanliang  
    OP
       2020-08-02 23:10:30 +08:00
    @dullwit 嗯嗯, 刚在网上搜了一圈, 其中一个造成卡顿的原因, 就是你提到的"render"(界面绘制), 终端需要不停的 render, 才能把 vim 的界面绘制出来, 从这个角度出发, 有 GPU 加速就会快一些. 我在网上看他们说, 其中最大的因素他们说是因为:

    > 是因为 vim 进程是一个 tmux fork 出来的进程, fork 出来的 vim 通过 ptty 将信息传递给 tmux, tmux 再传回给 zsh
    > 最终得以绘制, 这么多级的传递造成了明显的延迟.

    [Reference]( https://superuser.com/questions/657498/why-is-macvim-much-faster-than-vim-in-the-terminal)

    但其实我对这种说法存疑, 我打开非 Golang 的项目, 比如一大堆 shell 脚本, 如果真的是 render 造成卡顿, 那么打开 shell 还是 golang 应该都很卡, 但实际上 shell 就比 golang 快很多.

    那就还跟 vim-go 的套件有关, 但我的 MacVim 也一个不少的用了 vim-go 套件, 但 MacVim 就是快... 为啥呢... 玄学? Vim 玄学调参?
        7
    jessun1990  
       2020-08-02 23:13:28 +08:00
    是 Mac 下的终端 vim 很慢。

    Manjaro 终端下的 vim/neovim 都还是不错的。

    终端试试 kitty ?
    xiaohanliang
        8
    xiaohanliang  
    OP
       2020-08-02 23:15:16 +08:00
    @jessun1990 谢谢, 赞同 , 我也觉得是跟终端有关
    Chingim
        9
    Chingim  
       2020-08-02 23:19:57 +08:00
    确实如此.
    就算用 Alacritty 这种有 GPU 加速的 terminal, 在 MacVIM 和 Vimr 这种 GUI 面前还是显得很弱

    同一个大项目, 在终端里用 jk 移动光标都有点卡顿, 在 GUI 里就啥问题也没有
    xiaohanliang
        10
    xiaohanliang  
    OP
       2020-08-02 23:22:19 +08:00
    @Chingim +1 一点不错
    billlee
        11
    billlee  
       2020-08-02 23:34:08 +08:00
    这个至少控制一下变量,不要拿 neovim 和 vim 比吧? Tmux 确实很容易引起延迟问题,似乎是处理输入的时候等待转义序列引起的
    nightwitch
        12
    nightwitch  
       2020-08-03 00:07:44 +08:00
    https://github.com/tmux/tmux/issues/353 下面有很多网友的解决办法,可以挨个试试
    Numbcoder
        13
    Numbcoder  
       2020-08-03 00:58:56 +08:00
    大概率是 tmux 的锅
    limbo0
        14
    limbo0  
       2020-08-03 01:13:12 +08:00
    试了下确实快, 但是用 macvim 脱离终端有点不太方便, 有什么解决办法吗
    xiaohanliang
        15
    xiaohanliang  
    OP
       2020-08-03 01:26:31 +08:00   1
    @limbo0 一些简单常用的命令通过 :! 来做, 比如 :! pwd, 再多的暂时没更好的办法
    xiaohanliang
        16
    xiaohanliang  
    OP
       2020-08-03 01:30:14 +08:00
    Thanks(ω)
    xiaohanliang
        17
    xiaohanliang  
    OP
       2020-08-03 01:30:34 +08:00
    @nightwitch Thanks(ω)
    yazoox
        18
    yazoox  
       2020-08-03 08:23:09 +08:00
    楼主,最后的结论是什么?是 tmux 的问题?还是 mac 下的 vim 就有问题?还是......
    byzf
        19
    byzf  
       2020-08-03 15:08:01 +08:00
    我基本上在无插件模式下试过所有的 vim 的 gui 组合, tmux 本身就慢, terminal 本身有个 bug 也会慢.
    vimR 算快的, 但还是不够快, neovim 其它的 gui 可用性都有点问题. 最后选择了 vscodevim...
    xiaohanliang
        20
    xiaohanliang  
    OP
       2020-08-03 16:13:38 +08:00
    @byzf 可以的 折腾一圈还是 vscode 香, 我特么现在也有这种感觉, 反正也要搞 GUI, 为啥不直接用 vscode 呢? vscode 内部还集成了 terminal...
    byzf
        21
    byzf  
       2020-08-03 16:34:42 +08:00
    @xiaohanliang 主要是上了 gui 之后, 以前打的各种插件总是有那么几个不兼容, 这个字体不兼容那个 encoding, 或者显示中文少了几个像素之类的问题 github 上有一堆, 感觉 vim 还是在 terminal 环境下友好点
    spark
        22
    spark  
       2020-08-03 22:20:46 +08:00
    当当的李国庆也用 Vim ?
    Kobayashi
        23
    Kobayashi  
       2020-08-04 00:50:31 +08:00 via Android
    换 iTerm,开 GPU 加速渲染。kitty 和 alacritty 也可以。另外 iTerm 默认优先使用集成显卡 GPU 加速,改成始终独显加速。后边两个货没有这个选项,不用管。
    KentY
        24
    KentY  
       2020-08-04 17:48:49 +08:00
    很可能是你终端的问题.
    mac 0 经验.
    我 10 几年一直用 urxvt 没考虑过别的终端, 个人觉得非常快, 一次配置,10 好几年不变
    xiaohanliang
        25
    xiaohanliang  
    OP
       2020-08-05 00:40:42 +08:00
    @Kobayashi 谢谢帮助哦, 但我刚刚尝试了 iTerm, 也开了 GPU rendering, 在我的环境下加速效果比较有限, 呃... 还是比不上 MacVim 的速度 :)
    xiaohanliang
        26
    xiaohanliang  
    OP
       2020-08-06 23:17:24 +08:00   1
    @yazoox 今天沉下心对比了各种条件下的 vim 的响应速度, 有如下结论:

    1. MacVim, 以及其他有 GUI 的 vim, 一定是最快的, 缺点也是因为这个 GUI, 没法跟命令行紧密结合

    2. 关了输入提示插件 zchee/deoplete-go 以后, 速度明显更快

    3. 同一个大的 Go 项目下, 开了 GPU rendering 的 iTerm2 明显比 Terminal.app 更快, 这个推翻我之前的结论
    @Kobayashi @dullwit

    4. 同等条件下不使用 tmux 会稍微快一点点(tmux 的影响不算很大)
    dullwit
        27
    dullwit  
       2020-08-07 07:39:04 +08:00 via iPhone
    @xiaohanliang #26 lsp 要不试试 coc.nvim ?
    chemzqm
        28
    chemzqm  
       2020-08-08 09:29:54 +08:00
    deoplete 在 neovim 是 remote 插件,使用 messagepack 消息通讯,性能肯定比 vim 嵌入的 python 差些,除非它能改用全异步通讯。也可能因为你的 terminal 和 tmux 造成的卡,你自己试试就知道了
    IgniteWhite
        29
    IgniteWhite  
       2020-08-13 07:44:01 +08:00
    带 vimscript 之外的插件,比如 powerline 这种需要外面跑 python 的插件,还有 youcompleteme 这种,都可能带来卡顿。neovim 没用过,可能也会比较重。我现在是把 powerline 换成了 airline,在内存小的机器(比如树莓派)上干脆不加插件,手动设置 vimrc 。我的 dotfiles: https://github.com/g6ai/dotfiles 里面 vimrc 会检测内存,决定开不开插件
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     871 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 21:14 PVG 05:14 LAX 14:14 JFK 17:14
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86