---
title: "使用 Defaultly 批量设置 Mac 默认打开方式，让 .env、Dockerfile 等无扩展名文件也能用编辑器打开"
description: "Defaultly 是一款免费开源的 macOS 默认 App 管理工具，可以按分组批量设置文件类型、扩展名和链接的默认打开方式，解决访达「全部更改」对 .env、.gitignore、Dockerfile 等无扩展名文件不起作用的问题，支持撤销恢复、被 Xcode 抢走关联时提醒，适用于 macOS 26 Tahoe 及以上。"
date: 2026-10-16T13:53:05.000Z
tags: ["Defaultly", "macOS", "Mac 默认打开方式", "Mac 默认应用", "Mac 文件关联", "macOS 无扩展名文件", ".env 默认打开方式", "Dockerfile 默认打开方式", "Mac 默认编辑器", "Mac 默认浏览器", "macOS Tahoe", "public.data"]
categories: ["技术"]
canonical: https://www.zhaojian.net/defaultly-set-default-apps-on-macos/
author: 赵健
---

在 Mac 上写代码，`.env`、`.gitignore`、`Dockerfile` 这类没有扩展名的文件一直是个麻烦：双击要么用「文本编辑」打开，要么干脆打不开。用访达的「显示简介 › 打开方式 › 全部更改…」改成 VS Code 或 Zed，点了也没用；「始终以此方式打开」又只对选中的那一个文件生效。

原因是 macOS 把大多数无扩展名文件都归为 `public.data`，并且不允许任何 App 成为这一类型的默认 App，用命令行工具去改也只会报错 `-50`。

另一个问题是文件关联经常被抢。新装一个 App（典型的是 Xcode），原来设好的文件关联就可能被它抢走，macOS 不会提示，也没有办法一键恢复，只能一个格式一个格式地改回去，而且 macOS 26.4 之后每改一种类型还要确认一次。

所以我写了 [Defaultly](https://github.com/zhaojiannet/defaultly)，一个免费开源的 macOS 默认 App 管理工具，在一个窗口里把文件类型、扩展名和链接的默认打开方式全部管起来。

![Defaultly 主窗口截图：文件类型标签页按文本、Markdown、代码、配置与数据、无扩展名文件、PDF、文稿等分组，每组右侧选择默认打开的 App](/uploads/2026/10/defaultly-screenshot.png)

## Defaultly 能做什么

- **按分组设置默认 App**：文件类型按用途分成文本、Markdown、代码、配置与数据、无扩展名文件、PDF、文稿、图片、视频、音频、压缩包，每组一个 App 菜单，一整组一次设好，不用逐个确认，几秒内生效。
- **无扩展名文件**：让 `.env`、`Dockerfile`、`.gitignore`、`.npmrc` 用你选的编辑器打开，即使这个编辑器没有声明支持它们。
- **单个格式例外**：展开分组，给 `.md`、`.py` 这样的单个格式单独指定 App，之后改分组的 App 也不会影响它们。
- **自定义扩展名**：添加列表里没有的扩展名，包括 `.go`、`.rs`、`.kt`、`.dart`、`.lua` 这些 macOS 只认作临时类型的。
- **链接的默认 App**：网页（`http`、`https`）、邮件（`mailto`）、日历订阅（`webcal`）、电话、短信、FaceTime、SSH、FTP、屏幕共享，都可以选默认 App，也可以选「不打开」，比如让网页上的电话号码点了不再发起通话。
- **诊断**：拖入一个文件，看它为什么用某个 App 打开，当场改用别的；拖入一个文件夹，找出单独设置过「打开方式」的文件并清除。
- **被抢占提醒**：Xcode、浏览器等抢走你设置的关联时，Defaultly 会显示横幅，一键恢复。
- **撤销与恢复**：每次更改前保存快照，可以 `⌘Z` 撤销，也可以恢复到第一次打开 Defaultly 之前的状态，恢复前会先预览每一项变化。
- **干净卸载**：内置的卸载功能会先把每一项关联恢复到原来的 App，再把自己移到废纸篓。
- **15 种语言**：界面支持简体中文、繁体中文、英语、日语等 15 种语言，可以在 App 内切换。

Defaultly 不在后台运行，没有登录项，不联网，也不收集数据。

## 安装 Defaultly

需要 macOS 26 Tahoe 或更高版本。

1. 打开 [Releases 页面](https://github.com/zhaojiannet/defaultly/releases)，在最新版本的 **Assets** 里下载 `Defaultly-<version>.dmg`。
2. 双击打开 DMG，把 **Defaultly** 拖到同一窗口里的「应用程序」文件夹上。
3. 推出 DMG，从「应用程序」文件夹打开 Defaultly。

没有安装程序，也不需要管理员密码。更新时下载新的 DMG 再拖一次，覆盖旧版本即可，设置、规则和快照都会保留。

### 首次打开：允许未公证的 App

Defaultly 还没有经过 Apple 公证，第一次打开时 macOS 会拦下它，允许一次就行：

1. 双击 Defaultly，macOS 提示无法验证时，点按「**完成**」。不要点蓝色的「移到废纸篓」。

   ![macOS 提示无法验证 Defaultly 的对话框，点按完成按钮](/uploads/2026/10/defaultly-first-launch-1.png)

2. 打开「**系统设置 › 隐私与安全**」，向下滚动到「安全性」，点按 Defaultly 旁边的「**仍要打开**」。第 1 步之后大约一小时内这个按钮都在。

   ![系统设置隐私与安全页面，安全性一栏中 Defaultly 被拦截，旁边是仍要打开按钮](/uploads/2026/10/defaultly-first-launch-2.png)

3. 输入登录密码或使用触控 ID，在随后的对话框里再点按一次「**仍要打开**」。

   ![确认对话框，点按仍要打开以运行 Defaultly](/uploads/2026/10/defaultly-first-launch-3.png)

之后 Defaultly 就能正常打开了，内置的辅助程序也会一并获得允许，打开无扩展名文件时不会再有提示。截图是英文界面，简体中文 macOS 里的按钮名称就是上面写的这些。

## 使用方法

### 让 .env、Dockerfile 用编辑器打开

在「**文件类型**」标签页找到「**无扩展名文件**」这一组，在右侧菜单里选择你的编辑器（比如 VS Code、Zed、Sublime Text），然后点窗口底部的「**应用**」。之后双击 `.env`、`Dockerfile` 这类文件，就会直接用这个编辑器打开。

### 批量设置代码文件的默认编辑器

同样的方法，给「**代码**」「**配置与数据**」「**Markdown**」这些分组选好 App，点「**应用**」。代码分组覆盖了 JavaScript、TypeScript（`.tsx`）、Python、Java、C、C++、C#、PHP、Ruby、Swift、Go、Rust、Kotlin、Dart、Lua、Shell、PowerShell、SQL 等常用语言，没有 macOS 正式类型的 `.go`、`.rs` 也包括在内。

想让某个格式例外，点分组所在的行展开，在那一行的菜单里另选一个 App，这一行会标上「**单独设置**」；要恢复跟随分组，选「**跟随分组**」。

### 搜索和添加扩展名

在右上角搜索框输入扩展名，比如 `py` 或 `env`，会直接跳到对应的行。扩展名不在任何分组里时，搜索结果里会出现「**添加…**」：输入扩展名后，Defaultly 会显示 macOS 把它识别成什么，并建议放进哪个分组，点「**添加**」就行。

### 设置默认浏览器和邮件 App

文件类型下方有一张「链接」卡片，可以设置网页浏览器、电子邮件、日历订阅、电话、SSH 等链接用哪个 App 打开。更改浏览器时 macOS 仍会弹出系统对话框让你确认，这是为了防止浏览器被悄悄劫持。

### 应用、撤销与恢复

所有更改都会先暂存，窗口底部会显示有多少项待应用的更改，点「**应用**」生效，点「**放弃**」丢弃。

- 「**编辑 › 撤销**」（`⌘Z`）撤销上一次应用，可以连续撤销。
- 工具栏里的圆形箭头按钮是「**恢复到初始**」，把 Defaultly 改过的每种文件类型和链接都指回第一次打开 Defaultly 时的 App，执行前会列出每一项变化。
- 「**设置 › 历史**」里保存了最近 20 份快照，任意一份都可以恢复。

### 诊断某个文件为什么用这个 App 打开

切换到「**诊断**」标签页，把文件拖进虚线框，会显示由哪个 App 打开它以及原因：是这个文件在访达里单独设置过「打开方式」，还是你为这类文件选了这个 App，或者什么都没设置、由 macOS 自己选的。结果下方可以直接「**改用**」别的 App。

把文件夹拖进去，Defaultly 会列出里面所有单独设置过「打开方式」的文件，选中后点「**移除它们的单独设置**」，这些文件就会改为跟随所属类型的设置。

## Defaultly 是怎么做到的

Defaultly 的 App 包里带了一个很小的辅助程序 **Defaultly Helper**。你为无扩展名文件选择编辑器时，Defaultly 把 `public.data` 指向这个辅助程序。打开这类文件时，辅助程序检查文件内容：文本文件交给你选的编辑器，二进制文件在访达中显示，然后退出。它没有窗口，不常驻后台，空闲不到一秒就会退出。

`.md`、`.py` 这类你选的 App 本来就支持的类型，会直接分配给这个 App，不经过辅助程序。

macOS 没有提供为 `public.data` 设置默认 App 的公开 API，所以 Defaultly 会把所有文件类型的更改一次写入 LaunchServices 偏好设置，再重启一次 `lsd` 服务让它生效。这个机制没有 Apple 官方文档，系统更新后可能失效；如果某项更改没生效，Defaultly 会改用公开 API（需要你逐个确认），无扩展名文件则可以改用「设置」里的文件夹规则。

## 常见问题

**Mac 上怎么更改无扩展名文件的默认打开方式？**
打开 Defaultly，为「无扩展名文件」选择一个 App，点「应用」。之后 `.env`、`Dockerfile` 这类文件就会用这个 App 打开。

**为什么访达的「全部更改」对 .env 文件不起作用？**
macOS 把这类文件当作通用数据（`public.data`），不允许通过公开 API 更改它的默认 App。Defaultly 借助辅助程序绕过了这个限制。

**为什么 .ts 文件不在代码分组里？**
macOS 把 `.ts` 识别为视频格式（MPEG-2 传输流），改它会影响真正的视频文件，所以代码分组只包含 TypeScript 的 `.tsx`。

**能撤销所有更改吗？**
可以。Defaultly 第一次运行时会记录原始关联，并且永远不会覆盖这份记录，「恢复到初始」会把每个改过的类型指回原来的 App。

**怎么卸载？**
在「设置 › Defaultly 写了什么」底部点「卸载 Defaultly…」，它会先把改过的关联全部恢复，再把自己移到废纸篓。

更详细的说明，包括开发者模式、规则、文件夹规则，可以看项目的[中文说明](https://github.com/zhaojiannet/defaultly/blob/main/docs/i18n/README.zh-Hans.md)。

GitHub 项目地址：
[https://github.com/zhaojiannet/defaultly](https://github.com/zhaojiannet/defaultly)