[VSCodeVim] Vim的思维、哲学与解决问题之道 (二)

Vim的思维、哲学与解决问题之道 (二)


[系列文目录]

上篇文章 我们提到了两点使用Vim的重点原则:

  1. 先阅读,再写作。
  2. 用组合命令解决问题。

这篇文章我们继续详述下面两点:

  1. 用更少的动作完成任务。
  2. 减少重复,提高效率。

三、用更少的动作完成任务


在使用Vim时,我们的动作组合是可以不断琢磨而进步的。透过练习用更少的动作完成任务,我们会越来越有感觉。

并不是所有的组合命令都是最佳解。在前面的组合例子中,我们用最小的动作完成目标。对於刚接触的朋友来说,未必可以一下找到某个情境的最佳解法。

以上篇文章中删除ag字元的示范为例,您可能想先直接进入可视模式(Visual Mode),从a手动选取到g,再用d命令删除。此时太在意最佳解的话可能因为多按了好几个键,感到烦躁,转而寻找其它组合完成目标。

进一步优化的话,您也许会选择组合vfg,使用vfg 选取後,再用d 删除。最後发现其实自己只要用dfg
就可以完成任务了。

但是,不用想要什麽问题都找到最佳解才开始,这样反而会过度专注在工具上,拖慢思考的速度。先用自己最自然的命令组合开始,之後慢慢改进即可。

日常开发速度的瓶颈不见得在打字跟命令的顺序上,因此使用不会打断思考的方式开发,让自己写得顺,比写得快重要。若在日常开发时因为思考命令怎麽有效而让工作停摆,反而是矫枉过正了。

和程序开发一样,在了解「过早优化为万恶之源」原则的同时,我们不应该完全放弃那3%可以让我们提升开发速度的机会。

四、减少重复,提高效率。


在前面的范例中,我们使用了组合的命令,有时候会有多个类似的情境,可以用同样的命令处理。以一个JavaScript 或TypeScript 开发者熟悉的情境为例,在档案上面import语法的地方我们有几个没有用到或是不存在的类别或物件。

在Vim里面我们可以先将游标移至该物件上的文字上,如下图所示:

接着,使用daW组合命令,删除游标底下的文字与逗号後面的空白。

对於下面第二个有问题的物件,我们继续将游标移动到该字上,并使用.命令即可重复删除的动作,不用重新打重复的指令。

如果有多个物件是同名的,在Vim里面我们可以先使用*命令搜寻同名物件,先按daW 命令完成任务,再按n移至下一个同名的物件,後面按.删除即可。

但现实情境往往不会那麽简单,通常没用到的import物件都是不同名的。

在VS Code里,有一个内建的命令「 Go to Next Problem in Files (Error, Warning, Info)
(Command ID:editor.action.marker.nextInFiles),可以将游标移动至出现警告或错误的文字上。笔者将其绑在MacOS「 Cmd + e 」的快捷键上。在移除相同位置的import物件时,先用daW删除,後面继续用「 Cmd/Ctrl + e 」与 .命令,即可完成上面任务。

在最後例子里,我们不仅使用了Vim的.命令解决问题,也合并使用了VS Code的快捷键,让我们在相同情境下处理跟解决问题的方式变得快速。

这正是一个善用Vim的思维与VS Code命令以提高编辑器效率的例子。

在我们使用工具的同时,我们并不局限什麽功能是Vim的命令,哪些是VS Code或相关的语言服务提供的,然後仅使用Vim组合命令的模式。而是将Vim的思维内化,在现有的环境下(此处我们是使用VS Code与VSCodeVim),选用适当的方式处理当前的问题,也因此节省了相关的时间成本。

解决问题的方法有许多种,在对同名文字操作的情况,VSCodeVim提供gb命令让我们可以连续选取同名的文字,再统一对文字操作。没有最好的解法,只有更适合当下情境的做法,请视情况采用方法。除此之外,目前版本VS Code 已经内建了Remove unused Import的相关Code Action,游标移至为使用到的import物件处,点击Cmd+.,可於跳出的选单下方选取并执行相关操作。在VS Code里,如果要移除多个unused import,使用此处语言服务提供的功能,这其实是相同情境下更好的做法。

参考资源



<<:  [VSCodeVim] Vim的思维、哲学与解决问题之道

>>:  Golang - 使用docker部署专案

[第24天]理财达人Mx. Ada-RSI指标

前言 本文说明RSI指标。 RSI指标 RSI(Relative Strength Index):相...

客户抱怨 v.s. 客户开发

自从到了美国之後,原本预期要来好好开发海外市场的,果然事情没有这麽顺利,既有客户所遇到的 Bug 跟...

Day27 跟着官方文件学习Laravel-Request 生命周期

Laravel 文件中有跟我们介绍一个 request 的生命周期,也就是诞生到结束在 Larave...

[DAY 05] MultipleChoiceItem

接下来是占考试中最大宗的选择题啦~~ 这个选择题是指form 中的「单选题」 最明显的部分 是预览模...

Day 30 设计的问题

最後,我们提一下,设计时可能面对的问题,首先,分类要分好,因为资源有优先顺序的问题,所以在设计的时候...