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

分享篇文章:为什么我会使用 Vim ?

  •  7
     
  •   skywind3000 · 2022-08-27 01:36:11 +08:00 · 18812 次点击
    这是一个创建于 814 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2022-08-28 00:36:35 +08:00

    42楼的 @daveh 给我回了一长篇,

    我强调的是 Vim 的扩展性,如何方便的让我扩展,他肤浅的理解成 vim 能做哪些, 然后按照 "Vim 只能做这些事情“ 来反驳,显然显然既不理解 Vim,他自己的 IDE 他也没弄明白。

    浮窗类型提示,包括 auto 类型:

    还有自动错误提示,底下一行显示。

    编译运行

    “这个不知道该说什么?只能说他敲了这么多字,我一个鼠标点击、或者快捷键就完成。”

    他完全没理解 tasks 系统是怎么回事情,建议看看 vscode 的 tasks 系统,这个对于大 JB 是新东西。

    敲不敲字根本不是重点,Vim 里绑定快捷键就是一句话的事情,我敲字是演示当前执行哪个任务。 同时表明任务多了可以用模糊匹配浏览任务有哪些,当任务多快捷键记不住很管用。

    合着他还真以为连个快捷键都不支持么,可定制的任务系统,大 JB 里没有的新概念,不是大 JB 那种定义外部工具那么简单的东西,只能说他完全没看懂。

    “用 JB 系,我写代码都不用通过随时编译去检查代码写对没有,不管写 Java 还是 C++还是其他语言,你把 IDE 提示标红的 Error 改完,等到构建时一次性编译通过,就是这么爽。”

    对大 JB 没有的任务系统不理解,还瞎扯什么实时代码检测,他说的这个功能叫做 linter,我第一张图片就演绎了,最下面一行,vim 里能做这事请的插件一大堆:

    看到没,还 ”就是这么爽“,还说自己是啥 "老 vim 党" ,vim 都没用明白的 "老 vim 党" 就是这么爽,无知真爽。

    自动格式化

    “严格说 PyCharm 这个功能是代码语句的自动补齐,除了自动格式化之外,还能自动补齐代码块结束符,比如 " ) ; { } 等等;如果处于代码提示选函数阶段,还能一步补齐函数名及后续代码块结束;如果写了多行,也是一次性全部格式化补全。不太相信他脚本能学到了这个程度。”

    他完全搞混了,括号引号和结束符号补全 vim 里一大堆,比如 endwise,auto-pair,还有基于语义的结束补全,只是我不爱用,没给他展示而已。

    自动帮助

    “关于文档说说,用 JB 甚至不用自己去集成,安装对应插件就行,如 man page viewer/dash 插件。 另外 IDE 自身也提供了大量丰富的文档集成,比如他例子中的 python ,直接鼠标放上去就能看,还不满意点提示中链接查看完整文档,都不用麻烦的切换到 Dash/Zeal 窗口去看”

    他以为只有大 JB 才有么?Vim 里浮窗显示文档:

    他真以为 Vim 没有么,可见这个 “老 Vim 党”,用那么多年 Vim 也没用明白,再来一个:

    我扩展 cppman 集成是因为 cppman 的内容来自 cplusplus.com / cppreference.com ,内容更扎实。我做 dash/zeal 集成式因为 dash/zeal 包含 50+ 种语言,可以弥补上面的不足。

    我一路再说 Vim 里可以方便的扩展功能,我根本不在乎你大 JB 有没有 cppman/zeal/dash,我在 Vim 里想有就有,今天我加了 cppman 明天我可以加 tldr 或者 cheat.sh 文档,而他只能等着别人喂它,大 JB 有了他才能用。

    大 JB 不支持,就傻眼了,只能嘴硬 “自己用不上”,

    最后,远程编辑

    "这种就远程开发了,JB 的搞个 Gateway ,体验完整 IDE 的功能。"

    都跟你说了是 “临时需求”,我在外网上百台服务器里跳来跳去,每台有需求就弄一下,你要在外网正式服务器上给我每台弄个大 JB 的 Gateway,公司的运维不把你拍死才怪。

    195 条回复    2022-09-02 21:31:17 +08:00
    1  2  
    LxExExl
        1
    LxExExl  
       2022-08-27 01:51:08 +08:00   ❤️ 13
    谢谢楼主,第一个例子就把我劝退了


    例子 1:格式化代码

    比如我看 html 的时候有时候很混乱,需要格式化一下,我知道有专业的格式化软件,懒得费时间找了,直接几行 vimscript 搞定:

    function! Html_Prettify()
    if &ft != 'html'
    echo "not a html file"
    return
    endif
    silent! exec "s/<[^>]*>/\r&\r/g"
    silent! exec "g/^$/d"
    exec "normal ggVG="
    endfunction
    随手一段小代码,然后配置给 F12 ,碰到 html 直接 F12 就完成格式化了,根本不用费力找工具。



    那两行正则表达式盯了一分钟我也没看懂。
    考虑到用 VIM 需要自己整这些,还是 VS Code 找插件吧...
    MajestySolor
        2
    MajestySolor  
       2022-08-27 01:53:19 +08:00
    vscode 挺好,已经好多年没碰过 vim 了
    ltkun
        3
    ltkun  
       2022-08-27 01:54:33 +08:00 via Android
    世界上有三种人 一种 Vim 一种 Emacs 一种其他
    LindsayZhou
        4
    LindsayZhou  
       2022-08-27 01:58:14 +08:00
    看起来圣战还没有结束,我主要用 Emacs 。
    OrgMode 非常方便,我的 Todo ,笔记之类,差不多都用 org 在管。
    Emacs 的扩展能力真的很惊人,之前看到过在 Emacs 里跑 TG 的插件。甚至看过在 Emacs 里跑 X11 ,起了一个 Window Manager 。
    如果没接触过函数式编程,Elisp 也是一个比较好的开始,虽然我不会,不过我这么觉得
    BeautifulSoap
        5
    BeautifulSoap  
       2022-08-27 02:04:44 +08:00 via Android
    lz 的标题是为什么自己要用 vim ,所以可能像 lz 这样特别喜欢折腾的人的话 vim 会挺合适的。不过我觉得 vim 依旧活跃的一大原因还是连上服务器改文件是刚需,而在这方面会 vim 的话的确会方便多
    devtiange
        6
    devtiange  
       2022-08-27 02:06:42 +08:00   ❤️ 5
    恕我直言: 楼主这个 Html_Prettify 算个哪门子的 prettify ?
    microxiaoxiao
        7
    microxiaoxiao  
       2022-08-27 02:10:13 +08:00 via Android   ❤️ 1
    这老哥不是 kcp 作者嘛,厉害哟
    agagega
        8
    agagega  
       2022-08-27 02:27:44 +08:00 via iPhone
    Vim 和 Emacs 强大的原因在于他们的脚本、配置、命令是一体的,自身其实是脚本语言的运行环境
    weak
        9
    weak  
       2022-08-27 02:28:07 +08:00 via iPhone
    原来是 kcptun 作者 流弊 不过有点像原教旨主义者
    gamesover
        10
    gamesover  
       2022-08-27 02:34:01 +08:00
    @BeautifulSoap 服务器在线改东西基本唯一选择就是 vi 吧,好像也能用 nano ?

    vs code 能像 vi 这样用吗?好像不能吧
    gamesover
        11
    gamesover  
       2022-08-27 02:34:32 +08:00
    @ltkun 以前是的,现在我要说多了一个流派 vs code ,第四种才是其他

    :)
    lostberryzz
        12
    lostberryzz  
       2022-08-27 03:13:02 +08:00
    年轻人基本都是 VSC/JB 真香
    defel
        13
    defel  
       2022-08-27 05:01:57 +08:00 via iPhone
    是因为没有办法,开发都在大型服务器上,只能 ssh 上去开发。本地 Mac 除了自带的,就只装了一个截图软件,硬盘等于空的。
    SeaTac
        14
    SeaTac  
       2022-08-27 05:31:55 +08:00
    @LxExExl
    html/json 直接 google 一个 prettier 就行…都是网页
    luckycat
        15
    luckycat  
       2022-08-27 05:36:00 +08:00
    Emacs 值得用一生的软件。我不会向使用 VS Code 的人推荐 Emacs ,但我会向只用过 Vim 很喜欢 Vim 但没用过 Emacs 的人推荐 Emacs 。
    zidian
        16
    zidian  
       2022-08-27 05:55:52 +08:00
    动不动就 1 、2 小时写个插件、脚本,不懂劝退多少人
    qeqv
        17
    qeqv  
       2022-08-27 06:13:01 +08:00   ❤️ 12
    我如何在服务器上用 vim:vim xxx -> 复制出来改 -> i -> 删掉原来的然后复制进去 -> esc -> :wq
    wizardyhnr
        18
    wizardyhnr  
       2022-08-27 06:21:29 +08:00   ❤️ 1
    学 vim 的附带好处就是顺便学会了 ranger 和 vimium 。会用的真香,不想用的就用别的呗。互不影响。
    darksword21
        19
    darksword21  
       2022-08-27 07:40:18 +08:00 via iPhone
    Emacs 用户加一
    daveh
        20
    daveh  
       2022-08-27 07:41:25 +08:00 via iPhone
    @agagega #8 这种说法是不了解其他 IDE 的更强大的脚本功能,像 JetBrains 系原生支持 groovy script ,可以嵌入 Java 代码执行,可控制 IDE 、甚至与底层 OS 交互,写得好的 groovy script 简直就是一个小插件;另外也支持 JS 脚本,当然也能调用 shell 。
    而 VS Code 基于 Electron 搞的,估计原生支持 JS 脚本?(不了解,猜测的)
    makelove
        21
    makelove  
       2022-08-27 08:18:38 +08:00
    就如我这部分人喜欢用 linux 和命令行远甚于 windows,感觉自由而有效率,但另一些人可能就理解不了

    但我也不用 vim ,主要是我现在用的 vscode 我足够满意了,不象之前用 windows 非常难受才有足够动力找替代,所以导致简单试了几次 vim 都没入门,现在彻底放弃治疗了
    shijingshijing
        22
    shijingshijing  
       2022-08-27 08:19:09 +08:00
    我们还是来谈谈随机字符串的生成吧
    kimera
        23
    kimera  
       2022-08-27 09:12:48 +08:00
    @shijingshijing 人是猴子变过来的,所以没毛病~
    jdhao
        24
    jdhao  
       2022-08-27 09:36:49 +08:00 via Android
    @daveh 所以你写的 groovy script 呢?
    frankyzf
        25
    frankyzf  
       2022-08-27 09:51:16 +08:00 via Android
    对于普通用户 Vim 只是一种 key mapping ,和包括 vscode 在内的 ide 不冲突啊。一般人谁没事用 vim 开发?
    PTLin
        26
    PTLin  
       2022-08-27 09:55:44 +08:00
    这作者我记得是 vim/neovim 阵营里的纯 vim 派,他甚至都不赞同 nvim 里引入 lua 的做法,
    raptor
        27
    raptor  
       2022-08-27 10:08:49 +08:00
    我用 VIM 只是因为习惯了操作方式,基本不做扩展,该用 IDE 还是用 IDE……当然 IDE 里必须有 VIM 插件。不过最近 IDEA 里的 VIM 扩展用不了找不到原因很头疼。
    PTLin
        28
    PTLin  
       2022-08-27 10:15:40 +08:00   ❤️ 1
    @LxExExl 这个准确来讲不是正则表达式,第一行的 s/<[^>]*>/\r&\r/g ,是严格匹配<xxxx>,然后将这个匹配替换成 回车 匹配内容 回车 的样子。然后全文替换。第二行的 g/^$/d 是 global 模式,删除所有空行。
    haoliang
        29
    haoliang  
       2022-08-27 10:22:47 +08:00
    昨晚我刚起草了个自用的 dirvish 实现,忍不住要说,在 nvim lua api 、sumneko_lua 、活跃的社区、丰富的参考插件等等的加持下,扩展 nvim 确实是种乐趣。
    我是个学不会 vimscript 的可怜人,也是因为没有 lsp ,我用 vimscript 写起来费劲,遇到问题又没地方问。
    我目前的插件只有 20 个左右,很多功能都是自己用 lua 实现的; nvim 的启动时间 35ms ;整体看起来完全掌控的感觉真爽。
    MengiNo
        30
    MengiNo  
       2022-08-27 10:32:57 +08:00
    支持 vim 最大的理由几乎无一例外都是可定制化 + 高自由度。但个人还是觉得美化的尽头是原生,毕竟在云时代可迁移性非常重要。而 vim 这种纯个人定制的,一旦我让你用我的电脑写一段 demo ,或者连到我的服务器帮我看看什么东西。或者在外面紧急用 iPad 改点什么,这不就抓瞎了么。还是说我对 vim 了解不足,判断有误?

    作为一个 vsc 党,和同事一起 debug 时,哪怕他用的是 jetbrain ,在跟一些代码时候,我对一些函数跳转、断点啥的操作还是不太熟悉,都觉得操作不是很方便。而依赖高度自定义的 vim 用户,失去了所有熟悉的东西的情况下,此时是否会感到别扭。

    连到某个服务器更是如此。vsc remote 的方案是无论连到哪个服务器,客户端一直是自己本机的这个,这样你的插件、配置一直是统一的。vsc 只是做了一个相当于画面映射罢了。而 vim 应该是每个服务器都得装一个,那不就得每连一台服务器都复制一份配置文件,装一堆自定义插件,先把 vim 改造一番吧。(完了可能还得删掉,不然其他用这个服务器的人不得懵逼)。特别是进容器内,绝大多数容器肯定都不会有 vim 的(也不会有 ssh ),如果要现场装,再自定义配置,那也太怪了。

    当然我对使用什么工具本身没啥偏见或者想法,每个人都可以打造自己舒适的工作环境。只是单纯觉得现在不想以前大家都用 eclipse ,现在可选择的东西多了,可迁移性还是需要被考虑到的一点。啥都定制确实很酷也很爽,但是也限制了应用场景。
    caskd
        31
    caskd  
       2022-08-27 10:49:14 +08:00
    vim 快捷键, 指令, 指令记录会很好用. 可以提高一定的编辑效率.
    个人建议对 vim 的使用可以到此为止了.
    因为如果你把 vim 作为一个单纯的文本编辑器的话, 学习成本低, 见效快.
    但如果想进一步, 需要折腾, 而这些折腾, 你用 vscode 加里面的插件或许可以同样达到效果, 不需要那么折腾的同时, 效果可能还比想象的好. 比如你去折腾文本格式化, 那么直接 Prettier 不是更快更好么.

    还有一个问题是社区, 使用 vim 的不多, 折腾 vim 插件的就更少了.
    可能你出了问题, 或者想进一步更改什么东西, 能找到现有可靠解决方案的可能性相对比较低.(就算能找到, 那么可能又是一顿折腾, 远不如 vscode 上找个插件来得简单实在).

    并不是说折腾 vim 不好.
    在我看来, 你有精力折腾 vim, 不如把这精力花在其他技术上.
    liuhuansir
        32
    liuhuansir  
       2022-08-27 11:05:38 +08:00
    @MengiNo 虽然我也不赞成高度定制化的 vim ,但是你用 vscode 连任何一个服务器,等于是给每个服务器都装了 vs-server ,甚至多数插件也一同安装了,而定制化的 vim ,也可以一键安装,没比你慢多少,主要还是定制一个自己用的舒服的 vim 太耗精力了,如果本身就对这个很感兴趣,那当然没话说,就怕跟风的人折腾半天,最后搞了个半成品
    fy
        33
    fy  
       2022-08-27 11:19:46 +08:00
    几年前 VIM 的补全很慢,那时候我写 Python ,用 jedi 补全
    卡的受不了,比 pycharm 都慢多了
    于是就弃坑了
    LindsayZhou
        34
    LindsayZhou  
       2022-08-27 11:23:52 +08:00   ❤️ 3
    vim/emacs 配置同步挺简单的,配置都在 .vim 或 .emacs 下面,做个 git 仓库 clone 一下就好了。
    耗费精力我倒没怎么觉得,大部分配置都是慢慢积累起来的,没有马上就写得很完美,说不定还是把折腾的过程当作放松娱乐。

    我有很多这种定制化很强的软件,sway weechat neomutt/offlineimap/notmuch rofi/wofi mpv mpd ,用了很久才慢慢变成喜欢的样子。这样的软件会让我更加有安全感,不是被人养着的感觉。
    kinboy
        35
    kinboy  
       2022-08-27 11:37:11 +08:00 via Android
    OP 的一个随手都够我折腾个几天的了
    yannxia
        36
    yannxia  
       2022-08-27 11:47:42 +08:00
    @caskd VIM 快捷键值得学习,至于那些插件嘛··还不如用 vscode
    v2defy
        37
    v2defy  
       2022-08-27 11:50:40 +08:00
    vim 很好用,有时候也很烦
    vopsoft
        38
    vopsoft  
       2022-08-27 12:03:42 +08:00
    我就想问有没有有现成成定制好的版本,不然后这个学习成本实在太高了 丝毫不亚于重新学一门语言
    jdhao
        39
    jdhao  
       2022-08-27 12:08:00 +08:00 via Android
    @vopsoft 来 nvim ,lua 配置,lua 至少算一门正经语言,配置可以看看 lunarvim
    s524256521
        40
    s524256521  
       2022-08-27 12:10:37 +08:00 via Android
    要不是触控板位置太别扭导致手腕疼,我也不会用 vim
    lanlanye
        41
    lanlanye  
       2022-08-27 12:18:43 +08:00 via iPhone
    Vim 这样的文本编辑器在代码重构上和 IDE 相比有天然劣势,接下来怎么样需要期待 LSP 的发展,如果 LSP 实现大一统,那 Vim 原生的编辑体验是强于 IDE 的。
    格式化这种,集成现有的工具就够了,也不是非要自己写。
    daveh
        42
    daveh  
       2022-08-27 12:25:34 +08:00 via iPhone   ❤️ 16
    作为一个“老”vim 党(当然水平差勿喷),现已切 JetBrains 系,也来说说。主要还是号召大家有条件切成智能 IDE 去开发,节省折腾时间,把时间聚焦代码实现,早点写完回家陪老婆。
    没有知乎账号,就回在这,有心 V 友也可以帮转给作者看看。

    例子 1:格式化代码

    > html 格式化
    也表示还没看懂正则怎么就完成 html 格式化,只能说正则真强。
    另外有个疑问他这个脚本,怎么格式化嵌在其他代码比如 JS 中的 html 片段?还有如果嵌入的是其他语言不能用正则去格式化怎么办?
    而这用 JB 系的注入语言功能很容易完成,选择片段 Inject language ,接着格式化、代码智能提示等等都来了。

    > 写 C++ 函数实现
    同样他例子中已经有了类声明、怎么快速写 C++ 类函数实现头,其实根本不用这么复杂去处理文本,他需要的是一个智能 IDE ,能知道他还有一堆函数实现没写,例如在 JB 系中在 cpp 文件中按 Alt+Insert 生成代码,选对应函数,IDE 就自动把函数实现架子写好了,接下来就是填空。
    倒是我想,他写个复杂脚本也完成了这个功能,有一天我要改函数参数怎么办?删除实现头再重新导一遍?那函数调用处怎么办?得一个个搜索出来去改?用 JB 系的重构功能改函数签名,很容易完成。

    例子 2:功能完善

    > 脚本 asyncrun.vim 异步执行编译
    这个不知道该说什么?只能说他敲了这么多字,我一个鼠标点击、或者快捷键就完成。
    甚至甚至,用 JB 系,我写代码都不用通过随时编译去检查代码写对没有,不管写 Java 还是 C++还是其他语言,你把 IDE 提示标红的 Error 改完,等到构建时一次性编译通过,就是这么爽。

    例子 3:学习其他编辑器

    > 代码实时格式化
    这个他理解基本不准确,而且只学了个皮毛。
    严格说 PyCharm 这个功能是代码语句的自动补齐,除了自动格式化之外,还能自动补齐代码块结束符,比如 " ) ; { } 等等;如果处于代码提示选函数阶段,还能一步补齐函数名及后续代码块结束;如果写了多行,也是一次性全部格式化补全。不太相信他脚本能学到了这个程度。
    而且他也说错了,这个是 JB 全系标配功能,并不只是 PyCharm 的功能。

    例子 4:界面扩展

    > 加个主菜单目录
    vim 比较方便地方就是命令,加个菜单还不如直接上完整 IDE 。

    > 查看函数定义时,可以不跳转
    函数定义可以看了,那接下来能直接预览函数实现吗?能预览 C++宏展开的内容吗?能预览宏定义 enum 定义取值多少吗?能预览 C++ auto 的实际类型吗?能预览 C/C++ struct/class 占用内存的大小吗?能在写代码自动提示时,直接看候选函数的介绍文档和详细参数吗?等等。
    不是说费半天劲扩展了一个功能,其他功能也唾手可得,有些功能你是写脚本也写不出来。

    例子 5:集成外部工具
    这个集成没什么说的,基本功能。
    关于文档说说,用 JB 甚至不用自己去集成,安装对应插件就行,如 man page viewer/dash 插件。
    另外 IDE 自身也提供了大量丰富的文档集成,比如他例子中的 python ,直接鼠标放上去就能看,还不满意点提示中链接查看完整文档,都不用麻烦的切换到 Dash/Zeal 窗口去看。


    例子 6:解决实际问题

    > 远程服务器上临时编辑
    这种就远程开发了,JB 的搞个 Gateway ,体验完整 IDE 的功能。


    个人很钦佩钻研精神,放以前用 vim 时也会很赞他,但搞了这么多年开发下来,发现大道至简,还是不如用个功能齐全智能 IDE 省事。
    广大 V 友 /vim 友有条件的,可以试试切换 JB 系,听老司机的没错,早点搞完回家陪女朋友 /老婆孩子。
    dingwen07
        43
    dingwen07  
       2022-08-27 12:28:36 +08:00 via iPhone   ❤️ 1
    我如何在服务器上编辑文本:
    用 bitvise ssh client 连接
    双击文件在 vsc 里编辑
    ctrl-s 保存
    daveh
        44
    daveh  
       2022-08-27 12:40:02 +08:00 via iPhone
    @jdhao 其实我需要的功能基本上 IDE 自带的、要不就插件搞定。讲真 groovy script 写的比较少,不过体验了一下感觉很强,之前写过一个,在每行或选定的文本行前面加一个 1. 2. 3….这样子的序号,一般方法是三方插件,但我用脚本配合敲击下键就搞定了,思路你可以看看我以前回贴,脚本在公司服务器,不方便取出来。
    20015jjw
        45
    20015jjw  
       2022-08-27 12:55:29 +08:00 via iPhone
    我比较菜
    所以 vim 只用 movement 和别人写好的无脑插件
    所以 ide/vscode 开 vim 插件很香
    LindsayZhou
        46
    LindsayZhou  
       2022-08-27 13:11:25 +08:00
    @vopsoft #38
    spacevim 或者 spacemacs
    hxy100
        47
    hxy100  
       2022-08-27 13:49:15 +08:00
    膜拜大佬,一直在看楼主写的文章和脚本
    XIVN1987
        48
    XIVN1987  
       2022-08-27 13:59:42 +08:00
    我记不住那么多快捷键,只能记住最常用的 Ctrl+C/V/X/Z 这些常用快捷键,,

    所以还是 sublime/vscode 里面的 command palette 适合我
    QlanQ
        49
    QlanQ  
       2022-08-27 14:16:37 +08:00
    vim 就是一个文件编辑器,不要让他干 ide 的活吧,真的太累了
    QlanQ
        50
    QlanQ  
       2022-08-27 14:17:08 +08:00
    而且这种没有图形化的,改一个文件还可以,改一个项目,那真就是痛苦
    xuanbg
        51
    xuanbg  
       2022-08-27 15:25:51 +08:00
    有和我一样只用 vi 不用 vim 的么?
    justin2018
        52
    justin2018  
       2022-08-27 17:43:23 +08:00
    只会用

    i dd wq! q!

    平常就修改下 Nginx 的配置 😶
    charlie21
        53
    charlie21  
       2022-08-27 17:59:51 +08:00
    单靠 “功能强大” 就能畅销的时代已经过去了

    现在,信众多寡取决于谁门槛低 参考

    为什么大家都认为惠能的“本来无一物”要比神秀的“时时勤拂拭”要高明?
    http://web.archive.org/web/20220105181009/https://www.zhihu.com/question/31008439/answer/2075213934
    akira
        54
    akira  
       2022-08-27 18:12:24 +08:00
    为啥你们要直接连服务器去改代码。。
    charlie21
        55
    charlie21  
       2022-08-27 18:13:46 +08:00
    瑞典人不管畅销与否,只管东西是否好用。

    “畅销东西,各有各的好

    不畅销东西,它是有问题的。” 这是人们聊的

    但是,不畅销东西,也有好的点 也是各有各的好,畅销东西 也有问题 也是各有各的问题。

    甚至,不畅销东西的好的点正是基于它的问题:人们喜欢的是它定义问题的方式。

    瑞典人认为:所有东西都有自己的好,所有东西都有自己的问题。瑞典人认为,从原理上,但凡东西就是有缺点的,这与畅销与否无关:畅销东西 —— 畅销东西并不是没有缺点,畅销东西恰恰是驾着自己的缺点而畅销起来的。

    这个东西畅销,就是发生了这个东西驾着自己的缺点畅销起来的。这一点 很多人无法接受,人们认为 “只有没缺点的东西才能畅销” -- 如果人们真的这么认为,那么人们脑子有病!
    v2defy
        56
    v2defy  
       2022-08-27 20:09:29 +08:00
    @vopsoft 推荐 astro nvim ,个人感觉这个是最实用最好看的,比什么 space vim ,lunar vim 好得多
    lululau
        57
    lululau  
       2022-08-27 20:31:08 +08:00 via iPhone
    vim 最受不了的是 vim script 的语法,所以我在 8 年前转到了 emacs 阵营,不过现在有了 nvim ,倒是也可以再尝试一下,不过我仍然建议真正的 vim 用户了解一下 emacs ,从 spacemacs 开始, 因为 spacemacs 默认集成了 evil ,一个在 emacs 里模拟 vim 的键绑定和其他操作方式的插件,你可以像使用 vim 一样使用 emacs 。org mode 和 magit 真是两个神器,可能这里说的大多数编辑器都可以通过插件扩展,你甚至也可能见过某个插件还有自己的插件扩展机制,但是你一定没见过某个插件的插件还有自己的插件,更没见过某个插件的插件的插件还有自己的插件吧,你也一定没见过一个计算器的手册页有二十万字吧

    不过即便是对于 emacs 用户,vim 的 modal editing 和 text object 也是受用一生的财富
    imycc
        58
    imycc  
       2022-08-27 20:57:18 +08:00   ❤️ 1
    以前一直把 vim 当做主力编辑器,大概五六年。那会没有趁手的远程开发工具,直到 vscode 的 remote development 发布。然后我就彻底叛变到 vscode 了。

    说一个最直观的改变。我给 php 配插件,浪费了几天时间,效果还不尽人意。而换 vscode 的那天晚上,在插件市场随便点点点,就配好了常用的插件。这才是效率,什么乱七八糟的“我随便就写出来一个插件”都是扯淡。

    现在的开发部署流程决定了,在生产环境服务器上没有什么“重编辑”的工作。运维除了救火,也不会直接在生产环境改配置。vim 那常见几个命令学完就完事了。而开发环境装个 vscode-server 根本不是事,就算内存泄露了又能怎么样?

    编辑效率上,vim 的编辑模式确实有独到之处,搞个插件就完事。至于那些正则替换和宏操作,sublime/atom/vscode 的多光标操作+正则的模式,我认为才是正道,用 vim 构思那些规则的时候,我用多光标早就操作完了。
    haolongsun
        59
    haolongsun  
       2022-08-27 21:35:48 +08:00
    我用 vim 的原因是笔记本经常外出,然后省电。。。,vim 一旦熟练掌握,自认为比 ide 效率高,不用点点点了。
    我还见过最变态的,除了 java ,其他都用 vim ,只改几行某些默认配置,lsp 都不用的,裸写程序,这个师傅干了二十几年了,他说他开发要用的库函数他都记得一清二楚。
    haolongsun
        60
    haolongsun  
       2022-08-27 21:42:51 +08:00
    @v2defy astro 是我体验过最好的 nvim 开箱即用了,++,不过 helix 也很香,也开箱即用。
    christin
        61
    christin  
       2022-08-27 22:12:54 +08:00
    怎么没人提 ideavim ,把 vim 的优点集成到 idea 中,开发效率加倍!
    hankli
        62
    hankli  
       2022-08-27 22:48:01 +08:00
    @christin ideavim +1 ,另外可以直接映射 idea 的快捷键非常的香啊
    dcsuibian
        63
    dcsuibian  
       2022-08-27 22:52:32 +08:00
    我更偏向于使用专用工具。

    如果我这么用正则表达式格式化 HTML ,我就会很担心正则写得对不对,或者有没有我没考虑到的特殊情况。而用编辑器插件或 IDE 时我就不会太担心。

    虽然人都会犯错,但是专用工具的开发者应该会比我想的更远,也能收到更多人的反馈。

    有点像把车交给老司机开。
    closedevice
        64
    closedevice  
       2022-08-27 23:38:33 +08:00
    @haolongsun 想起了多年前刚工作带我老大哥,所有开发都在 emacs ,不用任何提示,各种系统函数了然于胸,全程没见过成用一次鼠标,当场给跪了~
    MengiNo
        65
    MengiNo  
       2022-08-28 00:30:49 +08:00
    @liuhuansir 主要是如果是容器的话,没有 ssh ,复制那个 .vimrc 就很不优雅。vsc 虽然也要下载,至少是鼠标点点剩下他自己全自动。虽然也会留下个 vs-server ,但至少这玩意不会影响到别人。其实我在公司内网大部分机器都留下了这个,然而至今估计也没人发现。而如果是 .vimrc 一变,下一个上来的人肯定马上就蒙圈了(虽然改基础操作键位映射概率不大)。

    我也不是说 vsc 多好,确实就是和你说的一样,喜欢折腾没话说。但是很多人都跟风去抄个作业,找个什么大神的配置文件,有点本末倒置。但是如果自己从零配起,确实也就和楼上几位说的,还不如用 ide ,有这时间不如去研究点别的或者早点下班。

    我前一段也了解了下,好像 nvim 也有人开源了完全兼容 vsc 的 devcontainer 那套配置文件的 remote container 机制,同样的,也有人为 vsc 写了 multi cmd 之类的增强 vim 模式的插件。其实没必要只用一个,就像我相信很多人的电脑里都会留一个 sublime ,哪怕早就不用它来写项目了。
    skywind3000
        66
    skywind3000  
    OP
       2022-08-28 00:37:28 +08:00
    @daveh 上面给你 append 了一段回复你。
    liuxu
        67
    liuxu  
       2022-08-28 00:53:36 +08:00
    刚用 vim 写完 systemtap demo

    既然是 skywind3000 大佬发帖,那意见我肯定是完全同意的

    不过虽然我每天都用 vim ,但 vscode 和 doomemacs 才是人类最终的信仰
    ColorfulBoar
        68
    ColorfulBoar  
       2022-08-28 01:46:16 +08:00
    太经典了:写个个位数行数的 C with class 证明 vim 也能写 C++,然后把这种 C with class 代码堆上一万行证明 vim 也能写非微型 C++项目。你问我咋知道是 C with class 的……随便看看这几个图里面有啥:在一个非历史遗留项目里面能看见 stdio.h, main(void), wcslen, 传参往进传 const wchar_t*,星号贴着变量名写,裸指针满天飞 ownership 一团糟,auto 仅用于演示自己宁可偷偷把 size_t 隐式 cast 成 int ,NULL ,以为 inline 是建议编译器内联……除了最后那个跟[Google C++ Style Guide]( https://google.github.io/styleguide/cppguide.html#Inline_Functions)同一水平的离谱错误,剩下的当然语法和语义上都是“正(能)确(跑)”的,但这么写的 C++是啥样懂得都懂,我就不逐行品鉴了

    C++这种折磨 IDE 的东西,只要用点复杂的 template 很容易就能把 Clion 的类型推导提示给炸了,这种时候 LSP 什么表现我都不敢想(所以那帮让人用 vscode 写的已经很恐怖了),至于连 LSP 都不一定有的……算了算了不说了
    skywind3000
        69
    skywind3000  
    OP
       2022-08-28 02:57:28 +08:00   ❤️ 3
    @ColorfulBoar C 艹 er 怎么到处都喜欢好为人师,不要来规定 C++ 代码该怎么写,我爱怎么写怎么写,BasicBitmap.cpp 就是 c with class ,怎么着了,十多年前写的代码,保证 c++ 98 也能编译,你没见路径前面的 vintage 单词么?

    1 ) stdio.h 有啥问题?我爱用 printf 。
    2 ) main(void) 怎么了?写着好看。
    3 )参数里 const wchar_t * 再正常不过,xxx_ptr 别乱用,接口部分如果跨二进制你还给我写一堆 xxx_ptr 的话你不怕死的很惨么?
    4 )我本来就不喜欢写 auto ,auto 你写的时候爽,读的时候痛苦。
    5 )截图里哪里有 inline ?你看花眼了吧?

    你只知道 xxx_ptr 不理解它的问题,我早就回答过特定的地方限制它的原因:

    https://www.zhihu.com/question/33084543/answer/2197934746

    不同层次的应用使用有不同风格 C++ ,你写上层业务怎么爽怎么来,越靠近底层,你会发现越是要控制,你只在一个领域开发,当然只觉得一种写法合适,你多接触几个领域就知道不同了。

    越底层的越是要精细控制,你看看 v8 核心代码里是不是到处指针飞?各种图形引擎里是不是指针飞?某些地方要管理资源也是自己做的引用计数,为啥?想过没?

    不要觉得天底下的 C++ 就该一种写法,是你接触的项目类型不够多,就是那一类,好好写你的代码吧,别一天到晚装语言律师到处教别人做人,就跟有些中国人特别爱给其他中国人指正英文水平一样,招人嫌,人家水平更高的 natvie 都没那群鸟人烦。

    至于截图里的 PyStand.cpp 本来就是个随意的小项目,我非常清楚我在干什么,我打 int 可以少打两个字符,传 const wchar_t * 是因为不想四处带个套。

    最后,Vim 早就支持 LSP 了,你不知道么,我上面的类型就是 clangd 推导出来的。
    hbdh5
        71
    hbdh5  
       2022-08-28 07:35:19 +08:00
    一路看下来的感觉就是编辑器圣战这个话题的活力还真是生生不息。我觉得可定制性,扩展性这个东西见仁见智吧,可定制好是好,但你为了这个先得付出学习成本,比如 vimscript 什么的。如果不考虑成本的话那所有开源的代码都是同等可定制性的。而论其学习成本以传统 gui 逻辑为界面基础的各个编辑器是有绝对的优势的。
    bwangel
        72
    bwangel  
       2022-08-28 08:17:29 +08:00
    刚刚写博客的时候,正好遇到个痛点,正是它让我放弃了 vim 转向 vscode

    1. vim 对 markdown 高亮的支持并不友好,高亮经常出现问题,被 ``` 包裹起来的块不高亮,没有被包裹的反而高亮了。退出重进可能就好了。



    2. vim 中 md 的代码块无法进行语法高亮,我想像 vscode 一样,对一块 C 代码进行高亮,vim 也无法做到

    DonaldY
        73
    DonaldY  
       2022-08-28 08:27:03 +08:00
    所以我使用 emacs
    LonnyWong
        74
    LonnyWong  
       2022-08-28 08:39:31 +08:00 via iPhone
    @skywind3000 大佬用哪个 lsp 和 server ,或者其他的?我之前用 ycm ,现在试试 vim-lsp ,用 pylsp 大约要两三秒才弹出补全提示,不是很理想的样子。还没来得及去尝试 C/C++ 的。
    popil1987
        75
    popil1987  
       2022-08-28 08:47:00 +08:00
    vim + doomemacs
    ssh 登陆远程开发微信小程序和 iOS 应用
    都是 vim 键位,不用太多改变
    可以互补,一些语言有的 vim 支持好,有的 emacs 支持好
    学了用一辈子
    jdhao
        76
    jdhao  
       2022-08-28 09:16:19 +08:00 via Android
    @LonnyWong 新人一般建议用 coc.nvim 🌝
    qiumaoyuan
        77
    qiumaoyuan  
       2022-08-28 09:41:29 +08:00
    我的 vim 只有一个插件:NERDTree. 足够用,用了十来年。
    LonnyWong
        78
    LonnyWong  
       2022-08-28 09:42:38 +08:00 via iPhone
    @jdhao vim 老用户了,不过 lsp 还是新用户,抽空试试 coc.nvim 是否好用,是时候升级一波 vim 配置了。
    ChrisFreeMan
        79
    ChrisFreeMan  
       2022-08-28 10:27:23 +08:00   ❤️ 1
    @LonnyWong 刚从 vim-lsp 踩坑出来,bug 有点多(我是用来写 python ),建议直接上 neovim ,那玩意是真的好用.
    研究下这几个插件你就能起飞了。
    'neovim/nvim-lspconfig'
    'williamboman/nvim-lsp-installer'
    'nvim-treesitter/nvim-treesitter'
    haochen2
        80
    haochen2  
       2022-08-28 10:45:42 +08:00
    俺用 vim 只写脚本,写代码太费劲了
    L4Linux
        81
    L4Linux  
       2022-08-28 10:50:01 +08:00 via Android
    @ColorfulBoar 现在哪个 IDE 索引 C++不是用的 LSP 啊?你觉得某编辑器慢,不外乎自己不会配罢了。
    LonnyWong
        82
    LonnyWong  
       2022-08-28 10:55:33 +08:00 via iPhone
    @ChrisFreeMan neovim 我也试了,lsp 的速度感觉差不多,可能是项目大,慢在 pylsp 。bug 之类不清楚。
    ffire
        83
    ffire  
       2022-08-28 10:56:08 +08:00 via iPhone
    @ColorfulBoar “stdio.h, main(void), wcslen, 传参往进传 const wchar_t*,星号贴着变量名写,裸指针满天飞 ownership 一团糟,auto 仅用于演示自己宁可偷偷把 size_t 隐式 cast 成 int ,NULL”
    我怎么觉得都不是什么问题,这是说 C++有“标准写法”吗?! c with class 也没啥问题啊。看来这位兄台如果看到有人如果用 C++甚至不用类以及各种“新特性”,只用操作符 /函数重载,估计会气疯了,滑稽一个,不说了,无意争执,溜了溜了。
    ChrisFreeMan
        84
    ChrisFreeMan  
       2022-08-28 11:00:51 +08:00
    @LonnyWong 可以试试微软的 pyright, 我只用这个,要快很多。
    Imindzzz
        85
    Imindzzz  
       2022-08-28 11:01:01 +08:00
    @defel 这个理由我看到很多次,所以真诚的请教一下,可以写个脚本来同步代吗。
    就是说本地 IDE 编辑代码,保存之后自动同步,然后切换到 ssh 窗口运行和调试。
    或者 vscode remote 这种能行吗?
    736531683
        86
    736531683  
       2022-08-28 11:09:21 +08:00
    刚来公司不让远程 ssh ,只能 vim 的时候,我几乎什么都干不了,尤其 python 这种需要对准缩进的...vim 就是折磨。
    searene
        87
    searene  
       2022-08-28 11:11:50 +08:00   ❤️ 1
    vim, emacs, vscode, idea 我全都用,不同的场景用不同的工具。说 vim 扩展性强的,一般是没有用过 emacs 。emacs 几乎每个内部函数都有扩展点,这几乎就是一个披着文本编辑器外衣的操作系统。但是我照样不会把 emacs 当成主力编程工具。每个工具的应用场景不一样,没必要一定就得用哪个。
    closedevice
        88
    closedevice  
       2022-08-28 11:22:09 +08:00
    我歪个楼,楼主的浮窗是咋配置的?我这边浮窗中的=、|符号总是有一层黑色背景,比较别扭
    droppedbytech
        89
    droppedbytech  
       2022-08-28 11:28:14 +08:00   ❤️ 7
    看楼里回复,反思了一下自己,觉得很多人(包括我自己)都有的毛病就是自大以及觉得别人自大。明明 OP 只是分享一篇文章介绍一下自己用 Vim 的原因 /Vim 已经没有那么过时了,而且看得出对 Vim 、编辑器和软件工程是有很深的理解的(至少比我深),顺带安利一下 Vim ,就这也能引出一大堆喜欢家长式说教,教别人做事情的,只能说编辑器圣战恐怖如斯 :(
    《为什么“我”会使用 Vim 》这标题不清楚么,OP 也没说 IDE/VSCode 不好啊,也没不让别人用啊,反倒是好多 IDE 拥趸捧一踩一。好多扩展 OP 不也是看到 IDE 有顺手移植过来么,“有想法并用计算机程序实现”,这不是程序员的浪漫吗?非要天天 996 折腾那一点业务代码么,那生活也太无趣了吧。
    ColorfulBoar
        90
    ColorfulBoar  
       2022-08-28 11:34:30 +08:00
    @ffire #83 你就没看懂我那层楼在说啥……这个主题不是关于 vim 的么?我说的是 vim 这玩意面对复杂的 C++项目是不够用的,这些东西的集体出现说明项目本身没涉及到 C++里面折磨 IDE 的东西,vim 能在这种项目上用是因为项目简单而不是 vim 强大。我虽然看 C 很不顺眼,但如果这个主题里面的截图都是拿 C 演示的我一句话都不会多说的,毕竟我不怀疑能拿 vim 来写一个 C 项目。
    ffire
        91
    ffire  
       2022-08-28 11:36:53 +08:00 via iPhone
    @droppedbytech 说得有理。其实无外乎,什么编辑器“自己”用的顺手,所谓别人说好的东西,自己干活不顺手,也是白搭啊。
    jdhao
        92
    jdhao  
       2022-08-28 11:39:08 +08:00
    @droppedbytech 因为只会 IDE 没有掌握 vim 使用的人觉得不爽啊,他们不会所以觉得 vim 肯定有很多不如 IDE 的地方,肯定是你们 vimmer 强行洗地,怎么可能比我 IDE 用着还顺手,不存在的。像我们 vimmer 就不会鄙视用 IDE 的人,每个人选择合适自己的编辑器
    ffire
        93
    ffire  
       2022-08-28 11:44:28 +08:00 via iPhone
    @ColorfulBoar 不,你那层的语气和言辞不是认为我引用那段多少是有一些些问题的么?:)如果你没有这个意思,那就当我理解错了呗。另外为何 C++大项目不够用 vim 呢,不能用 vim 呢,很多大项目的程序员用 vim 来编辑代码。上面的 droppedbytech 说的挺好的,我也觉得顺手自己就行,除非项目组死规定咱们这个项目统一用某 IDE 哈,“大家别用别的哈”,有这样的项目组吗?😆
    droppedbytech
        94
    droppedbytech  
       2022-08-28 11:44:34 +08:00
    @jdhao Vim 和 Emacs 这本来的“对头”感觉现在反而非常和谐了哈哈,口水仗全转移到 IDE/VSCode vs Vim/Emacs 上了
    aguesuka
        95
    aguesuka  
       2022-08-28 11:45:55 +08:00
    你说的这些功能都可以在 JB 里用插件实现
    droppedbytech
        96
    droppedbytech  
       2022-08-28 11:48:54 +08:00
    @ffire 对啊,以用什么工具来彰显自己所谓的水平的,或者 DISS 别人用一些“装逼”工具的,都是二级管,反而是魔怔了。Linus 我是没听说过它“Fuck Vi”,Stallman 我也没听说过他“Vi(m) sucks”。内容和产出才是最重要的,工具只是不同层面的辅助而已
    PTLin
        97
    PTLin  
       2022-08-28 11:50:53 +08:00
    @droppedbytech 人之患,在好为人师呀
    ffire
        98
    ffire  
       2022-08-28 11:54:05 +08:00 via iPhone
    @droppedbytech 是啊。之前看直播,某业内知名大牛到现在还在用 VC6 的编辑器写码,我自己都会觉得不可思议,然而别人没觉得那妨碍了他的生产效率。
    defel
        99
    defel  
       2022-08-28 12:48:01 +08:00 via iPhone
    @xd199153 并不行,用的是一种专有的语言做底层开发,编译器都是公司团队开发的。本地哪种 IDE 都不能运行,只能在 Linux 环境使用,同理,没有插件的支撑,vscode remote 和 terminal vim 没多大区别,而且 mac 并不能和大型服务器的编译性能 PK 。不过我平时都是 IDE 写写个人项目,哪个好用用哪个。
    LonnyWong
        100
    LonnyWong  
       2022-08-28 13:04:06 +08:00 via iPhone
    @ChrisFreeMan 试了 pyright ,设置的 PYTHONPATH 好像不生效,很多该有提示不出来。等我抽空研究下怎么搞。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:26 · PVG 22:26 · LAX 06:26 · JFK 09:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.