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

2022-08-27 01:36:11 +08:00
 skywind3000

正文请点击:

18951 次点击
所在节点    Vim
195 条回复
mrqyoung
2022-08-28 13:13:55 +08:00
IDE 与 VIM 并不是零和关系(博弈),而是正和关系。
据我所用过的 IDE 基本上都有 VIM 插件,仅仅是在体验、支持度、兼容度上面。比如:JetBrains
家族都有 ideavim 插件,vscode 有 VSCodeVim ,vs 有 VsVim ,Xcode 有 vim-xcode (在 xcode13 上本身支持 vim-mode ,Preferences-Text Editing-Editing-Enable Vim key buildings. 这一点我没有实际使用过所以不确定,我只在 10 版本的时候写过一点点 swift )。
个人认为 ideavim 体验最好,而且也能按照个人喜好选择单条快捷键是按照 vim 还是 idea 本身。
原生 vim 我在 Linux 使用,以及在 win 下当轻量的文本编辑器类似 notepad 之类。
nikolai
2022-08-28 13:32:34 +08:00
现在 Neovim + LSP 已经很无脑,配制都是复制粘贴

当然不是我不想用 VSCode ,而是一开 Chrome 内存已经没了
yuancoder
2022-08-28 13:40:12 +08:00
vim 一次学习,终生收益
danhahaha
2022-08-28 14:00:55 +08:00
每次看到整理哪个工具好的时候,就像看地头俩农民争辩方头锹好还是圆头锹好。

哪个合适用那个,没有可以用一辈子的,时代在进步,新的总比旧的好,因为新的会吸取旧的教训错误缺点,否则就没人用
daveh
2022-08-28 14:10:56 +08:00
@skywind3000 #66

我来回复一下。

> 我强调的是 Vim 的扩展性

他要说肤浅,其实他这理解就是了。所谓的扩展性,现代一个稍微功能强一点的编辑器都能支持,还需要他去强调 vim 能扩展?其他编辑器就不能扩展? JB 系不能扩展?

> 肤浅的理解成 vim 能做哪些

所以,我们只看,最终你大费周章扩展一番后,功能能支持到什么程度,能就能,不能的就不能。这没有什么吹的。

> "Vim 只能做这些事情“

显然,任何扩展,特别是脚本扩展,都是有限制的,你不能超出编辑器脚本能支持的范围,或者说编辑器开放给脚本的能力。有些功能确实你一番扩展后,也只能支持到某个程度。

> 自己的 IDE 他也没弄明白

这也是他也肤浅的地方,另外一个回贴里我讲了怎么用 JB 系原生支持的 groovy script 去扩展,还没有提怎么开发 JB 插件去扩展。groovy script 能扩展到什么程度他知道吗?因为它可以嵌入 Java 代码执行,而 JB 系又是 JVM 语言写的,这个扩展性你们去想想吧,不考虑兼容性,你可以随意用 API 操纵 IDE 。
而 vimscript ,你没法扩展出没有开放给脚本使用的功能。

> 浮窗类型提示,包括 auto 类型
> 自动错误提示

这些是 LSP 支持的功能,其他编辑器也能,并不是 vim 扩展才能。所以,他想强调的是 Vim 的扩展性,自己写个脚本就能支持了,结果又得拿一些公共领域大家都能的功能来佐证?
哦,对了,JB 系现在是直接支持在 inlay hints 中显示 auto 实际类型,并不需要弹窗,而且由于实际类型可能比较长影响代码阅读,是可以折叠的。
他说 vim 9 支持 virtual text ,能支持到 JB 这个程度吗?

> 完全没理解 tasks 系统
> 看看 vscode 的 tasks 系统
> 不是大 JB 那种定义外部工具那么简单的东西

他可能也没理解或者不知道 JB 的 Configurations 是怎么回事。VS Code 缺乏 JB 那样的项目工程管理,所以搞了这个所谓的 task 来充数,正所谓功能不够,task 来凑。JB 有工程管理概念,比如 Build 什么的都可以有标配 Configurations ,并不需要手工配置的所谓的 task 去做这些事。目前看大部分 task 其实是一些命令执行,在 JB 中用 External Tools 替代就行;少量 task ,可以用 Configurations 。Configurations 定制性也非常强,可以配合其他界面功能、其他插件功能、甚至 groovy script 使用。
JB 中按双 Shift ,也可以输入名称直接执行。

> 大 JB 没有的任务系统不理解,还瞎扯什么实时代码检测

