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

使用 vim 写程序

  •  
  •   hzjseasea · 2021-11-16 16:16:59 +08:00 · 7956 次点击
    这是一个创建于 882 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 vim 写程序真的很爽嘛 入编程坑一来 用过 vs vsc jb 部分 也经常切换到 vim 想要尝试一些,但发现 vim 会有一些让人难受的点,所以 vim 到现在为止 我最多用来 shell 以及 在 ide 里面 移动删除复制粘贴和批量操作这些简单的操作,完全用不到视频里面一些大佬那么的流程

    痛点如下

    1. 使用过 neovim+coc 的组合,也有用 vim+ycm 的组合, 就是很多插件需要装,然后需要一个一个的去看这些插件,去写配置文件, 太复杂了,想问下大家都是这么一步一步过来的嘛
    2. 也用过 spacevim
    3. 没办法看 doc ,比如写 rust 的时候想看下具体的一个函数的方法,没办法看
    77 条回复    2021-11-27 11:34:06 +08:00
    monkeylyf
        1
    monkeylyf  
       2021-11-16 16:24:36 +08:00
    其实大量插件都不是必需的。核心诉求就那么几个,如 coc/ycm ,文件模糊搜索,快捷键编译或者测试等(自己用 vimscript 写)
    ysn2233
        2
    ysn2233  
       2021-11-16 16:26:49 +08:00
    在其他编辑器或者 ide 里用 vim 的编辑模式就行,写项目我觉得除非很熟练不然不适合 vim ,我一般写一些简单的 python 或者 shell 脚本会用 vim 。
    Leviathann
        3
    Leviathann  
       2021-11-16 16:28:55 +08:00
    1 ,2 我也觉得很麻烦所以我用 IdeaVim
    3 的化应该不会啊,我记得用 Coc 的话配置一个

    " Use K to show documentation in preview window.
    nnoremap <silent> K :call <SID>show_documentation()<CR>
    function! s:show_documentation()
    if (index(['vim','help'], &filetype) >= 0)
    execute 'h '.expand('<cword>')
    elseif (coc#rpc#ready())
    call CocActionAsync('doHover')
    else
    execute '!' . &keywordprg . " " . expand('<cword>')
    endif
    endfunction

    就行了,normal 下按 K 就会有文档
    Vegetable
        4
    Vegetable  
       2021-11-16 16:31:42 +08:00
    不是,人家都是在 IDE 里使用 vim keymap ,你怎么直接连 ide 都不用了?
    fishDD
        5
    fishDD  
       2021-11-16 16:33:44 +08:00   ❤️ 1
    vim 是文本编辑器,所以用来开发程序的话,需要一些插件来配合(因为懒)。
    1 、vim 插件多,但不代表你需要的多。实际开发过程中,高频的其实就那几个。代码提示 /自动补全,编译 /运行,debug ,查找,文件树等等。(其实所有 ide 都一样,插件茫茫多,真正高频使用的没几个。区别在于 ide 会预先给你配置好,比如自动提示,编译运行等等,vim 需要你手动编译)
    2 、相较于其他 ide 开发插件,vim 提供良好的环境,你可以根据自己需要去定制自己的插件。
    3 、vim 是这个长时间自己熟悉并打磨的过程,真正开箱即用的很少的。
    只有适合自己的,没有绝对正确的。
    wellsc
        6
    wellsc  
       2021-11-16 16:34:47 +08:00   ❤️ 2
    vim 一般写小项目,小脚本,我只需要一个高亮,vim 自带的 complete 就够用了,真要折腾大项目不如直接上 ide
    xujiahui
        7
    xujiahui  
       2021-11-16 16:38:34 +08:00
    IDEA 或 VSCode 上装 Vim 插件
    zen1
        8
    zen1  
       2021-11-16 16:42:41 +08:00
    没有特殊需求,为什么要舍弃 IDE 而转向 vim 呢
    我觉得还是确定好核心诉求,没必要为了用而用 vim ,是不是大佬不是看用什么工具编码决定的
    muxueqz
        9
    muxueqz  
       2021-11-16 16:43:05 +08:00   ❤️ 1
    我已经从 SpaceVim 迁到 Lunarvim.org 了,加载速度更快,补全等功能也更好,写代码比 VSCode 和其它重量 IDE 畅快许多
    weixiangzhe
        10
    weixiangzhe  
       2021-11-16 16:51:30 +08:00
    太累了,ide / vscode 加 vim 键位吧
    hzjseasea
        11
    hzjseasea  
    OP
       2021-11-16 16:55:40 +08:00
    @weixiangzhe 是的 我当前就是这么干的
    hzjseasea
        12
    hzjseasea  
    OP
       2021-11-16 16:56:04 +08:00
    @Vegetable 可能我表述的不够清楚 我当前就是 ide + vim plugin
    hzjseasea
        13
    hzjseasea  
    OP
       2021-11-16 17:02:54 +08:00
    @Leviathann 我配置一下看看,tks
    weixiangzhe
        14
    weixiangzhe  
       2021-11-16 17:04:14 +08:00
    @hzjseasea 我试过几周,但开发时发现 ctrl+c ctrl v 时还是鼠标好使
    hzjseasea
        15
    hzjseasea  
    OP
       2021-11-16 17:04:32 +08:00
    @ysn2233 对的,我现在就是这样,之前在油管上看他们写项目,那个 vim 耍的飞起,b 站有个 up 主也是
    hzjseasea
        16
    hzjseasea  
    OP
       2021-11-16 17:05:39 +08:00
    @weixiangzhe 复制粘贴这种我倒是用的蛮舒服的 主要是窗口切换, 目录树啊 vim 里面不是还有打标记那种嘛,我也没用到。。
    hzjseasea
        17
    hzjseasea  
    OP
       2021-11-16 17:06:16 +08:00
    @fishDD 嗯呢如果是这样那我的确可以继续用当前的方案了 ide + vim
    timchou
        18
    timchou  
       2021-11-16 17:12:48 +08:00   ❤️ 2
    写了 10 年代码,一直用 vim ,大小项目都是,而且不装啥配件,代码补全啥的,也没有使用的习惯,没觉得效率有啥低的。关键自己顺手就行
    yujinchn
        19
    yujinchn  
       2021-11-16 17:28:27 +08:00
    都是 ideavim 加官方几个 easy-motion 啥的插件,完事
    wtdd
        20
    wtdd  
       2021-11-16 18:14:36 +08:00
    一般人用插件足以,除非有大佬带或者组里氛围好一起用,不然自己钻研曲线很不平滑严重浪费时间
    yuancoder
        21
    yuancoder  
       2021-11-16 18:16:19 +08:00
    直接开始用,用过的过程中觉得哪个操作不爽了,再去找插件。
    xarthur
        22
    xarthur  
       2021-11-16 18:22:51 +08:00 via iPhone
    1. 确实是一个插件一个插件配置过来的,其实大部分插件的配置都不复杂,基本上只要在插件管理器里加上一句话就能用了,只是 CoC/ycmd 的功能强大,所以他们它们配置麻烦。
    3. 不清楚具体需求,不过 Rust 的 LSP 应该支持方法跳转吧,所以 CoC 应该支持看一个函数的实现。
    975779964
        23
    975779964  
       2021-11-16 18:26:04 +08:00
    jdhao
        24
    jdhao  
       2021-11-16 18:36:05 +08:00 via Android
    推荐用 neovim ,不过入门确定需要一段时间学习,不像 IDE 开箱即用。
    1 ,安装的插件确实有的需要自己试试才知道好不好用,有个 awesome neovim 项目不错,总结了很多插件
    3 ,看 doc 肯定是可以的,配置好 lsp ,doc 随便看,我一般映射为 K ,在函数名上按 K 显示函数的信息
    kangfenmao
        25
    kangfenmao  
       2021-11-16 18:36:59 +08:00   ❤️ 1
    爽个屁,趁早放弃
    closedevice
        26
    closedevice  
       2021-11-16 19:29:28 +08:00
    用了五年的 vimer 表示,现在几乎所有的开发都用它,不是因为高效,而是因为统一
    ChrisFreeMan
        27
    ChrisFreeMan  
       2021-11-16 19:48:58 +08:00
    呃。。。。其实取决于你对它的熟悉程度,越熟悉越爽,很多魔法操作的,一点点去挖掘,我是一路遇到什么编辑难题,就去搜索有没有相应的快捷操作,渐渐的就越来越熟。
    ChrisFreeMan
        28
    ChrisFreeMan  
       2021-11-16 19:49:44 +08:00
    其实开始我用它纯粹是为了在同事面前装比...
    cassyfar
        29
    cassyfar  
       2021-11-16 20:01:53 +08:00
    vim 的乐趣之一就是折腾各种配置。不推荐 spacevim ,太臃肿了。如果懒得折腾,直接 vscode 或者 jetbrain 全家桶就好了。
    wyx119911
        30
    wyx119911  
       2021-11-16 20:42:51 +08:00
    光写代码倒是还挺顺手,跨文件 copy 好麻烦
    ChrisFreeMan
        31
    ChrisFreeMan  
       2021-11-16 20:58:10 +08:00
    @wyx119911 我是设置和系统共享黏贴板,既然别的编辑器都是这样,why not 。

    下面这个加到配置里

    " set share system clipboard
    set clipboard=unnamed
    wyx119911
        32
    wyx119911  
       2021-11-16 21:10:59 +08:00
    @ChrisFreeMan 忘了说我是 ssh 到开发机再 vim 的,现在用 vscode remote 很舒服
    blessingsi
        33
    blessingsi  
       2021-11-16 21:12:02 +08:00
    1. 现在的主流插件,基本上文档都很全,配置没那么痛苦了,而且配置文件打磨是个长期功夫,只要写出第一版差不多能用的,后面慢慢优化吧。如果嫌 vimscript 太难用,可以尝试一下 neovim ,支持 lua 配置,写起来比 vimscript 舒服一些
    2. 个人还是喜欢从零开始,搞一个最适合自己的,直接照抄别人的配置,有问题很难定位,而且有的功能根本用不到,缺点就是费时费力。这个就看个人习惯了
    3. 各个 lsp 的客户端肯定都实现了查看文档的方法,自己配个 key-binding 就好了
    ffxrqyzby
        34
    ffxrqyzby  
       2021-11-16 21:12:50 +08:00
    尝试过无数次 vim , 最终还是放弃了,github 上有现成的 space vim 项目, 一键安装, 不用自己配置了
    fkdog
        35
    fkdog  
       2021-11-16 21:38:10 +08:00
    如果你想获得别人更多的认同感,你应该提升自己的技术水平。
    而非把时间花在这些小众工具上企图通过与众不同来装逼。。。

    如果纯 vim 真的那么好用,jetbrain 和微软为什么要花大力气去开发 idea 和 vs ?
    合适的场景用合适的工具,这才是聪明人的选择。
    darksword21
        36
    darksword21  
       2021-11-16 22:33:48 +08:00
    @fkdog 请别一棍子打死谢谢
    ZhenYuD
        37
    ZhenYuD  
       2021-11-16 22:36:27 +08:00
    vim 解决的问题就是键盘输入文本的成本。当然可以根据需要配置 vim 获得 all in one 的一体化体验,但是付出的是折腾的成本;也可以直接通过插件在各种 ide 里最大程度的模拟它。或者你两者都占,只要你知道自己想要什么~
    -- 来自 emacs 用户
    hronro
        38
    hronro  
       2021-11-16 22:58:24 +08:00
    Vim 需要写很多配置才能达到和 IDE 一样的功能这种说法,现在已经过时了,(Neo)Vim 现在已经比以前好用太多了。

    得益于 NeoVim 现在已经内置了 LSP ,配合 NeoVim 官方和社区共同维护的 nvim-lspconfig ,你现在只需要装 nvim-lspconfig 这一个插件,不需要任何其他的插件和配置,你就能在大多数语言里获得自动补全、定义跳转、引用查看、inline docuemnt 等 IDE 级别的功能。你唯一需要配置的就是这些功能的 key binding 而已。

    回到楼主的痛点:
    1. 如果你觉得 Vim 的插件和配置太过麻烦,我的建议是你不要一股脑的把网上别人的配置全抄过来。配置可以少,但你需要知道每一行的配置是干什么的。事实上现在 NeoVim 配合 LSP ,默认的配置和内置的插件已经足够干活了,当你用熟之后,可以在有选择地添加插件提高你的工作效率。
    2. 我不知道用过 spacevim 算什么痛点。
    3. 可以看的,而且因为 NeoVim 已经内置了 LSP ,所以实际上你不需要装任何插件就能做到这点。你只需要配置一下 LSP Hover 的 key binding 就可以了。等下我可以录个视频给你看看我的效果。
    hronro
        39
    hronro  
       2021-11-16 22:59:03 +08:00


    这里查看 println! 的文档就没用到任何插件,是 NeoVim 内置的功能,只要改下 key binding 就能用。自动补全里对应方法的文档,这个倒是因为我装了 nvim-cmp 这个补全的插件,不过这个插件配置起来也很简单,也是开箱即用的。
    rainysia
        40
    rainysia  
       2021-11-16 23:12:16 +08:00
    用了十多年 gvim. 没 GTK 就用 vim, 就是用 IDE 来实现各种语法糖跳转后, 最后编辑也是快捷键触发打开一个 gvim 来编辑。
    liuxu
        41
    liuxu  
       2021-11-16 23:24:24 +08:00
    以前用 spf13 的 vim 插件包,写了大半年 php ,后来用 vscode 了,改代码用 vim ,不过现在改 php 代码基本 vscdoe 或者 doom-emacs 了
    jdhao
        42
    jdhao  
       2021-11-17 00:13:31 +08:00
    neovim 可以干点啥: https://v2ex.com/t/813706#reply4
    mr2xd
        43
    mr2xd  
       2021-11-17 08:06:08 +08:00
    经常去摸索,知道 vim 能做什么,平时搭配 ide 使用,最常用的也就那么几个,想要一个多功能的编辑工具,直接快进到 doom emacs
    ErenJaeger
        44
    ErenJaeger  
       2021-11-17 08:57:57 +08:00
    我用vim难受的地方就是在插入模式下,只能用上下左右移动。。。
    ohwind
        45
    ohwind  
       2021-11-17 09:35:40 +08:00
    @ErenJaeger 你可以重映射按键
    inoremap <C-h> <Left>
    inoremap <C-j> <Down>
    inoremap <C-k> <Up>
    inoremap <C-l> <Right>
    cnoremap <C-h> <Left>
    cnoremap <C-j> <Down>
    cnoremap <C-k> <Up>
    cnoremap <C-l> <Right>
    ciki
        46
    ciki  
       2021-11-17 09:49:42 +08:00
    十年前 IDE 没现在这么强大的情况下,VIM 都是小众圈子,何况如今的 IDE 了
    jessun1990
        47
    jessun1990  
       2021-11-17 10:01:30 +08:00
    不推荐 spacevim 等集成度较高的 vim 套件。虽然它简化了 vim 的原本配置难度,但是又构造了新的学习难度,自身的配置太多了。

    我自己本人只用 neovim ,不用 vscode 和其他 IDE ,日常工作 golang ,业余学习 rust 。学习 vim 配置建议这样:

    1. 用 vscode+vim 插件等编辑器正常工作;
    2. 偶尔使用 vim 做简单编辑,只配置那种不带任何插件的基础配置;
    3. 在 2 的基础上,尝试安装插件来解决代码补全 /格式化 /语法着色等问题;
    4. 尝试从 1 过渡到 3 ;

    当前学习建议直接使用 neovim 和 lua 类型配置。
    推荐:
    https://github.com/rockerBOO/awesome-neovim
    https://github.com/neoclide/coc.nvim
    https://github.com/nanotee/nvim-lua-guide
    ixx
        48
    ixx  
       2021-11-17 10:13:22 +08:00
    @ErenJaeger #44 你需要换个 可自定义键盘 😁
    jnqcMer2019
        49
    jnqcMer2019  
       2021-11-17 10:17:34 +08:00
    @jessun1990 gopls 如果在非 GO MOD 的项目或者多个 GO MOD 子项目是不是会失效?
    jessun1990
        50
    jessun1990  
       2021-11-17 10:26:38 +08:00
    @jnqcMer2019 目前我的配置是会出现这样的情况。但是由于我司的项目出现这种情况非常少。
    Chingim
        51
    Chingim  
       2021-11-17 10:44:23 +08:00
    前端开发, 一直用 vim
    尝试了几次转到 vscode, 均以失败告终. vscode 总有一些场景是键盘不能完成的, 动不动就需要我去拿鼠标, 这一点对我来说是个痛点.

    所幸的是(neo)vim 能很好地满足我的需求, 就一直用着吧, 也不用在编辑器间换来换去.
    Chingim
        52
    Chingim  
       2021-11-17 10:48:33 +08:00   ❤️ 9
    现在有股风气, 只有在 vim 的帖子里, 总有一种声音: "用 vim 就是装逼, 有这个折腾的功夫用 ide 不好吗".

    在我看来:
    1. 用某种工具就是大神
    2. 用某种工具就是装逼

    这两种看法没啥区别, 都是二极管思维的蠢驴
    ALVC666
        53
    ALVC666  
       2021-11-17 10:49:58 +08:00
    ideavim 已经满足了我的 99%需求了
    而且还不用折腾 装完插件 加载.ideavimrc 直接起飞
    m1nm13
        54
    m1nm13  
       2021-11-17 11:07:01 +08:00
    5 年使用经验,vim->vim plus ->vscode vim

    最近换成 vscode vim , 原生 vim +插件 的方式太容易出问题了,ycm 个人觉得效果算是很差的了,还不算因为 python 版本依赖,导致的各种奇葩问题。跳转定义,只要工程一大,铁定跳不对,举个例子,LINUX 内核源码。也就配合 grep/egrep 还能用用。加上 vscode 现在有 tabnine 这类神奇的自动写代码插件,我觉得换成 vscode 或者其他 IDE 基本是大势所趋了。

    我认为的 vim , 是一个操作手段,是一个摒弃鼠标的操作方式,能让两只手都放在键盘上的操作方式。而不是这些杂七杂八的 代码补全,定义跳转,这些都不如当前流行的 jetbrain 或者 vscode 。既然有更好的 IDE 能够兼容 VIM ,更换也是大势所趋
    lancelock
        55
    lancelock  
       2021-11-17 11:12:53 +08:00
    @ohwind 我这样设置<C-h>不起作用,变删除了,你有这种情况吗?
    hzjseasea
        56
    hzjseasea  
    OP
       2021-11-17 11:55:41 +08:00
    @hronro 因为我感觉会有很多人说可以去试一下用 spacevim 因为 spacevim 宣传说是开箱即用, 但其实使用起来感受上还是 neovim 来的爽快,唯一的痛点还是这个插件, 我配置的时候确实是一股脑的复制过来的哈哈哈,自己也有尝试一个一个看,就看着看着又回到 ideavim 上去了= =
    ohwind
        57
    ohwind  
       2021-11-17 12:07:48 +08:00
    @lancelock 啊......这我倒没遇到欸...
    jdhao
        58
    jdhao  
       2021-11-17 12:51:13 +08:00 via Android
    @hzjseasea 先搞定你开发急需的插件,然后再慢慢扩展,另外如何用 vim 的方式解决问题,也需要日积月累的经验,不可能一蹴而就,随着 vim 功力大涨,用 vim 只会越来越爽
    fpure
        59
    fpure  
       2021-11-17 12:56:15 +08:00
    @timchou 以前我用 NPP 写代码的时候也是这么想的,结果发现 IDE 真香
    HereJustWait
        60
    HereJustWait  
       2021-11-17 13:11:22 +08:00 via iPhone
    我原来也是 vim 的忠实拥护,直到用上了 vscode 的 remote ssh
    darksword21
        61
    darksword21  
       2021-11-17 13:21:22 +08:00
    @m1nm13 ycm 也是用 lsp 跳转的吧,你换成 vscode 不也是一样
    ccagml
        62
    ccagml  
       2021-11-17 13:31:41 +08:00 via Android
    试了好几次 vim ,都感觉没有直接 vscode 的 remote ssh 好用。除了用来改简单的单文件配置
    loryyang
        63
    loryyang  
       2021-11-17 13:48:58 +08:00
    IDE + VIM 插件呀,都不是老古董了,没必要拒绝 IDE 的快乐
    hzjseasea
        64
    hzjseasea  
    OP
       2021-11-17 13:50:04 +08:00
    @jdhao 好的谢谢,之前确实太浮躁了
    wupher
        65
    wupher  
       2021-11-17 14:52:19 +08:00
    vim 也有插件管理包。使用对应工具,插件的管理与更新也更方便。

    相比 vim ,neovim 更新,且有 Copilot 支持。与 vim8 相比,现在更喜欢 neo 。

    IDE 也有一般有 vim 插件或模式,连万年的 xCode 现在都有了。

    目前觉得难受的,是中文,或者说非英文环境吧。vim 对于中文和日文的支持都不好。对于 word 的理解不是太准确。
    ww2000e
        66
    ww2000e  
       2021-11-17 14:57:08 +08:00
    hzjseasea
        67
    hzjseasea  
    OP
       2021-11-17 15:11:36 +08:00
    @ww2000e 好的谢谢
    flysp
        68
    flysp  
       2021-11-17 15:20:21 +08:00
    gvim 支持切换不同输入状态下切换中英文,这是我坚持使用 vim 的一个理由

    " Windows 适用
    " 切换为普通状态切换输入法为 ASCII 模式
    if has('win32')
    augroup imeauto
    autocmd!
    autocmd! InsertLeave * set imdisable|set iminsert=0|set noimdisable
    autocmd! InsertEnter * set noimdisable|set iminsert=0
    augroup END
    endif
    Vinceeeent
        69
    Vinceeeent  
       2021-11-17 16:28:15 +08:00 via Android
    何苦折磨自己,IDE 的快捷键已经够好用了,还没有什么学习成本。
    lingxi27
        70
    lingxi27  
       2021-11-17 16:36:52 +08:00
    懒人可以用 ideavim 挺不错
    hronro
        71
    hronro  
       2021-11-17 21:19:24 +08:00   ❤️ 1
    @m1nm13 #54

    近两年 Vim/NeoVim 进步神速,你说的这些问题全部都不存在了。

    补全 / 跳转直接用 LSP ,其效果和 VS Code 比起来不能说相似,只能说一模一样。(因为 VSCode 和 Vim/NeoVim 的底层都依赖 LSP 来实现,所以用同一份代码实现的补全 / 跳转,其行为也只能和 VSCode 保持一致)

    Tabnine 在 Vim 也有。

    即使是 VSCode 的杀手锏级别功能 Remote Development ,现在 NeoVim 也有了 distant.nvim 这个插件来实现了。

    倒是 VSCode / IDEA 上这些 vim keybinding ,没一个能完全准确地 100% 模拟真实 Vim 的行为。而且 VSCode / IDEA 在流畅度上也差 Vim 太远了(即使 VSCode 是 Electron 天花板,也毕竟还是用的 Electron )
    acdfjelxe
        72
    acdfjelxe  
       2021-11-18 16:36:04 +08:00
    7 年 vimer, 从 vim 到 neovim, 现在干活超级慢 🤣
    IsaacYoung
        73
    IsaacYoung  
       2021-11-18 16:50:46 +08:00
    我之前也折腾 后来发现没有 vscode + vim 实用 就不折腾了
    jdhao
        74
    jdhao  
       2021-11-18 18:56:46 +08:00 via Android
    @acdfjelxe 怕是个假 vimmer ,我三年都用的飞起🌝
    acdfjelxe
        75
    acdfjelxe  
       2021-11-22 12:10:00 +08:00
    @jdhao 干活哪有玩插件快乐
    jdhao
        76
    jdhao  
       2021-11-22 12:29:03 +08:00 via Android
    @acdfjelxe 一起玩啊,我的配置 https://github.com/jdhao/nvim-config
    OSDI
        77
    OSDI  
       2021-11-27 11:34:06 +08:00
    @lancelock #55 遇到过类似的,最后发现是 auto-pairs 的问题,换成了 Raimondi/delimitMate
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3259 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:53 · PVG 21:53 · LAX 06:53 · JFK 09:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.