一周内轻松掌握 Vim 并提高工作效率
本文最初于 2019 年 3 月 19 日发布于:https://nickjanetakis.com/blog/getting-productive-with-vim-in-a-week-without-hating-it
我并不是 Vim 专家,因为我只使用它一个多月。
但大约一周后,我发现我的效率相当高,而且从那以后情况越来越好。我觉得在你还是个半初学者的时候写这样的帖子很值得,因为一旦你用了某个东西很久,就很容易忘记早期对你有帮助的细节。
话虽如此,本文更多的是关于我学习 Vim 的个人历程,而不是循序渐进的教程。不过,读完本文后,你可能已经掌握了一些技巧,可以帮助你快速上手 Vim。
毫无安全保障地一头扎进去
通常,当我完全沉浸在学习内容中时,我的学习效果会最好。我还记得五年前,我花了大约三个月的时间学习 Rails,当时我搭建了自己的博客平台,同时观看了大量 Railscasts 视频,边学边学。
在开始这段为期三个月的冒险之前,我没有任何 Ruby 经验,但到最后,我已经学到了足够的知识,可以轻松地开始从事新的基于 Rails 的自由职业。不过值得一提的是,我之前已经有 15 年的开发经验,所以很多常见的 Web 开发概念我都已经了解。
所以当我开始学习 Vim 时,我做了类似的事情。当我确定我已经完全掌握了 VSCode 的使用方法后(我之前因为1.5MB 的 Markdown 文件处理性能太差而停止使用它) ,我卸载了它,Vim 成了我的首选编辑器。
这意味着,当我为客户做自由职业或编写自己的课程内容时,我愿意承受最初的生产力损失,但我完全知道,在一段时间内我的效率会大大降低。
第一个周末
我通常不会在周末做合同工作,所以我周五晚上决定,当我第二天早上醒来时,我要努力使用 Vim 直到周日晚上。
由于之前对 Vim 没有任何了解(很多年前我看过一次),我花了一个周末的时间才从不知所措到对这次切换感到满意。
当我说扎实时,我的意思是我花了两天 10 个小时研究 Vim 功能、观看教程、按照教程进行操作并慢慢引入几个我知道我想要的插件(基于我遇到的确切问题)。
这段时间我大部分时间都处于“哇,太棒了”的阶段,看了很多 YouTube 视频,说 Vim 有多好用。我不在乎别人怎么说,最初的兴奋阶段很重要,因为它能给你带来巨大的动力。
炒作过后,就该制作一个配置文件了:
当我感觉自己要征服世界时,我便开始真正配置 Vim。
我知道自己.vimrc
从头开始写文件太难了,因为里面有上百万个设置,还有两倍多的未知数。我完全不知道什么是可能的,甚至不知道我想要什么。
同时,我也知道我不想从SpaceVim之类的大型预制解决方案开始。我并不反对,而且它可能很棒,但从我的个人经验来看,从庞大的东西开始会让我更难理解自己在做什么。抽象应该放在最后,而不是一开始。
所以我最终找到了一个基本的.vimrc
文件要点,并用它来帮助我。在检查配置时,我尝试了:help <setting>
所有看到的设置。
我甚至根据客服的指导对他的一些设置做了一些调整,我认为这很重要。每个人都有自己的喜好和想法,认为什么是“好”,所以如果你找到了喜欢的东西,就不应该害怕把它变成你自己的。
你也不应该因为不完全同意某件事就完全否定它。即使你只同意一半的观点,你也有可能从中学到很多东西。
周日晚上:
此时,我有一个非常基本的配置和几个插件。这个过程我甚至vimtutor
还没有完成。我的想法是,在开始真正学习 Vim 之前,我想先建立一个合理的环境。
事后看来,这或许并非最佳主意,但我一直以来都是那种先尝试一下,然后再去阅读大量手册的人。而且,在制作配置文件的过程中,我一直在积极使用 Vim,因此积累了“实际”经验。
我最终并不后悔我的决定,但我认为如果我从vimtutor
(如果你安装 Vim,这是一个内置命令)开始,可能会更快一些。
一周后的 Vim 生活
接下来的几天过得并不轻松。我像个傻瓜一样折腾了好几天,连“移动到句子倒数第二个单词,然后把最后两个单词换行”这样简单的事情都做不好。一开始,没有方向键和鼠标,我几乎要了命。
即使是复制/粘贴也是一项艰巨的任务。我花了很长时间才能够将文本从 Vim 复制到另一个应用程序,并将另一个应用程序中的文本粘贴到 Vim 中。
这主要是因为我不理解 Vim 中寄存器的工作原理,而且一开始就有点棘手,因为我运行的是 Windows 10,但我在 WSL 里安装了终端 Vim。有很多剪贴板变量在起作用。
总的来说,我经常遇到一些用其他编辑器很容易就能搞定,但用 Vim 却难得一见的情况。我几乎到了“去他妈的,这不值得”的地步,因为我感觉自己被太多东西缠住了。
即使是像粘贴文本到我想要的相对于光标的准确位置这样基本的事情,我花了将近一周的时间才习惯了块状光标的使用方式。
这不是全有或全无,忘记纯粹主义者
我一直在读关于如何解绑方向键,以及每次编辑都应该与移动完全分离的文章。而且用鼠标也太邪恶了!
我这样做了好几天,甚至还发了推文:
但这对我这个简单的脑袋来说太难理解了。我从来都不是那种按主排打字的人,以后也永远不可能成为。我打字的时候手飞来飞去,但不知怎么的,我却能以每分钟75字的速度打字,而且准确率很高。
我也经常使用鼠标。
我用它hjkl
移动不太合适。我只想移动几个字符,用插入模式下的箭头键更爽,也更快。
别误会我的意思。我hjkl
确实偶尔会用,但这取决于我具体在做什么,这也让我意识到了另一个非常重要的收获。
并非每个运动都是非黑即白的决定
我花了大约一周的时间才意识到这一点,但一旦我意识到了,一切都变得更好了,我开始看到真正的进步。
我陷入了一种思维定式:某些事情我必须用特定的方式去做。比如,我内心深处一直在纠结,不知道该如何跳转到文件视图中的特定区域。
我一直在读 Vim 的功能远不止插入模式,要想真正发挥它的优势,你应该利用手势和热键来移动。你不应该按下向下箭头或j
按 10 次来向下移动 10 行,然后再移动超过 15 个字符才能到达你想要的位置。这样效率很低。
于是我犯了一个错误,开始寻找在文件可见区域移动的最佳方式。这导致我使用了 vim-sneak、easymotion 等插件,并根据移动所需的最少按键次数来衡量效率。
那真是个大错误,但我很高兴经历了那段时期。它提醒了我什么不该做。过去我曾以各种形式写过,试图通过理论构建解决方案并不能找到好的解决方案,但这正是我在 Vim 中所做的。
我试图优化一个我不完全理解的问题的解决方案。
当我意识到自己在做什么时,我立即停了下来,专注于使用它/
来快速移动到文件的特定区域。我发现使用 easymotion 的上下文切换比直接输入我想要跳转到的单词要糟糕得多。
但后来我了解到f
,、、和,它们非常适合F
在特定线上移动。它以一种非常好的方式解决了与什么不同的问题。t
T
%
/
我尝试得越多,就越意识到移动和编辑文件是一个自然而然的过程。有时我会用方向键,有时我会用j
向下移动一行,有时我会用鼠标,有时我会用其他工具。这真的取决于手头的任务和感觉如何自然。
便利贴助力打造势头
值得一提的是,这周我一直在显示器周围贴各种便利贴,上面记录着常用的 Vim 命令、动作和映射。到贴完为止,我已经贴了 7 张便利贴,大概记了 80 件事。
第 7 个仍在顶层架子上进行中,是的,我用那个魔方来挡住我的网络摄像头,但当我主动使用网络摄像头时,我也把它放在上面。
便签确实有助于建立信心和动力,因为如果我忘记了什么,只需快速看一眼就可以了,而不必中断思路去谷歌搜索。
所以,如果你发现自己不止一次地查找某个东西,就把它写下来。这是值得的。
第二周熟悉 Vim
到了第二周,我开始掌握了诀窍。我发现自己总是自然地使用诸如、、之类的动作ciw
,有时甚至不假思索就能做到,感觉很神奇。gg
G
.
我也经常使用i
、、、、和。虽然还不能做到不假思索地全部使用,但我能看到一切开始变得顺畅起来。I
现在,我移动和编辑文件的速度比我以前用过的任何编辑器都要快a
。A
o
O
就好像 Vim 是我大脑的延伸,这是我在任何编辑器上从未感受到的。
真正的整体速度提升仅仅来自于对大约20个动作和命令的半记忆。每个动作和命令单独来看,并不会改变世界,但当你把它们组合在一起时,效果就真的开始显现了。
这真的充分体现了 Vim 的思维模式。而 VSCode 则只是我眼中的普通文本编辑器。当然,用了一年之后,我记住了一堆快捷键,但我从未感觉速度提升了那么多。
另一方面,使用 Vim 时,我感觉它自然而然地推动着我进步。
Vim 堪比电子游戏
我是个电子游戏的狂热粉丝,尤其喜欢那些对技能要求较高的竞技游戏,比如《雷神之锤 3》或类似 Dota 的多人在线战术竞技游戏。使用 Vim 时,我能感受到和玩游戏一样的氛围。我感觉自己永远不会厌倦 Vim,而且用它真的非常有趣。
它满足了我脑子里一种奇怪的需求:不用玩游戏也能玩游戏。随着我越来越熟练地使用它,我也感受到了一种进步的感觉。就像我在升级一样。
Vim 第二周之后
当时我的 vimrc 简直就是个灾难区。我花了几周时间往里面塞东西,试了一堆插件,直到它彻底失控。它变成了一个杂乱无章的 500 行代码的庞然大物。
但此时,我已经对自己用过和没用过的东西感到满意了,所以我花了整整 3 个小时检查我的配置。我删除了所有不需要的东西,并尽可能地整理好了它们。现在它在我的dotfiles 仓库里了(附截图)。
这也是我开始添加一些自定义绑定的时候,但关键在于,我添加它们并不是为了添加而添加。所有绑定都源于直接的需求。基本上,如果我发现自己重复了很多次,我就把它变成了绑定。
有时绑定不会持续超过几个小时,而其他绑定可能会永远保留在我的配置文件中。
同样的思路也用在了插件上。我甚至没有搜索过“最佳 Vim 插件”之类的帖子。只有遇到特定问题时,比如“Dockerfile 的语法高亮”或“可视化不需要的空白”,我才会搜索插件。
一个月的实际使用
值得再次强调的是,在整个过程中,我都在用 Vim 进行各种尝试。遇到问题,并建立解决问题的肌肉记忆。
值得一提的是,差不多就是从那时候起,我不再用便利贴了。经过三周左右的反复练习,我记住了80%以上的常用内容。
编辑 YAML 文件、Markdown、Flask / Rails / Phoenix 项目等等。
我确实觉得这很有帮助。如果我继续用 VSCode 做客户端工作,那么这个过程会花费更长的时间,因为我没有获得任何实际的使用经验。我也会失去那种沉浸感。
另外,最初的那个周末是我唯一一个效率极高的时刻,而且是在下班时间。之后的几天,我的效率确实有所下降,但这并不意味着我浪费了一天8小时中的2个小时。
这可能只需要 20 分钟,而一堆小事加起来就只持续了几天,所以也许我浪费了一个小时的时间,是的,当我追踪我的时间时,我少给自己收了 1 个小时的费用,因为我就是这样的人。
虽然说实话,我觉得按那1小时计费在道德上并无不妥,因为6个月后会发生什么呢?如果我能提前15分钟完成工作,难道就意味着我赚的钱更少吗?这说不通。
或者六个月后我会提高我的收费标准,然后你就会看到一篇标题为“我如何通过学习 Vim 每小时额外赚 10%”的文章发布在这里。也许吧,哈哈。
顺便说一句,这就是为什么按小时计费有时会很糟糕,但在这种情况下,我当时正在处理的合同由于其持续性而按小时计费。
什么值得?
当然。
我觉得我前期投入了大约 25 个小时,这将对我未来 5 年以上的工作有所帮助。
我不确定 Vim 是否适合所有人,而且任何人切换 Vim 都不会给我带来任何好处,但由于我录制视频课程,我经常会让人们尝试将他们的开发环境与我的相匹配。
因此,当我切换关键工具时,我总是内心有点畏缩,因为我知道这意味着其他人可能会尝试做同样的事情,这可能会分散他们参加课程的注意力。
我只是想发这篇文章,让大家知道 Vim 并不是那种只有白发苍苍、奋斗了一辈子的老人才会用的神秘工具。如果你正好感兴趣,它值得一试。它是一款非常易用易用的编辑器。
你花了多长时间适应 Vim?请在下方留言告诉我。
文章来源:https://dev.to/nickjj/getting-productive-with-vim-in-a-week-without-hating-it-40cf