不太理解“没有”任务系统,与实时代码检查有什么关系?这是急了吗。

> 编译运行
> 这个功能叫做 linter

JB 这个功能是实时显示代码问题,综合了 Inspect 或 Analyze 的结果,分 Error 等级别,并不是简单的 linter ,linter 只是其中一部分。
他这贴图,只看到“实时”显示了问题,并没有看到实时检查,实时检查是边改代码边检查,甚至不用保存代码,写错代码马上提示问题、并给出修改建议,改对代码问题提示自动消失。建议贴这样的图更有说服力。
另外 lint 问题并不都是 Error 必改,也可能不是问题,能编译过代码也可能弹一大堆 lint 出来,改这种 lint 不会爽。

> “就是这么爽”

他可能缺乏里面描叙的开发体验,所以才搬出个 linter 来说事,实际写新代码过程中,没人去马上关注什么 lint ,只关注当前代码有没有写错能不能编译过,JB 的这个功能,就是让你实时聚焦改当前 Error ,全部修改写完后,再去编译代码文件一步通过;代码编译通过后,再去关注那些可能不痛不痒的 lint 什么的其他检查。
所以确实有些人“无知真爽”,以为能看到个 lint 结果就爽了。

> 还说自己是啥 "老 vim 党"

我用 vim 时,这些什么 lint 、LSP 等等都还没有呢。等其他 IDE 都用烂大街了,LSP 才兴起,一众编辑器 、vim 才能借助支持了个皮毛。

> 自动格式化
> 他完全搞混了

他找到 JB 这个功能在哪没有?这个功能就是“混用”的结果,一次性搞定格式化补全等等,而且因为理解语义,不用担心补全出错误代码。
vim 搬出这么多插件,混用都不一定能达到这个效果,估计不是冲突就是要挨个来触发。这可不是爱不爱用的问题。

> 自动帮助
> Vim 里浮窗显示文档

他要是看全了,就不会简单理解自动帮助就是浮窗显示了。
写代码时自动提示候选函数文档方便比较、文档链接跳转导航,是装作没看到吗?而且装个翻译插件,还能直接翻译英文文档。


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

这该说什么呢?这是为抗而抗吗? JB 不支持的功能多了去,但 JB 系难道也不支持你去扩展?不支持你去写插件?我寻思写个插件也没什么难度啊,不想写插件,就用 groovy script ,直接 Java API 操作 IDE 。我们自己就开发了很多 JB 插件,从部署、调试、汇编等等。

> 远程编辑
> 在外网上百台服务器里跳来跳去,每台有需求就弄一下

这个只能说勇士,直接去改生产环境。几百个服务器你去 vim 几百次?

有没有一种可能,可以不用 Gateway ,JB 里面配置 Deployment 到测试 /开发环境,远程改好后再发布到生产环境?

都 2202 年了,裸奔上生产环境改代码的事还是少搞为妙,开发些工具或者使用成熟工具,大家都图个安心。
liuxu
2022-08-28 14:45:58 +08:00
楼上的几个小兄弟都没有信仰,要不还是去打 dota 吧,跟我来一起打永劫无间也行
ColorfulBoar
2022-08-28 15:45:20 +08:00
@ffire #93 我在那一层不是说了么,inline 那么用 100%是对语言关键字理解有错,没有什么争议。剩下的都是 OP 实际上在写 C with class 而不是 C++的标志,不是说绝对不能用,但这种东西满天飞的代码基本上只用了 1%的 C++特性,这上面 vim 能用是绝对证明不了在其他 C++特性用的多的项目上 vim 能用的。这就像是…如果一个 TypeScript 的环境只对一堆 anyscript 代码测试过,能证明这玩意「能用」吗?
另外这整个楼和我说的这些相关的历史是这样的,最开始有个人说类型推导等东西 vim 估计干不了,然后这个时候 OP 如果直接承认自己平时就不用 auto 等涉及类型推导的东西所以不知道能不能用,那我绝对一个字都懒得打,毕竟不用什么或者不知道什么都很正常。结果 OP 在主楼贴了个 int x =1; auto y = x;来「证明」 vim 下面能正常看到 auto 类型推导的结果……这就相当于有人说 C++编译慢,然后一个人写了个只有一行 int main() {}的 cpp_is_so_fast.cpp 一瞬间就编译完了然后说 C++编译一点都不慢啊,这你让我说什么好?
到这个时候我第一次回复还是只关心 vim 能不能用的,结果 OP 不知道吃错了什么非跟我扯 shared_ptr 觉得我 C++水平有问题,那我只能翻翻他都写了什么神奇代码了,到这个时候我列出来的那些(中的一部分)才成了「问题」,因为我真的看了他写的代码发现并不属于应该用这些特性的情况。所以归根结底,我根本就不关心别人用什么 IDE ,但 OP 非要用这种方式「证明」 vim 上能解决一个自己平时从来不用的特性,然后接着又出来秀自己 C++水平的下限觉得别人菜,这总不能怪我吧?


