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

使用 vim 写程序

  •  
  •   hzjseasea · 20 天前 · 5094 次点击

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

    下面这个加到配置里

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

    如果纯 vim 真的那么好用,jetbrain 和微软为什么要花大力气去开发 idea 和 vs ?
    合适的场景用合适的工具,这才是聪明人的选择。
    darksword21
        36
    darksword21  
       20 天前
    @fkdog 请别一棍子打死谢谢
    ZhenYuD
        37
    ZhenYuD  
       20 天前
    vim 解决的问题就是键盘输入文本的成本。当然可以根据需要配置 vim 获得 all in one 的一体化体验,但是付出的是折腾的成本;也可以直接通过插件在各种 ide 里最大程度的模拟它。或者你两者都占,只要你知道自己想要什么~
    -- 来自 emacs 用户
    hronro
        38
    hronro  
       20 天前
    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  
       20 天前


    这里查看 println! 的文档就没用到任何插件,是 NeoVim 内置的功能,只要改下 key binding 就能用。自动补全里对应方法的文档,这个倒是因为我装了 nvim-cmp 这个补全的插件,不过这个插件配置起来也很简单,也是开箱即用的。
    rainysia
        40
    rainysia  
       20 天前
    用了十多年 gvim. 没 GTK 就用 vim, 就是用 IDE 来实现各种语法糖跳转后, 最后编辑也是快捷键触发打开一个 gvim 来编辑。
    liuxu
        41
    liuxu  
       20 天前
    以前用 spf13 的 vim 插件包,写了大半年 php ,后来用 vscode 了,改代码用 vim ,不过现在改 php 代码基本 vscdoe 或者 doom-emacs 了
    jdhao
        42
    jdhao  
       20 天前
    neovim 可以干点啥: https://v2ex.com/t/813706#reply4
    mr2xd
        43
    mr2xd  
       19 天前
    经常去摸索,知道 vim 能做什么,平时搭配 ide 使用,最常用的也就那么几个,想要一个多功能的编辑工具,直接快进到 doom emacs
    ErenJaeger
        44
    ErenJaeger  
       19 天前
    我用vim难受的地方就是在插入模式下,只能用上下左右移动。。。
    ohwind
        45
    ohwind  
       19 天前
    @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  
       19 天前
    十年前 IDE 没现在这么强大的情况下,VIM 都是小众圈子,何况如今的 IDE 了
    jessun1990
        47
    jessun1990  
       19 天前
    不推荐 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  
       19 天前
    @ErenJaeger #44 你需要换个 可自定义键盘 😁
    jnqcMer2019
        49
    jnqcMer2019  
       19 天前
    @jessun1990 gopls 如果在非 GO MOD 的项目或者多个 GO MOD 子项目是不是会失效?
    jessun1990
        50
    jessun1990  
       19 天前
    @jnqcMer2019 目前我的配置是会出现这样的情况。但是由于我司的项目出现这种情况非常少。
    Chingim
        51
    Chingim  
       19 天前
    前端开发, 一直用 vim
    尝试了几次转到 vscode, 均以失败告终. vscode 总有一些场景是键盘不能完成的, 动不动就需要我去拿鼠标, 这一点对我来说是个痛点.

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

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

    这两种看法没啥区别, 都是二极管思维的蠢驴
    ALVC666
        53
    ALVC666  
       19 天前
    ideavim 已经满足了我的 99%需求了
    而且还不用折腾 装完插件 加载.ideavimrc 直接起飞
    m1nm13
        54
    m1nm13  
       19 天前
    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  
       19 天前
    @ohwind 我这样设置<C-h>不起作用,变删除了,你有这种情况吗?
    hzjseasea
        56
    hzjseasea  
    OP
       19 天前
    @hronro 因为我感觉会有很多人说可以去试一下用 spacevim 因为 spacevim 宣传说是开箱即用, 但其实使用起来感受上还是 neovim 来的爽快,唯一的痛点还是这个插件, 我配置的时候确实是一股脑的复制过来的哈哈哈,自己也有尝试一个一个看,就看着看着又回到 ideavim 上去了= =
    ohwind
        57
    ohwind  
       19 天前
    @lancelock 啊......这我倒没遇到欸...
    jdhao
        58
    jdhao  
       19 天前 via Android
    @hzjseasea 先搞定你开发急需的插件,然后再慢慢扩展,另外如何用 vim 的方式解决问题,也需要日积月累的经验,不可能一蹴而就,随着 vim 功力大涨,用 vim 只会越来越爽
    fpure
        59
    fpure  
       19 天前
    @timchou 以前我用 NPP 写代码的时候也是这么想的,结果发现 IDE 真香
    HereJustWait
        60
    HereJustWait  
       19 天前 via iPhone
    我原来也是 vim 的忠实拥护,直到用上了 vscode 的 remote ssh
    darksword21
        61
    darksword21  
       19 天前
    @m1nm13 ycm 也是用 lsp 跳转的吧,你换成 vscode 不也是一样
    ccagml
        62
    ccagml  
       19 天前 via Android
    试了好几次 vim ,都感觉没有直接 vscode 的 remote ssh 好用。除了用来改简单的单文件配置
    loryyang
        63
    loryyang  
       19 天前
    IDE + VIM 插件呀,都不是老古董了,没必要拒绝 IDE 的快乐
    hzjseasea
        64
    hzjseasea  
    OP
       19 天前
    @jdhao 好的谢谢,之前确实太浮躁了
    wupher
        65
    wupher  
       19 天前
    vim 也有插件管理包。使用对应工具,插件的管理与更新也更方便。

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

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

    目前觉得难受的,是中文,或者说非英文环境吧。vim 对于中文和日文的支持都不好。对于 word 的理解不是太准确。
    ww2000e
        66
    ww2000e  
       19 天前
    hzjseasea
        67
    hzjseasea  
    OP
       19 天前
    @ww2000e 好的谢谢
    flysp
        68
    flysp  
       19 天前
    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  
       19 天前 via Android
    何苦折磨自己,IDE 的快捷键已经够好用了,还没有什么学习成本。
    lingxi27
        70
    lingxi27  
       19 天前
    懒人可以用 ideavim 挺不错
    hronro
        71
    hronro  
       19 天前
    @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  
       18 天前
    7 年 vimer, 从 vim 到 neovim, 现在干活超级慢 🤣
    IsaacYoung
        73
    IsaacYoung  
       18 天前
    我之前也折腾 后来发现没有 vscode + vim 实用 就不折腾了
    jdhao
        74
    jdhao  
       18 天前 via Android
    @acdfjelxe 怕是个假 vimmer ,我三年都用的飞起🌝
    acdfjelxe
        75
    acdfjelxe  
       14 天前
    @jdhao 干活哪有玩插件快乐
    jdhao
        76
    jdhao  
       14 天前 via Android
    @acdfjelxe 一起玩啊,我的配置 https://github.com/jdhao/nvim-config
    OSDI
        77
    OSDI  
       9 天前
    @lancelock #55 遇到过类似的,最后发现是 auto-pairs 的问题,换成了 Raimondi/delimitMate
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1112 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 100ms · UTC 21:13 · PVG 05:13 · LAX 13:13 · JFK 16:13
    ♥ Do have faith in what you're doing.