我的 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 不免费了.