先声明,标题里的「翻倍」是夸张。真实情况大概是每天省 20 到 40 分钟,一年下来一百多小时,也不算少。
下面这七个习惯是我十年里筛下来的。我删掉了很多「看起来酷但其实用不上」的技巧,留下的每一条我都还在天天用。
习惯一:把 Ctrl+R 用到极致
这是投入产出比最高的一个,没有之一。
但光会按 Ctrl+R 不够,关键是配置:我把历史记录条数设成了 100000,开了跨会话共享,去掉了重复项,并且忽略以空格开头的命令(用来敲含密码的命令)。
更进一步,我装了模糊搜索版本的历史检索。区别在于:原生 Ctrl+R 只能匹配连续子串,模糊版可以敲 dkr ps 匹配到 docker ps -a --format ...。我每天大概按 30 次,几乎每次都省下十几秒的回忆和打字。
习惯二:cd 这个动作应该消失
我统计过一次,我一天敲 cd 的次数超过 60 次,其中绝大部分是在五六个固定目录之间跳。
解决方案是频率排序的跳转工具:z proj 直接跳到最常用的那个匹配 proj 的目录。装上第一周我就再没敲过完整路径。
配套的一个小习惯是 cd -,在上一个目录和当前目录之间来回切。这个是内置的,很多人不知道。
习惯三:管道之前先看一眼
这是个安全习惯,不是效率习惯,但它救过我。
凡是要批量删除或者移动,我一定先把命令写成只输出的形式看一遍,确认无误再加上执行部分。比如先跑 find . -name '*.tmp',看清楚列表,再加 -delete。
我见过同事把 find 的路径参数写错,直接 -delete,删掉了半个共享目录。多花五秒钟看一眼列表,这个习惯是绝对划算的。
习惯四:用 fzf 改造一切选择动作
凡是「从一堆东西里挑一个」的场景,我都接了模糊选择器:
- 切分支:列出所有分支,模糊选,回车切换。
- 杀进程:列出进程,模糊选,回车 kill。
- 打开文件:列出目录下所有文件,选中直接进编辑器。
- 看 git 历史:列出 commit,选中显示 diff 预览。
最后那个我用得最多。以前我要看某个改动,得先 git log 找 hash,复制,再 git show。现在一个命令,边翻边预览。
习惯五:别名要短,但别太聪明
我的别名只有 20 来个,都很短:g = git,gs = git status,gd = git diff。
我曾经犯过一个错,写了十几个特别复杂的别名,比如一个别名同时做 fetch、rebase、push。结果有天在别人电脑上工作,我完全不会用 git 了。而且那个复合别名在冲突时的行为我根本不清楚,出过一次事。
现在我的规矩是:别名只做缩写,不做逻辑。有逻辑的写成脚本,脚本我知道它在干什么。
习惯六:终端复用器,但只用三个快捷键
我用终端复用器五年了,但我只用三个功能:新建窗口、切换窗口、detach。
我试过学全套快捷键,背了三十多个,两周后忘光。后来我承认,我需要的就是「断线不丢任务」和「一个会话开几个窗口」。这两件事三个快捷键就够了。
它救过我一次比较惨的场景:我在跑一个四小时的数据迁移,笔记本 WiFi 断了。如果是直接 ssh,进程就跟着死了。有复用器,重连之后一切照旧。
习惯七:给长命令留个记号
有些命令我一年用两次,但每次都得重新查半天参数。我的做法是在家目录放一个 notes.md,里面按主题分段记这些命令,然后配一个快捷键,能模糊搜索这个文件并把选中的行填到命令行里。
现在这个文件有 200 多行。最常被翻出来的是一条 ffmpeg 命令和一条证书查看命令,都是那种「用的时候一定想不起来」的东西。
最后说说什么我放弃了
为了平衡一下,说几个我学过但最后放弃的:
- vi 模式的命令行编辑。我试了一个月,效率反而降低,因为我经常忘了自己在哪个模式。
- 特别花哨的提示符。我曾经的提示符显示 git 状态、node 版本、耗时、电池,结果每次回车有 300 毫秒延迟。现在只剩当前目录和 git 分支。
- 大量的自定义函数。我写过 40 多个 shell 函数,现在只剩 6 个。理由跟脚本一样:记不住的工具等于没有。
说到底,命令行的效率不来自于你会多少技巧,而来自于你把最高频的那几个动作打磨到了什么程度。我每天敲的命令里,大概 80% 集中在 15 个上。把那 15 个搞舒服,比学一百个新命令有用得多。