程序员每天能省 1 小时的 50 个 macOS/终端/Git/浏览器技巧

  1. Ctrl+R 搜历史命令,而不是重新敲。 原生 shell 就能用;再装 fzf 后体验会好很多。以前敲过的超长 curlkubectlgit 命令,输入几个关键词就能找到。

    bash 复制代码
    brew install fzf
  2. zoxide 替代反复 cd ../../xxx 它会学习你常去的目录。

    bash 复制代码
    brew install zoxide
    eval "$(zoxide init zsh)"

    以后:

    bash 复制代码
    z tools
    z rust
    z mdbook
  3. rg 替代 grep -R 搜代码快、默认忽略 .gitignore、输出漂亮。

    bash 复制代码
    rg "context.WithCancel"
    rg "TODO" --type go
    rg "unsafe" crates/
  4. fd 替代大多数 find

    bash 复制代码
    fd '\.rs$'
    fd main.go
    fd -e js

    比:

    bash 复制代码
    find . -type f -name '*.js'

    更适合日常使用。

  5. pbcopy / pbpaste 是 macOS 程序员神器。

    bash 复制代码
    git diff | pbcopy
    pbpaste > /tmp/a.txt
    cat ~/.ssh/id_ed25519.pub | pbcopy

    终端和 GUI 之间几乎零成本搬数据。

  6. 输出直接打开,不要先 Finder 找文件。

    bash 复制代码
    open .
    open README.md
    open report.pdf
    open https://github.com/golang/go

    open . 尤其高频。

  7. Finder 中选中文件按 Space 快速预览。 PDF、图片、视频、Markdown、代码、Office 文件很多都不用真正打开应用。

  8. 截图直接进剪贴板,不制造桌面垃圾。 ⌘ + Control + Shift + 4 → 框选 → 直接去 Slack/微信/GitHub 粘贴。

  9. ⌘ + Shift + 4 后按 Space,只截一个窗口。 写 Issue、PR、文档时非常方便。

  10. 用剪贴板历史。 如果一天复制几十次内容,这是最值得开启的功能之一。Raycast、Alfred 等都能做。复制过的 IP、命令、URL、代码片段都不用重新找。

  11. 给 Git 设置高频 alias。

bash 复制代码
git config --global alias.st status
git config --global alias.sw switch
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm commit
git config --global alias.last 'log -1 --stat'

最重要的不是少敲几个字符,而是降低操作摩擦。

  1. 配置一个真正有用的 Git log。
bash 复制代码
git log --graph --decorate --oneline --all

可以设置:

bash 复制代码
git config --global alias.lg \
  "log --graph --decorate --oneline --all"
  1. 养成用 git switch / git restore 的习惯。 它们比老式 checkout 的语义清晰:
bash 复制代码
git switch main
git switch -c fix/foo
git restore foo.go
  1. 只提交一个文件中的部分修改:git add -p
bash 复制代码
git add -p

一个文件改了 bug、重构、debug 日志三件事,也能拆成干净 commit。

  1. 撤销刚刚 stage 的内容,不撤销代码。
bash 复制代码
git restore --staged foo.go
  1. 提交前永远看一次 staged diff。
bash 复制代码
git diff --cached

比单纯 git diff 更重要,因为这才是真正准备提交的内容

  1. 忘了某段代码什么时候被改,用 git blame + git log -L
bash 复制代码
git blame foo.go
git log -L 120,170:foo.go

后者会告诉你某几十行代码的演化历史。

  1. 丢 commit 先查 git reflog,不要慌。
bash 复制代码
git reflog

reset、rebase、误删 branch 后,大多数情况下 commit 其实还在那里。

  1. 找"哪个 commit 引入 bug",学会 git bisect
bash 复制代码
git bisect start
git bisect bad
git bisect good v1.2.0

对大型项目尤其省时间。

  1. 频繁 rebase 时开启 rerere Git 会记住你解决 conflict 的方式。
bash 复制代码
git config --global rerere.enabled true

同一批冲突以后再出现,Git 可以自动复用解决方案。

  1. 修前一个 commit 用 --fixup
