V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaohanliang
V2EX  ›  Vim

感觉 MacVim 比终端 Vim 快好多

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

    环境

    • 机器: 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 玄学调参?
    jessun1990
        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   ·   实用小工具   ·   3391 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:16 · PVG 19:16 · LAX 03:16 · JFK 06:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.