vscode-调整配置以保持专注

分享:  

前言

保持专注、减少外界干扰,首要的是培养内在的专注力,而不是依赖工具。回想起我前几年的一些经历:

  • 我的 MacBook Pro Touch Bar 经常闪烁,几乎刺痛了我的双眼。最终发现是硬件故障,我曾看到一个网友的解决方法,简直让我笑掉大牙。他直接用黑色胶带把 Touch Bar 给封住了。
  • 后来我购买了一款防眩光、防窥的屏幕膜,但它稍微有些厚度,导致关闭屏幕时无法完全贴合。我开始寻找更轻薄、更便携的替代品,直到一个“老手”给了我建议:“简单点,直接将屏幕膜撕下来放在配套袋子里。”

为何提及这两个例子呢?其实是想说,现阶段虽然有很多创新产品,但未必完美。与其花大量时间寻找“完美”,不如早日认识到自己深处发展历程中的某个时刻、转而采用更经济更有效的解决方案。

但是,尽管产品成品不完美,但我们依然可以尽己所能让它接近我们期望的那样。就比如使用vscode进行开发时,我希望它能在不同规模的项目中能够帮助开发者保持专注

问题背景

项目采用的微服务架构+monorepo进行代代码组织,每个微服务一个子目录,当然也有很多scripts、tools、ci/cd配置、配置文件管理、外部依赖等等。业务开发的时候,其实你很想只关心某些范围,而忽略掉不相关的范围,以让自己保持专注的同时提升检索、开发的效率。

为了保持专注,不同产品中有不同的设计,比如KDE中的activity,IDEA中的projectscope,Typora中有打字机模式……就不扯远了,我们只看看vscode中能做到什么程度,来让开发者保持更好的专注度。

配置方式

忽略掉不关心的文件: files.exclude

vscode中支持在explorer、代码搜索操作中忽略某些文件夹、文件,这个是通过配置一些忽略规则来实现的。

规则配置说明,详见:see: https://code.visualstudio.com/docs/editor/glob-patterns

如果代码库是monorepo管理的,使用git进行版本控制(没有针对大仓的权限控制、拉取等进行特殊优化),那拉取下来后文件数量会很多,但是在我们对全局进行了了解之后,以后大部分功能开发过程中,你很可能希望能聚焦于其中某些部分,而非全部。不管是explorer中查看,还是代码搜索时检索,还是提交日志检查,你都希望能尽可能聚焦。所以是有必要隐藏某些不紧密相干的内容的。

忽略gitignore中文件: explorer.excludeGitIgnore

gitignore中通常会忽略一些文件,大多数时候这些文件也是一些不需要在explorer中显示的,所以vscode也增加了这样一个配置项,允许忽略.gitignore中忽略的文件。

严格来说,是vscode会读取gitignore中的配置,但是对其中某些规则的解析上并不完全等同于git。

举个例子,下述配置项通常用来忽略linux上的编译构建生成的二进制程序,但是如果vscode读取后就会忽略所有内容,并不完全等价于git忽略的内容。

*
!*.*
!*/

不要watch不关心的目录:files.watcherExclude

vscode会通过filesystem watch特性来监视某些文件内容的修改情况,以便及时reload最新内容,但是这也是由性能开销的,如果某些路径下的变更不是自己关心的,可以考虑忽略。至少在显示打开、强制reload window时还是会加载最新内容的。

通过 project scope

IDEA系列的IDE产品中,有一个非常有用的特性,project scope。

前面提到的两种方式,控制的事工程全局层面,哪些文件可显示、隐藏出来。而project scope则是概念上对工程的划分。

比如用户登录流程、用户匹配流程、对局结束流程、DS管理流程,这些不同关键链路上的服务列表,它们有重叠的,也有各自特有的。用project scope进行管理就非常方便了。

你可以创建不同的project scopes,然后每个scope控制好要显示、隐藏的文件,当希望从某个关键业务流程切换到另一个关键业务流程的开发时,只需要切换project scope就可以了。

很遗憾的是,vscode原生不支持project scope,但是有些作者通过vscode extension的方式来实现了project scope,实现方式就是在进行scope切换时,自动帮用户设置好files.exclude。

通过 workspace

vscode支持workspace,以及multi-root workspace,意思是你可以将多个独立的工程组织在一个workspace中,在一个workspace中也可以控制显示、隐藏的文件。

workspace是不同于project scope的另一种特性,可以针对同一个project配置多个workspace分别设置好隐藏、显示规则,可以近似实现project scope的功能。 multi-root workspace还可以将多个不相干的projects组合在一个workspace里面,比如我有些个人兴趣驱动的电子书,调试器相关的、RPC框架相关的、Go语言设计实现相关的,我就可以将这几个独立的工程编排为一个workspace。

$ cat ~/.workspaces/iwrite.code-workspace 
{
  "folders": [
    {
       "name": "📕gorpc@ebook",
       "path": "../gorpc101/gorpc101"
    },
    {
        "name": "📗debug@ebook",
        "path": "../debugger101/golang-debugger-book"
    },
    {
        "name": "📘golang@ebook",
        "path": "../github/go-internals/content/docs"
    },
  ],
  "settings": {
    "files.exclude": {
    }
  }
}

本文总结

简单总结了项目采用monorepo+vscode进行开发的情况下,开发者可以通过哪些配置来让自己更聚焦于关心的内容,避免自己的精力淹没在巨量的文件和代码中。谈不上什么高大上的经验,一点日常功能开发中积累的心得而已。