@liuxu #106 我也觉得有这时间不如开一盘 dota ,所以有什么推荐的新版本整蛊姿势可以让我去坑害队友吗?
sy20030260
2022-08-28 16:15:55 +08:00
不否认 Vim 在拓展性上确实有优势,但是很好奇除了自己折腾的场景除外,在真正生产场景中 Vim 的高拓展性到底能发挥多少价值?我是 JB 系重度使用者和 VsCode 轻度使用者,在现实生产场景中用到 JB 的功能甚至都占不到它完整功能集的 20%。JB 的功能已经完全超出我在生产场景中的需求,偶尔一些拓展性借助插件也能实现。我真的不需要那么灵活的拓展性,而且我遇见过的程序员他们大多也不需要

拓展性高,用统一的工具解决所有问题当然很爽,但是为了这种爽付出的代价是:开箱即用的产品体验、易用性更高的图形化界面、商用级别支持的 IDE 配套服务等等。为了多 10% 的高拓展性却要牺牲 90% 常用场景下的产品体验,这个边际成本对于大多数普通用户来说也实在忒高了...
haoliang
2022-08-28 17:19:02 +08:00
我看有几位提到了“圣战”,拜托,这啥圣战啊?主角谁呀?我没见 emacs 用户出来说 up 主的知乎回答有啥问题;反倒是几位没深入用过 vim 甚至没入门 vim 的用户来踢馆,我到目前没看到值得“圣战”的点。

我来凭空找几个角度(然而我只是轻度使用 doom emacs ):vim 的 syntax highlight 全靠 regex 存在不准确的情况、性能不高的情况; cli 下的 vim 受限于 terminal 不能使用所有按键组合、不能显示图片、也没法在 split window 中预览渲染好的 markdown ; lsp 不是内置的,使用上有一定延迟(至于能不能接受偏主观感觉),异构扩展中难免使用 vimscript 专有的 api ,传递、接受变量时有额外的序列化消耗。

跑题一些,接触到用 n/vim 的人中并不只用 n/vim ,都会利用其他工具来扩展自身能力,比如:terminal+floatwin/popup window 配合 fd+rg+fzf 、quickfix/location list 配合 rg 、自身的异步任务系统、自定义 syntax 、ftplugin 配合 git 、等等。

也作为一个 “vim”老用户,我不会只困在 n/vim 中,我当然要关注、使用其他同类工具收获一些灵感以提高**我自己**对于写代码体验上的理解跟需求(没错,需求是被创造出来的)。比如最近我发现 doom emacs 中的 lsp 补全可以做到 fuzzy match ,nvim 的 builtin lsp client 没有,而且受限于 popup menu 的相关实现没有暴露的 api ,我没有找到可能的方法;看到新 pattern ,我在想依照 n/vim 的扩展能力它应该可以为我所用,而且也往往是早就有人想到实现了个插件。

最后提一嘴 ide ,我不喜欢用它的一个原因是,它集成了太多我不想要的功能,长期自定义使用 n/vim 、archlinux 桌面 work flow 的我不太能接受。
w568w
2022-08-28 18:33:50 +08:00
产品这东西都是秉持着「哪个好用用哪个」的心态。你觉得 Vim 优美,他觉得 Emacs 强大,我说 JetBrains 、VSCode 牛逼,最后还是要看哪个实际用起来方便。有的人喜欢折腾、高度定制,就有的人喜欢简洁、开箱即用,两者不冲突。

远程编辑配置文件用 Vi/Vim 因为它预装,管理日常纯文本文档用 Emacs 因为有 org-mode ,本地开发用 IDE 因为我不缺这点性能,瘦主机(比如平板、手机)上看别人发来的代码用 VSCode 因为它可扩展性好,还有高亮,而且我没键盘。

我看互联网十几年,把工具关在象牙塔里供着、不允许他人玷污的心态,多半是有点精神偏执问题的;因为用顺手的工具不同而相互攻讦,更是有点大毛病。

