从Vim切换到IntelliJ

2020-11-05 22:39:31

在过去10年左右的时间里,我一直是Vim的铁杆用户。我是在第一份编程工作中被介绍给Vim的。对我来说,这几乎是一种瞬间的联系。我爱上了只需要一个终端就能完成工作的极简主义,以及将命令(如文字)串在一起编辑程序和文本的能力。

我和Vim的爱情在我的整个职业生涯中一直伴随着我,直到今天仍然很强烈。当我还是一名初级发布工程师,从事小脚本工作时,Vim令人惊叹。后来,作为一名Ruby on Rails工程师,Vim仍然是一名令人惊叹的编辑。Thoughtbot、HashRocket和无数其他机构、公司和个人为Vim社区(和邪教)做出了贡献。这个社区将我的知识、安慰和理解推向了越来越远的地方。

最后,我在终端上一起运行tmux和Vim。有了足够的插件和点文件,我开始浏览代码库。我可以非常轻松地编写测试、运行测试、重构代码和运行命令。

VIM和TMUX..。不过,最近我们太棒了,我对Vim有点不以为然。即使有了我复杂的点文件、知识和插件设置,也感觉有些不对劲。我开始了一份新工作,从事一个大型打字反应项目。Vim无法在不崩溃的情况下打开超过50行的TSX文件。

在过去的几年里,我尝试了编写移动应用程序。Fight and Dart--尽管有LSP支持--在我的Vim设置上运行得不是很好。在给安卓工作室一次试水之后,感觉就像是一个全新的世界。

Android Studio突然改变了游戏规则,我对一切都触手可及。默认情况下,自动补全、自动格式化、代码片段和文档查找都是设置的。实际上,我对Ffltter框架的理解要好得多,因为Android Studio使深层框架代码易于调试、检查和探索。更不用说,Vim的集成非常棒。这是两全其美。我拥有令人惊叹的编辑、最小配置和Vim键绑定!

在Vim中学习一种新的语言或框架时,我会花费数小时配置插件、处理linting和查找文档。与Android Studio一样,使用和IDE,所有这些都是在没有任何配置的情况下预先构建的。

Android Studio在某种程度上让我大吃一惊。我开始对自己说,“如果这对Ffltter来说是件好事,那对我的其他项目来说难道不是很棒吗?”

我现在几乎只为IntelliJ Idea工作。这就是JetBrains事实上的编辑器,它包含了几乎所有东西的插件:

我工作的每一个项目--比如Reaction中的Gatsby博客、我的公司打字工作,或者Ruby on Rails方面的项目--都在这个编辑器中工作。

我曾短暂地使用过VSCode,但在我看来,它似乎有一些我当时不喜欢Vim的缺陷。它在处理大文件时速度很慢,在处理复杂的程序和复杂的编程语言(如Tyescript和tsserver)时感觉很慢。

我还和WebStorm有过一段很长的恋情,基本上都很棒。我确实做到了;但是,我发现只使用为几个程序设计的编辑器是很奇怪的。如果我想在WebStorm中运行Ruby on rails应用程序,我是Sol。我觉得在一台机器上运行Rubymine、WebStorm和PyCharm有点傻。如果我用所有三种语言编写代码,难道一个编辑器就不能处理它吗?

最终,我用插件来运行IntelliJ,这些插件可以处理我可能有的任何编程需求。现在,我很开心。当然,IntelliJ有很多缺点。但我真的相信利大于弊。

我仍然认为Vim是一位伟大的编辑,我喜欢时不时地把它说出来。但我相信在我职业生涯的这一阶段,IntelliJ的优势大于Vim的劣势。以下是我的思考过程的概述。

在Vim中学习一种新的语言或框架时,我会花费数小时配置插件、处理linting和查找文档。

极简主义者。你所需要的就是航站楼,仅此而已。你不需要打开多个窗口,Tmux和Vim在这方面很棒。

让你进入这股潮流:。Vim比任何东西都能让我更好地融入“流动”。我只需要稍微移动一下手指,就可以进入/退出窗口、缓冲区、拆分等…。我特别记得当我用Vim编程时的微笑,因为有时候感觉很有趣。

可扩展性:它已经存在很久了,Thoughtbot、HashRocket和许多社区成员都为它做出了巨大贡献。

非常陡峭的学习曲线:Vim需要很长时间来学习,而且你永远不会停止学习它。对于像我这样更有经验的用户来说,这不是问题,但我觉得值得一提的是。

不一致的插件:快点,告诉我Vim中最好的自动补全插件。麦酒/全脂啤酒?你完成我了吗?VimCompletesMe?DeoPlete?对于你可能有的任何任务,都有数量惊人的插件。而且并不是所有的插件都在一起玩。随着LSP的出现,这一点变得稍微好了一些;然而,我经常发现自己在玩插件以使事情更好地工作,结果却不喜欢这种设置,后来又去找另一种插件。有点文件是很好的,但是当你切换计算机/系统时,你必须为一些包安装pip3/python,为其他包安装node/npm/yer,对于某些包,你必须将CD放入安装它的目录并运行一个Makefile!(看着你,YouCompleteMe)。

并不总是能很好地处理其他事情:我已经用Vim进行了无数次配置。Vim独立版、NeoVim版、Vim with Tmux版和MacVim/GUIVim版。它们都有长处和短处,但总有一个共同点,那就是并不是每个计算机系统都能很好地运行。尝试在Mac上的Vim上设置复制+粘贴,完成了吗?好的,太棒了!现在为Linux做这件事。为了让所有的东西都能在一起很好地发挥,有这么多的变通和技巧。当你把它设置好的时候,感觉很好,但有时会很粗糙。我发现自己一遍又一遍地阅读旧的博客帖子,以回忆我是如何在系统范围的剪贴板上设置Yank+Paste的。

用复杂的语言(比如打字稿)编写复杂的代码库并不是很有趣:我记得我开始了一份使用打字稿的新工作,有很多工程师在处理一些非常酷的问题。获得VIM/ENV VARS/ETC…后。所有设置好后,我开始在Vim和BAM中工作,任何超过20行的文件都会冻结,而且处理起来非常慢。果不其然,我的Javascript解析器/突出显示插件(参见我上面关于插件的观点)效率低下,而且它使一切都陷入了泥潭。因此,我不得不满足于一个性能更好的较小的解析器。类似的事情也发生在更漂亮的、eslint和tsserver上。如果你需要用这些技术自动修复你的代码,那么它的代码块是读/写的。即使您的IO被阻塞的时间很短,在编写代码时也会给人一种步履蹒跚、缓慢如蜜的感觉。

突然之间,我的一切都触手可及。默认情况下,自动补全、自动格式化、代码片段和文档查找都是设置的。

一切都是预先配置的:您不必担心设置标签、YouCompleteMe或NERDTree。我数不清有多少次我打开了一个新项目,可能是用不同的语言,一切都开箱即用。这完全让人松了一口气。

文件观察器很强大:在IntelliJ中有一种叫做文件观察器的东西。您可以将任意任务设置为在编辑/保存/键入文件后运行。当您有更高级的任务需要在代码库中运行时,比如对导入进行排序、运行特定的eslint规则或在保存文件后运行rubocopp,这会非常强大。

一切都很适合你的操作系统:我不能告诉你我在一个新的操作系统上设置了Vim和tmux多少次,比如Linux。我会运行我所有的点文件,配置我错过的任何疯狂的东西。编译需要编译的插件。修复Vim/tmux/Linux(或Mac,随便什么)之间发生的任何小问题。然后我在编程,我必须复制+粘贴一些东西,BAM,我花费了4个小时在Vim/tmux/之间正确配置复制和粘贴。

复杂的代码库和语言很容易处理:使用IntelliJ(或WebStorm)后,我的大型打字代码库的所有问题都消失了。所有内容都被正确索引、解析、突出显示和呈现。在处理复杂的代码库时很少遇到麻烦,而且异常通常比Vim更容易处理。

复杂的界面:IntelliJ的界面有点复杂。有很多工具、下拉菜单和配置。一开始这绝对是一件令人望而生畏的事情,但一旦你习惯了,它就不是什么大问题了。

内存使用:IntelliJ确实占用了我机器上的一些内存。不过,我相信这样的内存使用是值得的。您为索引、标记和缓存程序支付了前期费用,因此您的编辑体验就像黄油一样顺畅。VSCode和Vim(带有插件)只是懒惰地做这件事;因此,随着时间的推移,您对复杂项目的编程体验会变得非常笨拙和缓慢。

某些任务的配置很困难:同样,随着时间的推移,您也会习惯这一点。IntelliJ的某些配置选项不太理想。例如,在为eslint设置自动格式化时,要在IntelliJ中设置文件监视器,需要经过几个步骤。不过,一旦您理解了这个概念,它就相当简单,很容易与其他工具一起使用。

最后,我认为IntelliJ的利大于弊。我对这个平台非常满意,并期待着在未来使用它。

如果你能走到这一步,恭喜你,你真的很了不起。我想知道;不过,你的感觉和我一样吗?我不确定是否只有我一个人有这种想法。我相信6个月后你就能找到一篇关于我如何转回Vim的帖子。但就目前而言,我真的很享受这段经历。