

我第一次遇到vim是在不久前参加的Linux系统管理员课程中。
那时对Linux的了解并不多。 听起来很花哨。
在课程中,讲师经常输入3字命令vim并编辑一些内容。
我想,“天哪,看起来很酷”!
因此,我决心让自己看起来很酷,我回到家,打开了一个终端,输入了神奇的单词,瞧! —我在vim里面。
因此,非常希望在vim中写入我的第一个Hello World txt文件,我开始敲击键盘上的键。 没有任何反应。
一些奇怪的哔哔声从无处传来,我感到非常沮丧!
因此,我的目标迅速从输入任何内容转移到退出vim 。 是的,您可能知道接下来会发生什么。
在我竭尽所能退出vim过程中,一次敲打键盘的疯子使我vim 。 最终,在第一次与编辑器发生冲突之后,我非常感激能够在终端仿真器的右上角使用X键。
现在,如果您尝试使用vim ,这个故事听起来应该很熟悉。 好吧,最终您将学习如何退出它,并学习如何键入符号。
但是还有更多的东西。 无休止的按键组合会让您想知道意外敲击按键后您会做些什么。
如今, vim是那里最受欢迎的文本编辑器。 即使是某些Windows用户,也倾向于使用它,尽管它是本地的Unix实用程序。
但是有什么意义呢? 那里有很多IDE。 当任何人只要安装Google提出的第一个Javascript IDE时,为什么都会无休止的Vim挫折来困扰自己的生活。
好吧,尽管它可能不适合任何项目,但是至少在一段时间内坚持使用vim有一些很大的好处。
最大的一个是用户界面。 但是,本文的重点不是那样。 关于该主题的文章很多,也许将来我会写。
今天,我们将探讨vim编辑器的突出优点。
IDE是一个很棒的工具。 它为您提供了一些非常酷的功能-自动补全,代码模板,代码段等。
这些事情是不可替代的,尤其是对于大型项目。 但是,它们也可能大大削弱从未使用过其他软件的程序员的技能。 原因是使用此类实用程序会使您的工作变得草率,因为该函数调用距离自动完成仅一个选项卡。 同样,您可能会惊讶于由于这些工具您可能在知识上出现了哪些差距。
我就是一个例子。 有两次我因IDE病而感到惊讶。
有一次,我在编程课程中担任助手,一个人在编程基础课程的第一批讲座中向我求助。 他使用Hello World C#程序创建了一个新的VS模板,但是他弄乱了最初的C#代码,并且没有进行编译。
因此,他正在寻求帮助以解决该问题。 我尝试这样做,但是令我惊讶的是,即使不依靠标准模板也不知道如何编写基本的C#Hello World程序 。 最后,我告诉他删除该项目并创建一个新项目,以便VS为他创建Hello World模板。
这让我感到非常惊讶。 我已经习惯了默认的Visual Studio C#模板,以至于无法自己编写。
另一个这样的例子是我第一次尝试使用vim时不使用自动补全就编写for循环。 我做不到 。 我不知道循环声明中的内容,因为我一直使用自动完成功能为我编写for循环 。
现在,您可能认为这是在我的编程经验的早期就发生的,但是您错了。 我已经了解了什么是OOP,几种编程语言和一些基本数据结构。 我已经进行了将近一年的编程,但是却无法独自编写for循环 。
使用基本的vim,您无需自动完成和默认模板。 这样,我能够发现并弥补这些不足。
而且,由于需要自己编写整个函数名称,因此我能够成为一名非常快的编写者。 现在,我觉得键盘是我手的延续。
不过,这并不意味着我不在项目中使用自动完成和模板。 即使使用vim,我也确实会使用它们(当我设置了一些插件时)。 它们是极大提高生产率的好工具。 但是我相信人们应该花一些时间在没有这些实用程序的情况下创建项目,以便感受自己编写整个代码的悲痛经历。
这肯定会使您成为更好的开发人员。 而且,许多公司都使用白板面试来测试他们的候选人。 如果没有自动完成功能就无法编写hello world程序,那么您所有的算法知识都将无法在白板上为您提供帮助。
使用IDE时,只需单击即可完成所有操作。 您可以单击Ctrl-F5来编译,链接和运行项目。
实际上,这是三个不同的命令。
您有时会在IDE底部发现一个加载栏,并显示状态消息Indexing 。
你知道那是什么吗
为什么要这样做?
而且您知道吗,为了构建项目,IDE使用了一个配置文件,该文件概述了如何编译,链接,运行测试等单个文件?
当然,配置文件的确切应用是特定于项目的,但是可以配置所有这些属性。
如果不使用IDE,则必须自己编写此配置文件或显式生成它(Makefiles是C / C ++项目中的示例)。
而且,通过使用IDE,这些细节被隐藏了,这当然可以节省时间,但是又使您缺乏知识。 有人可能会说,如果您在日常工作中没有遇到这些知识,则不需要。
如果仅在工作中代替汽车零件,汽车修理工就会不知道发动机如何工作而逃脱。 这使他们成为精通工艺的大师吗?
但是通过使用vim和终端,就不会对您隐藏所有这些错综复杂的东西,而您必须明确地做到这一点。 这会使学徒花费更多时间,但可以让您探索系统的功能。
例如,您是否知道有一些编译器选项与您的IDE默认设置不同?
另一件事是,使用这种方法使您的项目在使用通用工具而不是IDE专用工具时更具可移植性。 我在此过程中遇到的一个问题是一个非常老的项目,需要将其移植到其他IDE。
为了对项目的构建系统进行反向工程,我必须深入研究VS特定的配置文件。 例如,通过使用Makefile,您可以简单地在任何现代IDE中导入Makefile项目,并且您的项目可以直接使用。
对于C#,您具有Visual Studio。 对于Java,有Eclipse和IntelliJ。 Python具有PyCharm。 还有C ++的代码块。
即使您只使用一种语言,仍然有机会在您正在处理的项目之间切换IDE。
那么为什么这是一个问题呢?
好吧,通过不断地切换工具,您必须了解IDE的快捷方式和键绑定。 许多人甚至不打扰,继续使用鼠标,然后单击单击单击。
这意味着您的生产率将不会很高。
另外,在笔记本电脑上运行IDE很难。 我曾经为C项目打开过CLion,对于Java是IntelliJ,对于Python是PyCharm。
如果您像我一样拥有一台旧笔记本电脑,那将不是一件令人愉快的体验。
但是即使如此,我还是不得不为不同的语言使用不同的工具。 每个工具都有其自己的复杂性和快捷方式。
必须始终切换IDE,这使您只能使用每个IDE的最不常用的分母实用程序,因为您无法全部学习它们。
通过使用vim,您可以使用一个编辑器来全部统治它们。 而且您在不同的语言上具有相同的快捷键和按键绑定。
但是,在某些项目上使用vim可能会很麻烦。 例如,C#项目与Visual Studio完美结合,如果尝试用VS代替vim,您将很难。 但是,您可以使用Visual Studio插件在VS中模拟vim。 这样,您可以在首选的IDE中拥有自己喜欢的快捷方式。
其他主要IDE也可以使用类似的插件。
如“治愈IDE疾病”一节所述,使用裸露的vim是有益的。 但是对于大型项目,我很喜欢使用插件来匹配类似IDE的行为,这仅仅是因为导航代码库要容易得多。
这是我自定义调整vim的屏幕截图:
它具有许多出色的功能,并且使用它,我完全可以用CLion替代相当大的C代码库。
在一系列新文章中,我将开始探索我最喜欢的vim插件,并说明它们何时有用,何时不有用。
但是,如果您想拥有类似IDE的vim,则可以克隆我的dotfiles存储库并运行install.sh脚本。 它将配置我现在使用的确切vim配置。
注意,那里有一些与vim不相关的配置,但是您可以轻松提取相关内容。 我留下了评论,解释了脚本各部分的功能。
除了vim可爱的用户界面外,至少使用一段时间还有其他好处。 如果您不习惯使用IDE的代码模板和自动完成功能,那么该试试vim了。 警告,IDE疾病不要掉以轻心。
此外,如果您想在IDE为您提供的抽象背后有所收获,现在该打开终端并使用vim从头开始创建项目了。 您可能不喜欢编辑器,但是您将获得的知识是无价的。
而且,如果您厌倦了使用5种不同的IDE来完成工作,那么vim也是正确的选择。 它为您提供了一套可移植到不同项目的工具。
你还在等什么?
sudo apt install vim并使用这个出色的编辑器开始您的旅程。
一旦这样做,无论您是否喜欢编辑器,它都将使您成为更好的开发人员。
最初于 2018 年4月7日 发布在 pmihaylov.com 。