你用工具,不是工具用你;信仰用来愉悦自己,不是嘲讽他人。编辑器是这样,操作系统是这样,手机品牌是这样,任何个人喜好更应如是。
felixcode
2022-08-28 19:34:36 +08:00
其实楼主的帖子没说 VSCode 或其它 IDE 有什么不好。
但很多人一定要通过抨击 vim 的不好,来显示出自已用的 IDE 多么强大,用自己的方案多么合理。
事实上这些人里,很多人都没试过 vim 哪怕稍微深度一点的配置。
对于未知的事物多一点好奇心与敬畏心,是做技术人应该保有的心态。
drackzy
2022-08-28 21:02:43 +08:00
<amp-youtube data-videoid="ajmK0ZNcM4Q" layout="responsive" width="480" height="270"></amp-youtube>Neovim 的配置照着这个改的,上手比从头配置难度少很多。又加了一大堆星多的支持 LSP 的配色。现在用的W ezterm 里开个 Neovim 或者 Neovide, GUI 都是 Rust 写的显卡加速渲染丝滑流畅。
palfortime
2022-08-28 21:03:57 +08:00
惨了,我是用 vim 写 java 的。crud 工人是不存在重构的。
akyle
2022-08-28 21:06:38 +08:00
使用 Vim 写代码,是因为摸鱼时间太充足?
gbin
2022-08-28 21:40:07 +08:00
IDE + Vim plugin 才是最终的解决方案。
FallenMax
2022-08-28 23:01:46 +08:00
只说个人体验:试过完全用 vim/neovim 开发了几个月,最后还是回到 vscode+vim 插件,原因:

1. 需要花大量精力学习 /配置 /整合 vimscript/lua/ 市面 vim 插件,但最终配出的效果仍然只是成熟 IDE 对应功能的降级版,bug 多,综合体验差(很多是由于插件间互相干涉或互不感知导致,算是没有整体设计导致吧)
2. 插件升级经常出问题,需要跟 readme ,去改配置代码
3. 能映射的快捷键太少(受 terminal 限制)
4. 学习路径不合规律。举例:很多插件上来就要读很长的说明,要了解它如何配置,有哪些 command ,要定义到某些 shortcut 并记住后,才能开始用,起手成本太高。符合正常学习规律的做法应该是像 vscode 这样:下载插件后,扫一眼文档(一般有 gif )就基本可以用,不记得插件有哪些功能时,用 cmd+p 命令面板搜下这个插件的 command 并执行,用到后面发现确实常用的命令,再去设成快捷键。整个流程没有「一定要记住」否则用不了 X 功能的点。
pooorguy
2022-08-29 00:48:18 +08:00
现在 vim/neovim 和 Emacs 成一家,受到 VScode 压力枪口一致对外了嘛,多年在用 vim/neovim ,先说下结论:

我用我可以,你用不推荐。

vim 功能一直很强, 但早期版本和现在版本在插件方面差别已经很大了,早期的插件只是作为 vim 功能的补充,有它锦上添花,没它也能用。而现在插件功能强大到甚至侵蚀并覆盖了编辑器本身功能,比如光标移动插件,不用再 hjklwbe ,比如 tree-sitter ,它的主要功能之一就是代码高亮,在它的默认配置说明中就取消编辑器原有的代码高亮功能,更别说 LSP 这样,总会有人把它从现代编辑器移过来的了。

所以在我看来,vim 和有插件的 vim 是两个编辑器,而安装现代插件的 vim/neovim 和现代编辑器如 vscode 正在逐渐趋同。

最后打一个不恰当的比喻:作为 vimer ,vim/neovim 就像我的结发妻子,一直陪伴在身边,虽然徐娘半老,但风韵犹存,值得牵手走下去,但是 vscoder 们, 想要另寻新欢? 还是找年轻漂亮的吧~
murmur
2022-08-29 08:13:49 +08:00
@drackzy 截图直接劝退,倒了圆角的一个窗口,底下的状态栏四四方方卡在那缺一块,害死强迫症
L4Linux
2022-08-29 08:18:45 +08:00
什么扩展啊、功能强大啊,我认为不完全是 VIM 吸引用户的优势。前面很多人也说了,这些优势有待商榷。

但是 IDE 、VSCode 之流做不到但 VIM 能做到的是全程 keyboard driven 啊?有些人就是不喜欢鼠标点点点啊?这个时候你推荐他用 IDE ?用 VSCode ?
workman2021
2022-08-29 08:49:00 +08:00
Vim 重构起来不方便吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/875730

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX