MacOS 开发环境开荒
本文第一版写于2025-10-04,截止到现在(2026-05-02),很多软件已经有了更好的替代,于是重写本文。
其实文题中的”开荒”并不恰当,以下这些都是笔者长期使用后发现/留下来的好东西
网上总是充斥着一种
mac是美丽废物的陈词滥调,常见观点比如程序员只适合mac、mac只能办公,不能打游戏等。我的意见是,电脑不论品牌或操作系统,只是一个工具,只要用的顺手就可以了。经过细致的配置,任何平台都能成为趁手的工具——问题的关键从来不在于你用什么系统,而在于你愿不愿意花时间去调教它。
To be honest,其实我更想要一台Linux笔记本,macOS总是教用户做事,arm64架构虽然能效优秀,但多少会遇到一些架构上的问题。或许轻量笔记本+高性能主机才是最优解?
终端类
Zsh配置
Prompt美化
一个流行的方案是使用Starship,替代笨重的oh-my-zsh或powerlevel10k

笔者提出一个更加轻量的配置,适合只需要显示少量信息的用户
.zshrc
setopt prompt_subst
local blue='%F{39}'
local yellow='%F{220}'
local green='%F{82}'
local reset='%f'
PROMPT=$'\n''%F{blue}%~%{${reset}%}'$'\n''%F{green}➜${reset} '
Zsh提示扩展
颜色:
使用%F{color}设置前景色,%f清除前景色,%K{color}设置背景色,%k清除背景色。
内置black, red, green, yellow, blue, magenta, cyan, white这8种颜色,例如%F{cyan}
zsh也支持ansi256色,可以用for code in {000..255}; do print -P -- "$code: %F{$code}Color%f"; done打印所有颜色,使用方法如%F{33}
现代zsh版本还支持hex颜色,如%F{#50F862}
zsh还提供colors工具:autoload -U colors && colors,echo "$fg[red]This is red text$reset_color"
文本样式:
Bold:%B...%b,Underline:%U...%u,Standout:%S...%s
一些转义符:
%~:以home开始的路径
%T:24hr格式的当前时间
更多可见:Zsh Prompt Expansion
所以定制自己的prompt不是什么难事啦
命令补全
这些配置主要是用于取代zsh-autosuggestions插件,又笨又慢
效果:
命令补全(输入se按Tab)

命令纠错(输入braw按Tab)


路径自动补全(输入d/o/b按Tab)


可以结合zsh-syntax-highlighting插件提供命令的高亮显示
autoload -Uz compinit && compinit
setopt MENU_COMPLETE AUTO_MENU
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
zstyle ':completion:*' menu select
zstyle ':completion:*:matches' group 'yes'
zstyle ':completion:*' file-sort modification
zstyle ':completion:*' squeeze-slashes true
zstyle ':completion:*' completer _complete _approximate _extensions
zstyle ':completion:*' group-name ''
zstyle ':completion:*:*:*:*:corrections' format '%F{yellow}-- %d (errors: %e) --%f'
zstyle ':completion:*:*:*:*:descriptions' format '%F{blue}-- %D %d --%f'
zstyle ':completion:*:*:*:*:messages' format ' %F{purple} -- %d --%f'
zstyle ':completion:*:*:*:*:warnings' format ' %F{red}-- no matches found --%f'解释:
autoload -Uz compinit && compinit
# 加载 Zsh 的补全系统
setopt MENU_COMPLETE AUTO_MENU
# 按 Tab 时直接进入补全菜单,而不是列出所有选项
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
# 补全匹配忽略大小写、允许在任意位置匹配
zstyle ':completion:*' menu select
# 使用可选择菜单显示补全选项
zstyle ':completion:*:matches' group 'yes'
zstyle ':completion:*' group-name ''
# 对匹配项进行分组,但不显示组名
zstyle ':completion:*' file-sort modification
# 文件补全时按修改时间排序
zstyle ':completion:*' squeeze-slashes true
# 压缩路径中的多个斜杠为一个
zstyle ':completion:*' completer _complete _approximate _extensions
# 设置补全器的执行顺序:
# _complete:普通补全
# _approximate:近似补全(拼写纠错)
# _extensions:文件扩展名补全
zstyle ':completion:*:*:*:*:corrections' format '%F{yellow}-- %d (errors: %e) --%f'
# 纠错信息的黄色格式化输出
zstyle ':completion:*:*:*:*:descriptions' format '%F{blue}-- %D %d --%f'
# 描述信息的蓝色格式化输出
zstyle ':completion:*:*:*:*:messages' format ' %F{purple} -- %d --%f'
# 消息的紫色格式化输出
zstyle ':completion:*:*:*:*:warnings' format ' %F{red}-- no matches found --%f'
# 警告信息的红色格式化输出2025.12.13 补充:
可以参考grml的默认zsh补全配置https://github.com/grml/grml-etc-core/blob/d841ed8a2774b3928b5165609a6733f0b747c482/etc/zsh/zshrc#L588
快捷键
以Home和End跳转命令头尾为例
oh-my-zsh是自带这个特性的,不知道为什么zsh默认没有
笔者的习惯是使用fn+left/right(在macOS下映射为Home和End)跳转命令头尾,可以这么设置,将Home和End按键绑定到功能上
bindkey '^[[H' beginning-of-line
bindkey '^[[F' end-of-linezsh各个配置文件区别
.zshenv 每次调用 zsh 都加载(包括跑脚本),放环境变量;
.zprofile 只在登录 shell 加载一次(macOS 开终端就触发),放一次性的配置;
.zshrc 每开一个交互式终端窗口/标签页都加载,放别名、提示符、插件这些交互用的东西。
总的来说,zsh是一款优秀的shell,虽然一些功能没有fish那么开箱即用,但是仔细阅读文档并配置之后也能达到非常趁手的程度
命令/工具现代化
这里是一些对shell内置命令或者coreutils工具的现代化替换
我发现越来越多基础库/工具开始用rust重构了,这是好事。
ls -> eza/lsd
在这个赛道上主要有三个项目:lsd、exa和eza,三者都是rust写的,其中exa已经停更了,剩余两个还在积极更新
效果类似于:

alias ls="eza -lah --classify=always --time-style=relative --no-permissions --no-user -rs=modified --icons --mounts"或
alias ls="lsd -la --date relative --classify"需要注意的是eza不能对列进行排序(如果你喜欢文件名在第一列),而lsd可以
cat -> bat

bat: A cat clone with syntax highlighting and Git integration.
export BAT_THEME_DARK=Dracula
alias cat='bat --paging=never'less -> most
默认分页器less是没有颜色的,切换为most
例如看man page时,可以有更好的体验
export PAGER="most"grep -> ripgrep
ripgrep是一个非常快的grep替代,支持正则表达式,在海量数据中表现出优异的性能。许多ai工具也把它作为默认选项(claude code、opencode…)
awk -> mawk
mawk - 快速 AWK 实现,其代码库基于字节码解释器。
同类还有nawk,gawk,jawk,bwk
mactop
https://github.com/metaspartan/mactop

p7zip(7z) -> sevenzip(7zz)
p7zip 是社区维护的第三方 POSIX 移植版 7z,已经停更多年;
7zz 是 7-Zip 作者从 2021 年起官方发布的原生 Linux/macOS 版本——从第三方移植变成了官方支持。
7zz比7z有着更好的性能和兼容性。
brew install sevenzipalias 7z="7zz"tldr
https://github.com/tldr-pages/tldr
一个精简版的man pages,建议搭配export TLDR_AUTO_UPDATE_DISABLED=1禁止更新(不然每次启动都要等更新,很慢)

杂项
- find -> fd / bfs
- fzf 命令行模糊查找器
- jq 轻量且灵活的命令行 JSON 处理器
- jd 用于差分和补丁 JSON和YAML值
- sed -> ruplacer 在源文件中查找并替换文本
- tmux -> zellij
- vim -> neovim -> helix
- cd -> zoxide
- nnn 是一款功能齐全的终端文件管理器
- coreutils -> uutils
- ncdu -> gdu
Homebrew小命令
虽然是mac必装软件,但是我建议不要用brew安装图形化的软件(例如微信qq等),否则它们的更新和卸载会让你很头疼
清理brew缓存
brew cleanup --prune=all
brew cleanup --scrub
rm -rf "$(brew --cache)"查询安装的包
brew list --installed-on-request
brew deps --installed --tree配置 XDG 基本目录
有很多软件在家目录下乱拉屎,配置XDG Base Directory后可以好一点(遵守此规范的软件会把数据放到指定的位置)
参考arch wiki: XDG Base Directory
# XDG Base Directory Specification
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
# XDG Base Directory Specification end放在.zprofile中
语言环境类
Python
-
uv: 一个极其快速的Python包和项目管理器,用Rust编写。
为什么你应该使用uv而不是…:
conda/miniconda:体积臃肿,依赖解析慢,环境之间容易互相污染,而且它自己搞一套包生态,跟 PyPI 不完全兼容
homebrew:本质是系统级包管理器,用它装 Python 会污染全局,多个项目没法隔离,也没有依赖锁定的概念
venv:只能创建虚拟环境,不管 Python 版本安装,不管依赖解析,不管锁文件——你得自己配合 pyenv + pip + pip-tools 凑一套工具链。
uv 好在哪:单二进制文件替代了 pyenv + venv + pip + pip-tools + poetry 的全部功能,Python 版本安装、虚拟环境创建、包安装、依赖解析和锁定全在一个地方搞定,而且速度快一个数量级。装好 uv 之后你不需要再装别的。 -
ruff: 一个极其快速的Python linter和formatter,用Rust编写。
替代pyright/pylint/flake8 -
ty: 一个极其快速的Python类型检查器和语言服务器,用Rust编写。
感谢Astral对Python生态的贡献
node/前端开发
- fnm: 快速简洁的Node.js版本管理器
- bun: 极其快速的JavaScript运行时、打包器、测试运行器和包管理器——全部集于一体
替代node/tsx/npm/pnpm/yarn/jest/vitest/esbuild/webpack/rollup - biome: 一个用于 Web 项目的高性能工具链,包含linter和formatter
替代prettier/eslint
工具/杂项
- lazygit: git 命令的简单终端 UI

- lazydocker: 适用于 docker 和 docker-compose 的简单终端 UI,用 Go 编写

- typst: 一套基于标记的排版系统,功能强大且易于学习,结合了markdown和latex的优点

- rumdl: 快速的markdown linter和formatter
可用于vscode
软件类
一些破解软件可以在appstorrent.ru和一些telegram群组上找到
终端模拟器
目前是iTerm2,听说kitty/warp/ghostty不错,想迁移到ghostty,但是动力不是很大,it2够用了

minimal主题不错
编辑器 - VSCode
使用官网下载的安装包安装的code是没有注册环境变量的,可以在命令面板中启用

然后就可以在终端里调用code .命令在当前目录打开vscode
我用的GitHub Theme中的GitHub Dark Default主题,文件图标是Material Icon Theme,产品图标默认
一些主要的配置:
禁用工作区信任功能(对我来说没啥用):
"security.workspace.trust.untrustedFiles": "open",
"security.workspace.trust.enabled": false,启用平滑滚动:
(不过对于触控板用户来说区别不大,鼠标的话可以装Mac Mouse Fix实现平滑滚动)
"editor.smoothScrolling": true,
"workbench.list.smoothScrolling": true,
"terminal.integrated.smoothScrolling": true,启用光标的动画和闪烁:
"editor.cursorSmoothCaretAnimation": "on",
"editor.cursorBlinking": "smooth",自动保存、自动格式化
"files.autoSave": "onWindowChange",
"editor.formatOnSave": true,
"editor.formatOnType": true,
"editor.autoIndentOnPaste": true,虚拟机、跨平台环境与转译
虚拟机 - Parallels Desktop
Parallels Desktop

使用了自己打包的win11 26H1镜像,使用uupdump,移除了一些自带软件,并使用Dism++和Winhance等工具调整
Linux环境、Docker、K8s - OrbStack
OrbStack
OrbStack 使用具有共享内核的轻量级 Linux 虚拟机来最大限度地减少开销并节省资源,类似于 WSL 2
一开始不懂事装了arch,现在想来恐怕还是debian适合我这种懒人
由于有做pwn题的需求所以装了x64的(会使用Rosetta转译)
配置了blackarch源,理论上arch的arm生态也不错,但没试过
转译打游戏 - CrossOver
少数游戏原生支持macOS,例如2077。
其他的用CrossOver转译,这是一个基于wine的封装,游戏兼容性参考Apple Gaming Wiki、PC Gaming Wiki、ProtonDB,基本上Steam Deck能玩的 Mac就能玩
贴几张黑悟空的跑分


手柄也是可以正常使用的(注意转译游戏尽量别开Steam Input否则延迟会很高)
Raycast - 启动器
Raycast
启动应用(支持拼音缩写)

剪切板历史(这个是真好用)

计算器


可以为文件、目录配置快速链接

我配置了快捷键为Command+Space,取代Spotlight,很好用
虽然macos Tahoe增强了Spotlight的功能,但笔者更加偏爱Raycast(因为其高度可自定义能力,还有插件系统)。最近Raycast V2要发布了,但是听说基于webview,观望中。
NTFS磁盘读写 - Paragon NTFS
同类产品还有Tuxera、ntfstool,也可以装macfuse驱动然后用ntfs3,但感觉这个最稳定
另外可以在wine配置里把硬盘上的一个文件夹映射为驱动器,然后设置为Steam游戏库

实现Mac游戏库扩容✅
不过如果没有兼容性需求的话,还是把移动硬盘格式化成APFS方便,u盘就用exFat,毕竟多装一个内核扩展总觉得不太清爽
Mac Mouse Fix - 鼠标增强
Mac Mouse Fix
可以解决mac触摸板和鼠标滚动方向相反的问题,同时平滑功能可以让滚动更丝滑,还能使用鼠标上的额外按键


batt - 限制充电上限(WIP)
batt
限制充电上限的,很轻量很好用,可以保护电池寿命

aldente收费,battery目前没适配macOS 26,现在用batt是最好的选择
Note
macOS 26.4已经内置充电上限支持,此软件已完成它的历史使命
Input Source Pro - 自动切换输入法
Input Source Pro
为不同软件配置默认输入法(比如当打开终端时自动切换英文输入法,离开后还原)
截图 - macshot
macshot是一个功能丰富的原生macOS截图和录制工具:注释、自动脱敏、录制GIF、OCR+翻译、长截图、美化等等。没有Electron,没有订阅制
注意这是一个年轻的项目,基本功能已经实现,但还有待打磨。笔者有幸为此项目提过两个pr。
另一个推荐是Pixpin,商业产品(免费),会更加成熟一点。最近重新设计了ui,很不错。
DockDoor - Dock栏窗口预览
DockDoor
Dock栏窗口预览(类似Windows的逻辑)、Cmd+Tab切换和预览窗口
Hidden Bar - 折叠菜单栏图标
Hidden Bar,虽然很久没更新了但是能用


点一下箭头就折叠/展开
之前测试ice会内存泄漏,于是用hidden bar。还有个bartender过于古老了而且付费。
注:笔者已不再使用此软件,笔者认为在设置中隐藏一些不常用的应用图标是更优的方案
Syntax Highlight - 代码快速预览
Syntax Highlight
macOS的Quick Look扩展,用于快速预览带语法高亮的源代码文件
支持200+种编程语言,可以显示行号、版本控制高亮(git修改标记)等
可以用brew安装:brew install --no-quarantine syntax-highlight

AndDrive - 连接安卓设备
AndDrive:无缝连接你的 Mac 和 Android
本地LLM - exo/omlx
exo可以将若干mac设备通过tcpip或rdma连接在一起跑大模型
exo 将您的所有设备连接到一个 AI 集群中。 exo 不仅能够运行比单个设备更大的模型,而且通过 Thunderbolt 支持 RDMA,使模型在添加更多设备时运行得更快。

omlx:针对mac优化的LLM推理引擎,oMLX 在热内存层和冷 SSD 层上持久保留 KV 缓存 - 即使上下文在对话过程中发生变化,所有过去的上下文也会保持缓存并可跨请求重用,从而使本地 LLM 适合使用 Claude Code 等工具进行实际编码工作。
这两个可以替代lmstudio和ollama/llama.cpp了