bash 复制代码
git commit --fixup <commit>
git rebase -i --autosquash <base>

做 PR 时特别舒服,不必自己手工移动和 squash commit。

  1. 比较两版 patch,用 git range-diff PR rebase/修改几轮后非常有价值:
bash 复制代码
git range-diff main...old main...new

它回答的不是"最终文件哪里不同",而是"这一轮 patch 相比上一轮改了什么"。

  1. 同时维护两个分支,用 git worktree,不要反复 stash。
bash 复制代码
git worktree add ../project-fix fix-branch

你可以同时拥有:

text 复制代码
project/       main
project-fix/   fix-branch

对开源贡献非常实用。

  1. 临时保存修改时给 stash 命名。
bash 复制代码
git stash push -m "WIP parser fix"
git stash list

不然半个月后看到 stash@{7} 根本不知道是什么。

  1. 只 stash 一部分内容也可以。
bash 复制代码
git stash -p
  1. 查看某文件改动统计,不必打开 GitHub。
bash 复制代码
git log --stat -- path/to/file
git log -p -- path/to/file
  1. 不知道命令输出怎么处理,优先考虑管道。
bash 复制代码
command | rg xxx
command | sort
command | uniq -c
command | jq .
command | pbcopy

Unix 的效率很多就来自这里。

  1. JSON 永远不要肉眼看一整坨,交给 jq
bash 复制代码
curl ... | jq .
curl ... | jq '.data.items[] | {id,name}'

API 调试能省非常多时间。

  1. 查 JSON 某个深层字段:
bash 复制代码
jq -r '.data.user.name'

-r 可以去掉字符串外面的引号。

  1. 大文件别习惯性 cat 用:
bash 复制代码
less huge.log

less 里:

text 复制代码
/error      搜索
n           下一个
N           上一个
G           文件末尾
g           文件开头

日志排错非常高频。

  1. 实时日志别一直重新执行命令。
bash 复制代码
tail -f app.log

如果想同时过滤:

bash 复制代码
tail -f app.log | rg --line-buffered ERROR
  1. Shell 光标操作别一直按方向键。 常用几个足够:
text 复制代码
Ctrl+A   行首
Ctrl+E   行尾
Ctrl+U   删除光标前全部
Ctrl+K   删除光标后全部
Ctrl+W   删除前一个单词
Ctrl+L   清屏

一天能用几十次。

  1. 上一条命令忘加 sudo:
bash 复制代码
sudo !!

!! 就是上一条命令。

  1. 上一条命令的最后一个参数:
bash 复制代码
!$

例如刚执行:

bash 复制代码
mkdir /tmp/very-long-directory-name

接下来:

bash 复制代码
cd !$
  1. 复杂命令先在命令行里编辑,不要删掉重敲。 zsh/bash 可以设置 $EDITOR 后用 shell 的编辑模式;或者直接利用终端支持的多行编辑。特别长的 curl、SQL、Git 命令很有价值。

  2. 给项目创建 .envrc + direnv。 进入目录自动设置环境变量,离开自动取消:

bash 复制代码
brew install direnv

项目里:

bash 复制代码
export GOPRIVATE=xxx
export RUST_LOG=debug

不用每天重新 export。

  1. 临时 HTTP Server 不要写程序。
bash 复制代码
python3 -m http.server 8000

当前目录立即变成静态文件服务器。

  1. 想知道是谁占了端口:
bash 复制代码
lsof -i :8080
lsof -nP -iTCP:8080 -sTCP:LISTEN

Mac 上排服务问题非常常用。

  1. 找到进程后不用复制 PID 再 kill,可以组合起来。
bash 复制代码
lsof -ti :8080 | xargs kill

确认无误后才考虑 kill -9

  1. 查看程序到底从哪里来的:
bash 复制代码
which go
type go
command -v go

PATH、多个 Go/Rust/Java 版本冲突时,第一时间执行它。

  1. Safari/Chrome 网页搜索直接用 ⌘+F,但更重要的是浏览器标签搜索。 Chrome 系浏览器 ⌘+Shift+A 可以搜所有已打开标签。开 50 个 GitHub 页面时非常好用。

  2. 误关标签页:⌘+Shift+T 可以连续按,恢复前面多次关闭的页面甚至窗口。这应该形成条件反射。

  3. ⌘+L 直接聚焦地址栏。 不需要鼠标点地址栏:

text 复制代码
⌘L
输入关键词
Enter

搜索、跳网站、复制当前 URL 都更快。

  1. 浏览器配置"站内搜索快捷词"。 例如设置:
text 复制代码
gh rustfmt

自动变成 GitHub 搜索;

text 复制代码
go context

搜 pkg.go.dev;

text 复制代码
mdn fetch

搜 MDN。对于经常查文档的人,这是非常大的提效点。

  1. DevTools 里用 ⌘+Shift+P 打开 Command Menu。 和 VS Code Command Palette 很像,可以直接搜索:
text 复制代码
screenshot
disable cache
coverage
javascript

不必记某功能藏在哪个菜单里。

  1. Network 请求直接 Copy as cURL。 浏览器里找到请求 → Copy → Copy as cURL,然后丢进终端:
bash 复制代码
curl 'https://...' \
  -H 'authorization: ...'

调接口、复现前端问题时,比自己拼请求快很多。

  1. Chrome DevTools 的 Preserve log 很值得开启。 页面跳转、OAuth 重定向、登录失败时,如果不开它,上一页请求记录可能瞬间没了。

  2. 不同工作身份使用不同 Browser Profile。 比如:

text 复制代码
Personal
Work
Open Source
Testing

GitHub 登录态、Google 账号、插件、Cookies 完全隔离。比不停退出登录省事很多。

  1. 给重复操作写 shell function,而不仅仅是 alias。 Alias 适合:
bash 复制代码
alias k=kubectl

Function 可以做真正的小工具:

bash 复制代码
mkcd() {
    mkdir -p "$1" && cd "$1"
}

以后:

bash 复制代码
mkcd /tmp/test/foo

如果一个操作一周重复 3 次以上,我就会考虑把它自动化。

  1. 终极原则:把"检索"替代"整理"。 不要花太多时间维护完美目录结构、几十层书签、几百个标签。保证东西容易被搜索到 更重要。文件用 Spotlight/fd,代码用 rg,历史命令用 fzf,Git 历史用 log,浏览器用标签搜索,剪贴板用历史搜索。真正熟练以后,你的工作模式会从:
text 复制代码
我把它放在哪里了?
↓
打开目录
↓
一层层找

变成:

text 复制代码
⌘Space / rg / fd / Ctrl+R
↓
输入 3~5 个字符
↓
找到

其中我最建议优先装的几个工具,其实就这么点:

bash 复制代码
brew install \
  ripgrep \
  fd \
  fzf \
  zoxide \
  jq

然后 .zshrc 至少加上:

bash 复制代码
eval "$(zoxide init zsh)"

如果只能先练 10 个 ,就练 Ctrl+R + fzfzoxidergfdpbcopy/pbpastegit add -pgit refloggit worktree、浏览器 ⌘L/⌘⇧A/⌘⇧T、DevTools Copy as cURL。这几个属于一旦习惯后,很难再回到原来的操作方式。

相关推荐
神奇小汤圆1 小时前
Redis为什么使用哈希槽而不用一致性哈希
后端
用户8356290780511 小时前
Python设置PowerPoint幻灯片背景的方法
后端·python
站大爷IP1 小时前
Python 的 is 把我坑惨了,原来 == 和 is 在小整数池外完全是两码事
后端
用户40966601317512 小时前
Jackson 序列化:@JsonIgnore / @JsonProperty / @JsonFormat / @JsonInclude / @JsonUnwrapped 一次讲清楚
java·后端
雨落倾城夏未凉2 小时前
halcon核心-图像预处理(四)
后端
用户233376852182 小时前
一张损坏JPEG文件的背后排查
后端
nnerddboy2 小时前
Rust教程06:ESP32-rust环境搭建
开发语言·后端·rust
步行cgn2 小时前
MyBatis resultMap 结果映射完全指南
后端
nnerddboy2 小时前
Rust教程03:函数,控制流与所有权
开发语言·后端·rust