Mac 设置某类文件默认用某个软件打开:让 JSON 文件默认交给 Cursor 编辑
1. 为什么 Mac 上 JSON 文件总被“抢走”默认打开方式如果你在 Mac 上同时装了 Cursor、VS Code、Xcode、Sublime 甚至系统自带的文本编辑大概率遇到过这种场景双击一个package.json结果它被 Xcode 或文本编辑抢走了你还得右键“打开方式”再选一次。更烦的是每次从 Finder 里点开配置文件都要重复这个动作一天下来光切软件就浪费不少时间。这个问题的本质是 macOS 的 LaunchServices 数据库在“记仇”。它记录了每个文件扩展名UTI和默认应用之间的绑定关系。你第一次双击某个.json时系统会按自己的优先级挑一个应用之后就一直沿用这个绑定除非你手动改。而 Cursor 作为后来安装的编辑器默认不会自动抢走.json的关联所以经常被系统自带或更早安装的软件占着。我试过最直接的办法就是右键“显示简介”把“打开方式”改成 Cursor再点“全部更改”。但很多人卡在两步一是下拉菜单里根本找不到 Cursor二是点了“全部更改”之后没生效双击还是老样子。这通常是因为 LaunchServices 缓存没刷新或者 Cursor 没有被系统正确注册为可处理.json的应用。所以这篇内容我会把完整路径拆开从右键“显示简介”开始到defaults命令和lsregister刷新再到验证是否真的生效。最后还会补一段用 TaoToken 统一管理 Cursor 的 API Key 与 Base URL 配置避免你在多个工具之间来回改配置。整套操作不需要装额外软件全部用系统自带命令完成。适合谁看经常在 Mac 上编辑 JSON 配置、用 Cursor 写代码、又不想每次手动选打开方式的开发者。下面按步骤来你可以直接跟着敲。2. 用“显示简介”把 JSON 默认交给 Cursor 的完整路径先做最基础的一步找一个.json文件比如你项目里的data.json或settings.json。选中它按cmd i或者右键选择“显示简介”。在弹出的简介窗口里找到“打开方式”这一栏。正常情况下这里会显示当前默认打开它的应用比如“文本编辑”或“Xcode”。点击“打开方式”的下拉菜单看列表里有没有 Cursor。如果有直接选中 Cursor然后点击下方的“全部更改…”按钮系统会弹一个确认框点“继续”。这一步会把所有.json文件的默认打开方式都改成 Cursor。但很多人遇到的问题是下拉菜单里根本没有 Cursor。这时候不要慌点击下拉菜单最下面的“其他…”会弹出一个应用选择窗口。在这个窗口里左侧选择“应用程序”然后在列表里找到 Cursor。如果列表太长可以用右上角的搜索框输入 Cursor。选中 Cursor 之后注意窗口底部有一个“始终以此方式打开”的复选框把它勾上。如果这个复选框是灰色的先取消勾选上方的“推荐的应用程序”再勾选“始终以此方式打开”。选好之后点“打开”回到简介窗口这时“打开方式”应该已经变成 Cursor 了。再点“全部更改…”确认“继续”。到这里图形界面的操作就完成了。不过有时候即使做了这一步双击.json还是会被其他应用打开。原因通常是 LaunchServices 数据库没有及时更新或者系统里存在多个 Cursor 副本比如一个在/Applications一个在~/Applications。这时候需要手动刷新 LaunchServices 缓存。你可以打开终端执行下面这条命令/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user这条命令会重建 LaunchServices 数据库把当前用户、系统、本地三个域的应用注册信息全部刷新一遍。执行完之后最好再重启一下 Finderkillall Finder重启 Finder 不会影响你正在运行的程序只是让 Finder 重新读取文件关联。做完这两步再双击.json文件应该就会用 Cursor 打开了。如果你不想每次都手动点“全部更改”也可以用defaults命令直接写默认应用。不过defaults写的是某个应用对某个 UTI 的绑定需要知道 Cursor 的 Bundle Identifier。Cursor 的 Bundle ID 通常是com.todesktop.230313mzl4w4u92你可以用下面这条命令确认osascript -e id of app Cursor拿到 Bundle ID 之后可以用defaults写入defaults write com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers -array-add {LSHandlerContentTypepublic.json;LSHandlerRoleAllcom.todesktop.230313mzl4w4u92;}注意这条命令是往数组里追加一条记录不是覆盖。如果你之前已经加过可能会重复。更稳妥的做法是先用defaults read看一下当前的 LSHandlers再决定要不要追加。不过对于大多数只想改.json默认应用的人来说图形界面加lsregister刷新已经足够。这里有一个小坑如果你同时装了 Cursor 和 VS Code并且 VS Code 也注册了.json那么lsregister刷新后系统可能会按注册顺序重新选一个。这时候你需要再执行一次“显示简介”里的“全部更改”或者用defaults明确指定 Cursor 的优先级。实测下来先做图形界面“全部更改”再跑lsregister刷新最后重启 Finder成功率最高。3. 可复制的 defaults 与 lsregister 配置片段上面提到了defaults和lsregister这一章我把可直接复制的配置片段整理出来包括 JSON 格式的 LSHandlers 写法以及如何确认 Cursor 的 Bundle ID。你不需要全部执行按需取用即可。首先确认 Cursor 的 Bundle ID。打开终端输入osascript -e id of app Cursor如果 Cursor 安装在/Applications下通常会返回com.todesktop.230313mzl4w4u92。如果返回其他值以实际输出为准。拿到 Bundle ID 后可以用defaults read查看当前的 LaunchServices 配置defaults read com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers这个命令会输出一个数组里面每一条都是一个字典包含LSHandlerContentType和LSHandlerRoleAll。如果你想用 JSON 格式更直观地看可以加上-json参数macOS 10.15 支持defaults read com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers -json输出大概长这样[ { LSHandlerContentType : public.json, LSHandlerRoleAll : com.todesktop.230313mzl4w4u92 }, { LSHandlerContentType : public.plain-text, LSHandlerRoleAll : com.apple.TextEdit } ]如果你看到public.json对应的不是 Cursor就可以用defaults write来修正。但直接覆盖整个数组比较危险建议用-array-add追加一条让系统优先匹配最后一条。命令如下defaults write com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers -array-add {LSHandlerContentTypepublic.json;LSHandlerRoleAllcom.todesktop.230313mzl4w4u92;}执行完之后必须刷新 LaunchServices 并重启 Finder/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user killall Finder如果你想把.json和.jsonc都交给 Cursor可以再加一条defaults write com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers -array-add {LSHandlerContentTypepublic.json;LSHandlerRoleAllcom.todesktop.230313mzl4w4u92;} defaults write com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers -array-add {LSHandlerContentTypepublic.jsonc;LSHandlerRoleAllcom.todesktop.230313mzl4w4u92;}注意public.jsonc这个 UTI 并不是所有系统都认有些 macOS 版本会把.jsonc当作public.json处理。如果加了没效果可以忽略。另外如果你在 Cursor 里配置了 TaoToken 作为 API 提供方建议把 Base URL 和 API Key 写进 Cursor 的 settings.json而不是每次手动填。Cursor 的 settings.json 路径通常是~/Library/Application Support/Cursor/User/settings.json你可以在这个文件里加入类似下面的配置具体字段以 Cursor 版本为准{ cursor.ai.baseUrl: https://taotoken.net/api, cursor.ai.apiKey: 你的 TaoToken API Key }这样做的目的是当你把.json默认打开方式改成 Cursor 之后双击任何 JSON 配置文件都会直接在 Cursor 里打开而 Cursor 又已经通过 TaoToken 统一了 API Key 和 Base URL不需要在多个工具之间反复切换配置。TaoToken 的 API 地址是https://taotoken.net/api你可以在它的控制台里生成 Key然后填到上面的配置里。如果你用的是 Cursor 的图形界面设置也可以在 Settings 里搜索 “OpenAI API Key” 或 “Base URL”把 TaoToken 的地址和 Key 填进去。这样无论你是从 Finder 双击 JSON还是在 Cursor 里直接编辑用的都是同一套配置。4. 验证默认应用是否生效的检查动作改完默认应用之后怎么确认真的生效了最直接的方法就是双击一个.json文件看它是不是用 Cursor 打开的。但有时候 Cursor 已经启动了你分不清是它自己打开的还是系统调用的。更可靠的检查方式是看文件的“显示简介”里“打开方式”是否显示 Cursor以及用mdls命令查看文件的kMDItemContentType和默认应用。先做最简单的找一个.json文件右键“显示简介”看“打开方式”那一栏。如果显示的是 Cursor说明 LaunchServices 已经认了。然后双击这个文件如果 Cursor 被激活并打开了这个文件就说明生效了。如果双击后还是被其他应用打开可以用mdls查一下系统认为这个文件是什么类型mdls -name kMDItemContentType -name kMDItemContentTypeTree data.json输出会显示kMDItemContentType和kMDItemContentTypeTree。对于.json文件通常kMDItemContentType是public.json。然后你可以用lsregister的查询功能看当前哪个应用注册了public.json/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump | grep -A 5 public.json这个命令会输出一大堆信息你可以用grep过滤。如果看到 Cursor 的 Bundle ID 出现在public.json的绑定里说明注册成功。如果看到的是其他应用说明默认应用还没改过来。另一个检查动作是使用open命令带-a参数指定应用打开看是否正常open -a Cursor data.json如果这条命令能正常用 Cursor 打开文件说明 Cursor 本身没问题问题出在默认关联上。这时候再回去执行“全部更改”和lsregister刷新。还有一个容易被忽略的点如果你在 Finder 里双击.json时系统弹出一个“选择应用程序”的对话框而不是直接打开说明 LaunchServices 没有找到明确的默认应用。这通常是因为LSHandlers里有多条冲突记录或者 Cursor 的 Bundle ID 写错了。你可以用defaults read检查一下把错误的记录删掉。删除单条记录比较麻烦最简单的办法是重置整个 LSHandlersdefaults delete com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers然后重新用“显示简介”里的“全部更改”设置一遍。注意这会清掉你之前所有的文件关联设置所以只建议在确实混乱的时候用。验证的时候建议多试几个不同目录下的.json文件比如项目根目录的package.json、tsconfig.json以及~/Library/Application Support/Cursor/User/settings.json。如果这些都能用 Cursor 打开说明默认关联已经全局生效。5. 本篇常见错误排查401、local proxy failed、reading choices、OAuth这一章整理几个在配置 Cursor 默认打开 JSON 以及接入 TaoToken 时容易遇到的报错。虽然默认打开方式本身不涉及网络请求但一旦你在 Cursor 里配置了 API Key 和 Base URL就可能遇到下面这些错误。错误一401 Unauthorized这是最常见的 API Key 错误。你在 Cursor 里填了 TaoToken 的 Base URLhttps://taotoken.net/api但 Key 填错了或者 Key 已经失效。检查步骤打开 TaoToken 控制台确认 API Key 是否还在有效期内复制的时候有没有多空格。然后在 Cursor 的 settings.json 里检查cursor.ai.apiKey字段确保没有换行符。如果用的是环境变量确认变量名和 Cursor 读取的一致。错误二local proxy failed这个报错通常出现在 Cursor 尝试通过本地代理访问 API 时。如果你没有开代理但 Cursor 配置里写了http://127.0.0.1:7890之类的地址就会报这个错。检查 Cursor 的 settings.json看有没有http.proxy或cursor.ai.proxy字段。如果有把它删掉或者改成空字符串。TaoToken 的 API 地址是直连的不需要额外代理。错误三reading choices这个报错一般出现在模型返回格式不符合预期时。比如你用的模型 ID 写错了或者 Base URL 后面多加了/v1。TaoToken 的 API 地址是https://taotoken.net/api在 Cursor 里填 Base URL 时通常不需要再加/v1因为 Cursor 会自己拼接。如果你填了https://taotoken.net/api/v1可能会导致路径重复返回非 JSON 格式Cursor 解析时就报reading choices错误。检查方法在终端用curl直接请求一下curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的Key \ -H Content-Type: application/json \ -d {model:gpt-4o-mini,messages:[{role:user,content:hi}]}如果返回正常的 JSON说明 Key 和地址没问题。如果返回 404 或 401再调整。错误四OAuth 相关报错Cursor 某些版本会尝试用 OAuth 登录如果你在 settings.json 里同时配置了 API Key 和 OAuth可能会冲突。表现是 Cursor 一直提示登录或者报OAuth token invalid。解决办法在 Cursor 设置里退出登录然后只保留 API Key 配置。如果你用的是 TaoToken 的 Coding Plan可以在控制台生成一个长期 Key填到 Cursor 里不需要走 OAuth。错误五双击 JSON 还是被其他应用打开这个不算 API 错误但和本篇主题直接相关。排查顺序先看“显示简介”里“打开方式”是不是 Cursor如果是但双击没生效跑lsregister刷新如果刷新后还不行检查是否有多个 Cursor 副本用mdfind找一下mdfind kMDItemCFBundleIdentifier com.todesktop.230313mzl4w4u92如果找到多个路径删掉不用的那个再重新注册。另外如果你装了 Cursor 的 Nightly 版本Bundle ID 可能不同需要用osascript重新确认。错误六settings.json 修改后 Cursor 不生效有时候你改了~/Library/Application Support/Cursor/User/settings.json但 Cursor 没重新加载。可以按cmd shift p输入Reload Window回车让 Cursor 重新读取配置。如果还不行退出 Cursor 再打开。注意修改 settings.json 时不要破坏 JSON 格式否则 Cursor 会报解析错误。可以用python -m json.tool检查一下python3 -m json.tool ~/Library/Application\ Support/Cursor/User/settings.json如果没有报错说明格式正确。6. 用 TaoToken 统一管理 Cursor 的 API Key 与 Base URL把.json默认打开方式改成 Cursor 之后你双击任何 JSON 文件都会进 Cursor。这时候如果 Cursor 里配置了多个 API 提供方每次切换模型都要改 Base URL 和 Key很麻烦。TaoToken 的作用就是把这些配置统一起来你只需要在 TaoToken 控制台生成一个 Key然后在 Cursor 里填一次 Base URL 和 Key之后不管换什么模型都走同一个入口。具体操作打开 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册后进入控制台在 API Keys 页面生成一个 Key。然后打开 Cursor 的 settings.json加入{ cursor.ai.baseUrl: https://taotoken.net/api, cursor.ai.apiKey: 你的 TaoToken API Key, cursor.ai.model: gpt-4o-mini }模型 ID 可以根据你的需求改TaoToken 支持多种模型。如果你用的是 Cursor 的 Chat 功能它会在请求时带上这个 Base URL 和 Key。这样你就不需要在每个项目里单独配置也不用担心 Key 泄露在代码里。如果你更习惯用图形界面可以在 Cursor 的 Settings 里搜索 “API Key”找到 “OpenAI API Key” 这一项填入 TaoToken 的 Key然后在 “Base URL” 里填https://taotoken.net/api。保存后重启 Cursor。对于长期编码和 Agent 场景TaoToken 还提供了 Coding Plan你可以在控制台里查看套餐详情。如果你只是偶尔用一下按量付费的 API Key 就够。不管哪种方式Key 和 Base URL 都是统一的不会因为换了模型就要重新配置。最后提醒一点TaoToken 的 API 地址是https://taotoken.net/api不要在后面加/v1除非文档明确说明。Cursor 会自动拼接路径。如果你在验证时遇到 404先检查地址是否多写了后缀。配置完成后双击一个 JSON 文件Cursor 打开它你在 Cursor 里发一条测试消息如果能正常返回说明默认打开方式和 API 配置都生效了。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →