我的 CS 工作流


本文简单介绍和总结一下我日常科研所使用的一些软件与配置.

编辑器 VSCode

对于 CS 科研狗来说最重要的东西莫过于编辑器/IDE了. 据我观察, 身边同龄人几乎都用 VSCode, 我自然也不例外.

字体与主题

  • 字体: Fira Code, 主要原因是我个人非常喜欢连体字的显示效果.
  • 主题: Quiet Light for VSC, 我个人非常喜欢的白天主题颜色, 尤其喜欢深红色的函数名.

Vim 模式

如何生成随机字符串?让一个 Windows 用户使用 Vim,然后让他退出。

或许我的配置里面最值得拿出来说的就是这个 Vim 插件了. (这也是我发这篇文章想要安利的主要的东西)

首先我并不是一个经典和重度的 vim 用户, 也记不住那么多快捷键, 使用的最多的功能无非是 hjkl(代替上下左右移动光标), dd(删除本行), w(下一个词), shift a(行尾插入) 和 visual 模式下对多行的同时操作.

我推荐 Vim 模式插件的主要原因是我们可以舒适的把合理的按键映射到 VSCode 本身提供的功能.

举几个例子, vsc 里面有些我个人(大部分人)特别常用的功能:

  • cmd + shift + p, 打开命令面板.
  • cmd + p, 查找当前工作区的文件.
  • cmd + shift + o, 查找当前文件的符号(查找函数之类的)
  • 切换不同的打开的文件, previous/next editor.
  • 把终端调高调低, 这个看终端显示的时候比较常用. 我以前使用鼠标的时候使用体验较差, 总是要拉到终端的边缘才能调整大小.

也有与语言相关的功能(需要对应语言插件):

  • 查看函数的定义, 按住 cmd 点击函数名.
  • 查看函数的文档, 也就是鼠标悬停在函数上面的时候显示的那个文档.
  • 重命名变量, 右键点击变量名, 选择 rename symbol.

这些功能特别实用, 而 VSCode 都提供了对应的命令, 有的有快捷键, 有的可以自己设置快捷键, 但我在使用中感觉并不好:

  • 快捷键记不住或者难按, 由于不能和已有的快捷键和普通键冲突, 所以大部分快捷键都并不自然, 尝试记住这些快捷键还不如鼠标点一下.

所以一个自然的想法就是能不能区分不同的模式, 我们平时在编辑代码的时候就是插入模式, 而需要一些特殊操作的时候进入一个normal模式, 这个模式时我们可以把普通的好记的按键映射到那些想要的功能. 而这个 idea, 几十年前的 vim 就已经实现了.

所以我就利用 vim 的各种模式, 把上面提到的那些功能映射到了舒服切好记的按键.

这里可以看到我对于 vscode vim 的全部配置, 同样举一些我自己用的例子:

  • shift + : 打开命令面板. ff(find file) 找文件, fs(find symbol) 找符号.
  • rn(rename) 重命名符号
  • gd(go definition) 跳转到定义, gb(go back) 跳回来, ge(go error) 跳转到错误的地方.
  • tab/shift tab 切换到 previous/next editor.
  • > 把当前 editor 推到右边, 这个对于想同时对照看两个文件的时候很有用.
  • control + ~ 切换终端和编辑器, cmd + j/k 调整终端大小, 这个体验也很不错.
  • j+j 进入 normal mode.
  • … 还有一些, 详见配置文件.

本来想搞个 gif 演示一下的, 但是由于我太懒了, 就没做 :-(

在 vim mode 的帮助下, 记住这些快捷键可谓是相当容易了(大概), 你可以用你自己直觉上记得住的按键, 反正都是由自己配置的, 自己体验好就行.

当然了, 当我慢慢开始使用 vim 时, vim 本身的逻辑和功能也给我带来了一些方便, 这就与我要介绍的重点无关了, 感兴趣的同学可以自行搜索.

其他插件

这里再推荐几个我觉得比较好用的插件.

  • Error lens, 可以在代码中直接显示错误信息, 不用再去下方的错误提示栏中查看.
  • indent-rainbow 提供彩虹色锁进.
  • 各种语言的插件, 这里特别推荐 clangd, 有时候比微软那套 C++/ C 好用.
  • Copilot, 不用说了.
  • vscode-icons 提供更好看的图标, 纯粹是看着舒服.

最后, 我在写 Java 的时候我会是选择 IDEA, 但是最近和未来大概都没有写 Java 的打算, 也就不再赘述.

Shell 与 Terminal

fish

Shell 其实在工作中用的还是比较多的, 被jyy老师在网课上安利之后我就选择了 fish. 使用它的最主要原因就是开箱即用的智能补全, 这个功能在真正写命令的时候极其好用, 从此不用再把命令复制到文件里用的时候再拷贝出来了 :-).

除此之外, abbr, 即缩写也是一个不错的功能, 比如我在 fish 的配置文件中写了这么一段:

➜  ~                                                              (zju)
   abbr -a -- m make
   abbr -a -- c cargo

我在敲击 m 的时候就会自动补全为 make, 敲击 c 的时候就会自动补全为 cargo. 这样的话有时候可以让手指舒服点…

fish 的一个弊端是与 bash 语法不兼容, 使用时要注意一下.

Iterm2

MacOS 上的默认终端是 Terminal, 但是我使用 Iterm2, 也没有什么特别的原因, 就是 iterm2 可以显示的色彩更多一点?

实用命令行工具

随着 Rust 等现代编程语言的发展, 有很多人用这些语言重写了部分经典的命令行工具, 感兴趣的同学可见 modern unix, 这里介绍几个我用的比较多的.

  • du -> dust. dust 可以更舒适的查看整个文件夹的占用大小分布, 看张图你就懂了.
  • find -> fd. 更舒适的查找文件, 比如 fd -e md 就是查找所有的 markdown 文件, fd -e rs mod 就是查找所有的 rust 模块文件.
  • cat -> bat. 更舒适的查看文件, 适合你要在有语法高亮的情况下简单查看某个文件的情形.

其他

  • 包管理器 Homebrew. MacOS 上的包管理器, 没啥好说的.
  • 文献阅读 Zotero. 标准的文献管理软件, 使用插件可以直接在浏览器中导入文献, 划词翻译也挺好用的.
  • Markdown 编译器 Obsidian. 这方面其实我没有什么要求, 就是一个写笔记做总结的 markdown 集中放置的地方, 所以也没有进行过多的配置. 使用 Obsidian 纯粹是 Typora 不免费了.