真的会有人用 vim 开发大的项目吗?
真的会有人用 vim 开发大的项目吗? 当然有。我还在微软Exchange部门的时候,开发者最喜欢的代码编辑器就是vim,因为微软自己的Visual Studio(至少那时候)打开那么庞大的代码库超慢,用vim很轻量。
实际上,对于一个庞大的代码库,每个小组绝大部分时间只在一小部分上工作,用vim来搞绰绰有余。
目前,我们开发的某个代码库也超大,单元测试有近3千个,大部分开发者依然用vim来工作。 有。组内有同事在用vim做我们编译器的项目,看见他自己配了一大堆。另外一个同事用Emacs,基本上就是传说中的开了Emacs就泡在上面了,不需要开其它的了。我是凡人,在用netbeans,vim和emacs都被我用来做做文件的小改动,其实我最想要的是vs,可惜Linux下面没有。 Google好多用vim和Emacs的。不知道Google算不算大项目。
以上是抖机灵的回答,严肃地说,基本上编辑器的选择是个人喜好,用编辑器来判断一个程序员的能力,就像是甜咸豆浆来判断人的品位一样不靠谱。。。
不过好吧,我喜欢sublime text,而且是甜豆浆党。 我也来说说,微信的后台。
微信整个后台系统基本都是linux C/C++构建的。RPC框架,服务器框架代码生产器,微服务系统,例如服务发现,基于一致性Hash的路由策略,自适应的流量控制和过载控制等等都是linuxC/C++的。
另外,基于paxos容灾的NoSQL分布式存储系统,自建的消息队列,基于C写成的协程框架,日志上报系统,保证全局唯一且递增的ID生成器等也是linux C++/C的。
各个业务,消息,朋友圈,公众号,支付,游戏等,也都是构建在这套基础系统上,也是linux C/C++.
主流的开发环境是ssh到开发机,用 vim + gcc + gdb , emacs也有用,不过比较少。整体的代码量不记得了,可能超过千万行了。因为是微服务架构,每个服务(模块)的代码量不是很大,一般在千到万行的级别,用vim 完全可以搞定。 而且vim 语法高亮,自动补全,ctags, 搭配gcc + gdb 无论是编译还是调试都很方便,不觉得比IDE差。
当然也有同学在本地机器上用IDE写好,再传到编译机,编译和调试的,不过不是特别多。
一般一个同学可能会负责十几个模块。一个需求下来的时候,根据不同的情况,可能会要修改几个到十几个模块,有时一个人可以搞定,有时要几个,都看情况。只要保证不要有两个人同时修改一个模块的代码就行。
开发效率倒没有因为这个环境的问题受到影响,大家好像也没有在这个上面遇到大问题。麻烦的问题还是来自产品需求的频繁变更。
2019-04-28
一段时间没看,有了些评论。
看评论有不少同学在说没有版本管理,这个怎么可能吗? 当然有呀,要不怎么工作。
但就算有版本管理,如果两个同学去修改同一个模块,也有代码合入的问题呀,你也需要花时间去讨论合并的逻辑吧。我上面表述的意思是,一般开发流程都是很顺的,这种同时修改的合入会带来沟通的开销,排期的时候,我们尽量避开。
我们的开发环境跟线上编译环境是分离的。在上线到正式环境的是,会经过线上编译环境的统一编译,保证各种依赖都是一致的。
有全自动化的发布系统。支持自动化测试(测试用例需要提供),灰度发布,灰度发布支持按城市,按机房,按机器等粒度。过程中也有支持审批流程(比如有些关键模块的上线,需要上级的批准)。灰度完成后,会列出相应的监控曲线,让操作者可以一眼看到灰度带来的变化。
因为当时这个题目只是提到vim, 我的回到也就是针对vim的,其他部分没有涉及。但感觉大家都喜欢怎么都喜欢往坏的方向去揣测呢?微信这么大的系统,怎么可能会连版本管理系统都没有呢,正常逻辑都不可能吧。
我只是随便描述下,当然不会面面聚到,但我感觉大家的揣测都有点不怀好意的感觉,好像贬低了我的描述,就可以显得你很牛B吗?
我一直以为知会是个高端的社区,可以平和的探讨和交流问题的,但感觉是喷子居多,才来知乎没多久,就有点让我累觉不爱了。 肯定是有人用vim开发大项目。
但是这不是你用vim开发大型项目的理由。
其实现在挺流行用sublime text的,跨平台,易配置。
一般公司肯定不会强迫你用vim/emacs写代码,但是不反对你这么用。
所以我从来不反对用vim/emacs,学精通了,肯定对生产力有提升,但是你如果精通vim/emacs,和一个精通eclipse/myeclipse/intellij + ultraedit/editplus的人比赛写java的生产力(排除对语言的熟练程度和打字速度,仅看代码编辑效率), 那你不见得赢。但是精通eclipse/myeclipse/intellij + ultraedit/editplus学习曲线和消费精力要小多了。
vim/emacs/ultraedit/editplus/sublime text/notepad++ 这些工具,最终对于生产力的贡献都是以对代码编辑效率的提升。
但是真正上升到“实时语法检查”,以及其他对于项目功能的支持,肯定是没有IDE好的。
总之一句话,vim/emacs/ultraedit/editplus/sublime text/ 这些工具对于生产力提升还是有限的,相比于IDE来说,提升很难超过15%(估算),比如刚才那个竞赛,你两个小时能出115行java代码,那么同样水平的,熟悉eclipse的程序员,用eclipse/myeclipse/intellij也能出100行。
我是反对新手在熟悉语言本身、api、sdk、框架以前,盲目投入vim\emacs此类工具的学习的之中的,毕竟精力花在刀刃上。
喜欢折腾是好的。如果折腾,请勿瞎折腾 以前也很热衷与vim,不过我现在觉得:vim是一种操作方式,而不是一个单独的软件。
vim的操作方式一旦掌握受益无穷,但很多时候vim这个软件本身有它自己的局限性。
比如做Unity开发,Visual Studio已经是标配了。如果强行用vim写Unity代码,那一大堆API、某些常用函数20多种重载,还有调试的问题,足够让你写到自闭。但是vim爱好者完全可以装这个插件:
VsVim插件已经相当完善了,和VS本身的功能配合的很好,我一直在用。
python开发者最爱的pycharm也是一样,pycharm自带的语法提示系统,对编写标准化的python代码帮助很大,而且python这种动态语言一旦离开强力的IDE,查找定义、文件间跳转会变得很麻烦。如果项目比较大,用vim也是比较难受的(相比Unity开发,还算好一些)。
好在pycharm已经自带了非常完善、非常好用的vim编辑模式,甚至不是插件,而是软件自带的,可以随时切换编辑方式。
Linux C++开发我用过一阵CodeBlocks,同样也自带完善的vim插件。
你会发现,老牌的、使用广泛的IDE,都以各种方式支持vim操作方式。vim这个软件本身可能逐步失去市场,但是他所带来的这种独特而高效的操作方式,会永远传承下去。
PS:如果你看到了直接在命令行下编码的大佬,他们就可以做到用命令行开发大型项目,vim也是标配之一。不过这样的情况好像现在越来越少了。
PS2:一直用不惯vscode,它那个坑爹的vim插件功不可没。 修改下答案,本意是在使用远程链接是时,在终端下 Vim 是不错的选择,请别纠结到底实际工作中是否大家集中在一台开发机上工作。对于越大的项目,使用 Vim 的几率更大,这些项目通常克隆部署在自己云主机上,用户通常使用ssh等工具连上去改代码,更有人喜欢在虚拟机里放这些项目,然后用 xshell 连过去。不过现在 win 10 有了子系统,这么干的人应该少了。如果从未使用过 Vim,我会推荐这篇 Vim 中文教程给他,在这篇文章里详细的罗列了 Vim 比较核心的技能框架:
Vim 中文教程当然,我也会推荐 SpaceVim 给他,这是一个模块化的 Vim 配置,就像常见的IDE那样,对不同的语言有相关的语言模块,载入相关模块即可获得一个该语言开箱即用的开发环境。目前,常见的语言 c、c++、Python、PHP、java、go 、TypeScript、JavaScript 等都有支持。
想要了解更多关于 SpaceVim 特性,可以关注此知乎帐号,或者访问中文官网:
SpaceVim 中文官网如果在使用 SpaceVim 过程中遇到了什么问题,也可以加入 SpaceVim 的中文聊天群里和大家一起交流,SpaceVim 的中文群可以在中文社区页面看到:
SpaceVim 中文社区 真的有。
在下使用 Vim,大概经历了几个不同的时期。
不得不用 Vim
之前打算法比赛的时候,因为比赛环境提供的 IDE,经常可能会遇到各种问题,为了保证自己每次有始终如一的体验。于是就写了个十几行的最小版的 vimrc,每次比赛带着去。
另外两个理由就是:
大神好像都用 Vim,World Final 上的直播,都是很多 Vim,感觉自己用 Vim,也能像个大神了。Vim 不开代码补全,对锻炼自己比赛的熟练度,面试时的白板代码能力会有很多帮助,在学生时期,用一点额外付出,感觉坏处不大。
有点讨厌 Vim
之后去实习,写一些项目,发现 Vim 使用起来太累了。无数次想换 IDE。
但是因为:
电脑在虚拟机 Linux 下开发,自己电脑配置不高,虚拟机里自己基本告别 IDE 了。我花了很多的成本去学习 Vim,现在换,沉没成本太高了,有点不忍心。
接受 Vim
我和 Vim 相互妥协了。
一方面,我接受了 Vim 的不完美。以前总是恨不得所有的都用 Vim 写,后来发现,如果我一直使用 Go,用 Goland 也不错;如果我一直写中文 markdown,用 typora 体验也比 vim 好很多(中问下 vim 基本告别 w b 这些了)。
一方面,在公司实习时候,我发现公司里有很多使用 Vim 的同学,我们互相交流 vimrc,我们互相交流技巧。
我渐渐接受了 unix 的哲学,我用 grep或者awk进行查找和跳转,也没有那么不方便。
在公司,那时候我知道,原来大型项目,也有很多人在用 vim。
而且很多语言甚至没有很好用的 IDE,比如 rust。
<hr/>从此,我接受了 Vim,当我漂泊流离的时候,这个月写 C++,下个月写 Go,再下个月可能又要去 Rust 的时候,间或写写 shell 和 md 的时候,我用 vim。
当我知道,接下来我几个月都要长久使用一门语言的时候,电脑配置也支持的时候,我会用 IDE + Vim Mode。
(之前不喜欢 Vim Mode 是因为我目前没有找到一个很好的支持C-V模式的 Vim Mode )。
<hr/>
或许有很多错漏之处,还请谅解。 目前做的 web 后端项目上万行 python 很多是用 vim 撸出来的,业余还录了点视频讲 vim 和终端工具的使用帮助一些初学者入坑。 其实 vim/neovim 等一直在发展,只不过网上很多都是过时的教程,可以关注下 SpaceVim 等知乎上的 vim 布道者,其实入门并没有想的那么难,只是操作习惯需要有个适应的过程。下边是我录制的一个 vim 视频专栏,针对有一定基础的 vim 使用者:
玩转 vim 与 Terminal (视频)还有一个 python 专栏写 python 代码的视频也都是使用的 vim(neovim):
Python学习之路(视频)谷歌程序员搞基编程 vim 撸 golang。Hacking with Andrew and Brad - tip.golang.org_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili