Vim 上远程开发有什么方案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kumo31
4.72D
V2EX    Vim

Vim 上远程开发有什么方案?

  •  
  •   Kumo31 2023-10-13 17:09:04 +08:00 4740 次点击
    这是一个创建于 732 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平常都是直接 ssh 到开发机上 nvim 写代码。前段时间机房搬迁后,到开发机的延迟高了不少,编辑时虽然算不上卡,但明显能感觉到操作延迟。一开始使用 (N)vim 就是为了「爽」,现在体验却大大降低了。v 友们是怎么用 vim 远程开发的

    比较理想的是像 VSCode Remote 那样的体验,操作、渲染在本地实现,只在后台异步同步,同时 LSP 也是使用服务端的

    简单尝试过 sshfs ,虽然操作(移动光标)是流畅了,但问题更多。不说 LSP/Terminal ,单文件系统的速度就慢的不行,完全没法用

    也看过社区中的相关讨论: https://github.com/neovim/neovim/issues/21635 , 没得到什么结论

    为什么不直接在本地开发?

    • 项目的规模较大,而且比较底层,对 kernel 和工具链有很多特殊依赖。本机是台 mac ,没法直接跑,配置也不够开一台能 cover 的虚拟机。所以也希望 remote 时能使用开发机中的 LSP/工具链

    为什么直接使用 VSCode + Vim 插件?

    • VSCode 不够「 Vim 」,Vim 插件基本只能在编辑区起作用,像 expolrer 和其他组件大多没法用 Vim 的方式去交互,体验割裂。如果有解决方案,也欢迎分享
    18 条回复    2023-11-23 15:09:47 +08:00
    leisurelylicht
        1
    leisurelylicht  
       2023-10-13 17:19:25 +08:00
    同求,一直在找 neovim 比较满意的远程开发方案
    sam0ple
        2
    sam0ple  
       2023-10-13 17:26:38 +08:00   1
    smb 挂载远程目录,在本地开发?
    darksword21
        3
    darksword21  
    PRO
       2023-10-13 17:36:56 +08:00
    用 emacs + evil + tramp
    hellodudu86
        4
    hellodudu86  
       2023-10-13 18:03:49 +08:00
    以前我也纯 vim 用户,切换到 vscode+vim 插件好几年了,以前不想这种混搭模式也是因为不够 vim ,现在回头看当时真的只是在“为难”自己
    daydreamcafe
        5
    daydreamcafe  
       2023-10-13 18:34:04 +08:00
    在 vscode 上装 nvim 插件,这样就有了 vim 的生态,也有 vscode remote 开发的畅快体验了
    ho121
        6
    ho121  
       2023-10-13 18:39:28 +08:00 via Android
    ssh 打开压缩试试?
    L4Linux
        7
    L4Linux  
       2023-10-13 19:07:04 +08:00 via Android
    @darksword21 tramp 体验挺烂的
    chikai
        8
    chikai  
       2023-10-13 19:13:44 +08:00
    还是 VSCode + Vim 吧,习惯就好了
    xgdgsc
        9
    xgdgsc  
       2023-10-13 19:35:30 +08:00 via Android
    ssh -X 或者 nomachine 远程控制 或者在 vscode remote 的终端里用 vim?
    iridescent0rsy
        10
    iridescent0rsy  
       2023-10-13 22:05:38 +08:00 via Android
    @sam0ple 还有 sshfs 也行,服务器也不用另外配置文件服务
    iridescent0rsy
        11
    iridescent0rsy  
       2023-10-13 22:06:32 +08:00 via Android
    @iridescent0rsy 啊,没看全原文,楼主已经用过了
    yzwduck
        12
    yzwduck  
       2023-10-13 22:16:59 +08:00   2
    试试用 UDP 的 mosh (mobile shell) 会不会降低一点网络延迟?
    keyv
        13
    keyv  
       2023-10-13 22:51:38 +08:00 via iPhone
    目前没有比较成熟的方案,如果感兴趣可以看一下 https://github.com/chipsenkbeil/distant.nvim
    darksword21
        14
    darksword21  
    PRO
       2023-10-14 01:31:53 +08:00 via iPhone
    @L4Linux 没感觉,我用了一年多了
    xxgj
        15
    xxgj  
       2023-10-14 22:36:15 +08:00
    我恰好也遇到似的,最的折衷方案是使用 Git ,不一定用於 OP...

    更具,LSP 依然使用 Mac 的,有需要或,把目前的代更 push 到程的人分支,再上 pull 下行等操作。一套流程可以在本地直接用 ssh 的命令完成,最後再配置一完成後的 slack 提醒,基本上就是我日常的 workflow 了:)
    acerphoenix
        16
    acerphoenix  
       2023-10-15 09:45:08 +08:00
    用 vscode 也会延迟吧,毕竟你网络差。我觉得还得本地开发,起个类似 syncthing 服务一直异步同步,当然调试什么的就没戏了。
    Kumo31
        17
    Kumo31  
    OP
       2023-10-16 14:04:48 +08:00
    @yzwduck #12 体验了下,mosh 很不错,感谢
    Meursau1T
        18
    Meursau1T  
       2023-11-23 15:09:47 +08:00
    我自己折腾了套方案:
    先尝试直接用 rsync 同步,他的增量同步有点问题,容易导致远程起的服务刷新太多文件。
    后面干脆写了个脚本,调用 git status ,看有什么文件变更了,用 rsync 逐一同步。同步后将本次同步的文件记下来,下次同步的时候再尝试更新一次,避免有的文件恢复后在 git stauts 里不再展示,导致远程代码还是修改后的版本。
    这套搞完了以后给 neovim 加个监听,如果在特定文件夹编辑文本,一旦保存,就调用上面的程序使用 rsync 同步修改。调用时使用 AsyncRun ,完全无感。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     982 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:34 PVG 06:34 LAX 15:34 JFK 18:34
    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