1. Cursor settings.json 快捷键与 KaTeX 渲染配置踩坑实录
如果你正在用 Cursor 写技术笔记,尤其是那种带公式推导、带代码块、还要频繁切换侧栏和终端的场景,大概率会遇到两个很烦的问题:一是 Markdown 预览里的 LaTeX 公式显示成一片红字或者干脆不渲染,二是默认快捷键跟自己的肌肉记忆打架,改完又不知道写在哪、改完为什么不生效。这两个问题看起来不相关,其实都指向同一个文件——settings.json。
Cursor 是基于 VS Code 分支出来的编辑器,所以它的配置体系跟 VS Code 高度一致,但又有自己的目录结构和一些 AI 相关的扩展项。很多人第一次找settings.json会去安装目录里翻,结果改了半天没反应,因为真正生效的是用户目录下的那份。Windows 一般在%APPDATA%\Cursor\User\settings.json,macOS 和 Linux 在~/.config/Cursor/User/settings.json。你可以在 Cursor 里按Ctrl+Shift+P(macOS 是Cmd+Shift+P)打开命令面板,输入Preferences: Open User Settings (JSON),直接定位到正确文件,这一步能省掉大量“我改了怎么没用”的困惑。
这篇内容适合三类人:第一类是把 Cursor 当主力 Markdown 写作工具、需要 KaTeX 公式正常渲染的;第二类是想把快捷键改成自己顺手方案、又不想每次重装都重配的;第三类是希望用一套统一的 Key 和 API 通道,把 Cursor 里的模型请求接到同一个入口,避免多个工具各自维护密钥。我会把可复制的settings.json片段、快捷键绑定示例、KaTeX 验证步骤,以及 API 连通性检查动作都写清楚,你照着改完重载窗口就能看到效果。
需要先说明一个边界:Cursor 的 Markdown 预览本身对 KaTeX 的支持依赖内置的 markdown 扩展和数学渲染开关,不同版本默认值可能不同。所以下面给的配置是“显式打开 + 显式指定分隔符”的思路,而不是依赖默认行为。这样即使版本升级,你的公式渲染也不会莫名其妙挂掉。另外快捷键部分我会用keybindings.json来演示,因为settings.json负责的是编辑器行为,而按键映射归keybindings.json管,这两个文件经常被混为一谈,后面会专门讲清楚。
2. TaoToken 统一 Key 接入 Cursor 的前置准备
在动settings.json之前,先把模型接入这条链路理顺,否则你公式渲染配好了,写笔记时想调用模型补全却报 401,体验会很割裂。Cursor 支持自定义 OpenAI 兼容的 Base URL 和 API Key,这意味着你可以把请求指向一个统一的网关地址,而不是每个工具单独去配。TaoToken 在这里扮演的就是这个统一入口的角色:一个 Key、一个 Base URL,Cursor、Cline、Codex 这类工具都能复用同一套凭证。
你需要准备三样东西,我把它叫做“三件套”,后面任何接入场景都绕不开:
| 项目 | 值 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | OpenAI 兼容接口前缀,注意不要多加/v1之外的路径 |
| API Key | 在控制台生成 | 形如sk-开头的一串字符,只显示一次,务必保存 |
| Model ID | 按需选择 | 例如对话类、代码类模型 ID,填错会报 model not found |
获取 Key 的路径是打开控制台,进入 API Keys 页面新建一个。这里有个细节:新建后立刻复制,页面刷新后就看不到完整 Key 了,只能重新生成。我见过太多人建完 Key 去泡了杯咖啡回来发现复制不了,只能删了重建。生成之后建议先放到一个临时文本里,等配置全部验证通过再决定要不要存进密码管理器。
关于 Base URL,有一个高频错误:很多人习惯性写成https://taotoken.net/api/v1,然后在 Cursor 里又让它自动补/v1,结果路径变成/api/v1/v1/chat/completions,直接 404。正确的做法是 Base URL 只写到/api,由客户端自己拼接后面的路径。如果你用的是 OpenAI SDK,那base_url参数就填https://taotoken.net/api,SDK 会自动补/chat/completions。
模型 ID 这块要按你实际使用的模型来填,不要凭感觉写。填错的表现通常是请求返回model_not_found或者invalid model。如果你不确定当前有哪些可用模型,可以先用一个最小的 curl 请求去探测,这个动作放在第四节验证环节一起做。前置准备做到这里就够了:Key 有了、Base URL 记牢、Model ID 待确认。接下来进入真正的配置文件环节。
3. 可复制 settings.json 与 keybindings.json 配置片段
这一节是全文的核心,我给的都是可以直接粘贴的片段。先处理settings.json,它负责 Markdown 渲染、KaTeX 开关、编辑器布局这些行为。路径就是前面说的~/.config/Cursor/User/settings.json(Windows 换成对应 APPDATA 路径)。如果你文件里已经有内容,不要整个覆盖,把下面的键合并进去。
{ "markdown.preview.breaks": true, "markdown.preview.mathEnabled": true, "markdown.math.enabled": true, "markdown.preview.fontSize": 15, "markdown.preview.lineHeight": 1.7, "editor.minimap.enabled": false, "workbench.sideBar.location": "left", "workbench.panel.defaultLocation": "bottom", "editor.renderWhitespace": "boundary", "files.autoSave": "afterDelay", "files.autoSaveDelay": 1000, "editor.fontLigatures": true, "editor.wordWrap": "on", "cursor.chat.defaultModel": "你的模型ID", "cursor.api.baseUrl": "https://taotoken.net/api", "cursor.api.key": "sk-你的Key" }这里要重点解释几个键。markdown.preview.mathEnabled和markdown.math.enabled是控制 KaTeX 渲染的关键开关,不同 Cursor 版本可能只认其中一个,所以两个都写上最保险。markdown.preview.breaks打开后,单个换行也会渲染成换行,写笔记时更符合直觉。cursor.api.baseUrl和cursor.api.key是 Cursor 自定义模型接入的配置项,注意这两个键名可能随版本变化,如果你的版本不认,就在 Cursor 设置界面里找 “Models” 或 “OpenAI API Key” 这类入口,把同样的值填进去,效果一样。
然后是keybindings.json,它跟settings.json同目录,负责按键映射。这个文件是一个数组,每条规则包含key、command和可选的when条件。下面给一组我常用的绑定,把 Markdown 预览、公式插入、侧栏切换都安排上:
[ { "key": "ctrl+shift+m", "command": "markdown.showPreviewToSide", "when": "editorLangId == markdown" }, { "key": "ctrl+shift+k", "command": "editor.action.insertSnippet", "when": "editorTextFocus", "args": { "snippet": "$$1$$" } }, { "key": "ctrl+alt+b", "command": "workbench.action.toggleSidebarVisibility" }, { "key": "ctrl+alt+j", "command": "workbench.action.togglePanel" }, { "key": "ctrl+shift+alt+f", "command": "editor.action.formatDocument", "when": "editorTextFocus" } ]ctrl+shift+m打开侧边预览,写公式时左边写右边看,非常顺手。ctrl+shift+k插入行内公式的$$包裹片段,光标会自动落在中间,省得手打。ctrl+alt+b和ctrl+alt+j分别切侧栏和底部面板,写长文时能快速腾出屏幕空间。注意when条件很重要,不加条件的话这些快捷键会在所有文件类型里生效,可能跟别的功能冲突。
改完这两个文件后,按Ctrl+Shift+P执行Developer: Reload Window,让配置重新加载。这一步不能省,很多人改完直接看没变化就以为配置错了,其实只是没重载。重载后如果快捷键没生效,先检查keybindings.json是不是合法 JSON,多一个逗号都会导致整个文件被忽略。
4. KaTeX 公式渲染验证与 API 连通性检查
配置写完了,得验证。先验证 KaTeX,再验证 API,顺序不要反,因为公式渲染是纯本地行为,跟网络无关,先排除本地问题能减少变量。
新建一个test.md,粘贴下面这段内容:
行内公式:质能方程 $E = mc^2$ 是最著名的公式之一。 块级公式: $$ \Gamma(z) = \int_0^\infty t^{z-1} e^{-t} \, dt $$ 矩阵示例: $$ \begin{pmatrix} a & b \\ c & d \end{pmatrix} $$按Ctrl+Shift+M打开侧边预览。如果配置正确,你会看到公式被渲染成排版后的数学符号,而不是原始的\Gamma文本。如果显示成红色或者原样文本,按这个顺序排查:第一,确认settings.json里两个 math 开关都是true;第二,确认文件语言模式是 Markdown,看右下角状态栏;第三,确认公式分隔符用的是$...$和$$...$$,KaTeX 默认不认\(...\)这种写法,除非你额外配置。
公式验证通过后,检查 API 连通性。最直接的方式是用 curl 发一个最小请求,不依赖 Cursor 界面:
curl -s -X POST https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "你的模型ID", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'如果返回里包含choices字段和一段回复内容,说明 Key、Base URL、Model ID 三件套都对。如果返回 401,是 Key 问题;返回 404,多半是 Base URL 多写了/v1;返回model_not_found,是 Model ID 写错。这个 curl 动作建议在配置 Cursor 之前先跑通,这样出问题时你能确定是网络层还是编辑器层。
curl 通了之后,回到 Cursor,在聊天面板里发一句简单的话,看是否正常返回。如果 curl 通但 Cursor 不通,检查settings.json里的cursor.api.baseUrl是不是漏了https://,或者 Key 前后有没有多余空格。实测下来,大部分“curl 能通、编辑器不通”的情况都是配置项名称跟当前版本不匹配,这时候去设置界面手动填一遍反而更快。
5. 常见报错排查:401、local proxy failed 与 reading choices
这一节把几个高频报错拆开讲,每个都给出触发原因和动作。你遇到问题时可以直接对号入座。
401 Unauthorized。这个最直接,就是 Key 不对。可能的情况:Key 复制时漏了尾部字符、Key 已经被删除或轮换、请求头里Bearer后面多了空格。排查动作是重新生成一个 Key,用 curl 单独测一次。如果 curl 也 401,那跟 Cursor 无关,是 Key 本身的问题。注意不要把 Key 写进会提交到 Git 的文件里,settings.json如果被同步到云端仓库,等于把 Key 公开了。
local proxy failed / connection refused。这个报错通常出现在你本地开了某种网络工具,或者 Cursor 配置了代理但代理没启动。表现是请求发不出去,报连接被拒绝。排查动作:先确认 Base URL 是https://taotoken.net/api而不是http://localhost:xxxx之类的本地地址;再检查系统代理设置,如果之前配过代理环境变量,临时清掉再试。这个错误跟 Key 无关,纯粹是网络路径问题。
reading 'choices' / cannot read property 'choices' of undefined。这个报错说明请求发出去了,但返回结构里没有choices字段,客户端解析时拿到 undefined 就崩了。常见原因有三个:一是返回的其实是错误对象,比如{"error": {...}},但客户端没处理错误分支;二是 Model ID 填错,服务端返回了非预期结构;三是 Base URL 路径拼错,命中了别的端点。排查动作是先用 curl 看原始返回,确认返回体长什么样。如果 curl 返回正常但 Cursor 报这个错,那大概率是 Cursor 版本对返回结构的解析有兼容问题,尝试升级 Cursor 或换用设置界面里的模型配置入口。
OAuth 相关报错。如果你用的是需要 OAuth 登录的模型通道,可能会遇到 token 过期或回调失败。这类报错的关键词通常是invalid_grant、redirect_uri_mismatch。排查动作是重新走一遍授权流程,确认回调地址跟控制台登记的一致。如果你用的是 API Key 模式,一般不会碰到 OAuth,所以遇到这类报错先确认自己是不是误开了某个需要登录的通道。
把这几类报错记住,下次看到错误信息就能直接定位,不用从头猜。排查的核心思路永远是:先用 curl 把网络层和凭证层验证清楚,再去看编辑器层的配置,这样能把问题范围缩小一半。
6. 统一 Key 接入后的模型对话与 Coding Plan 入口
配置跑通之后,你手里就有了一套可复用的接入方案:一个 Base URL、一个 Key、若干 Model ID。这套东西不只服务 Cursor,同样的三件套可以搬到其他支持 OpenAI 兼容接口的工具里。比如你在 Cursor 里写笔记时想快速验证一个模型回复,可以直接打开模型对话页面测一句;如果你要长期做代码补全和 Agent 类任务,Coding Plan 这类按周期计费的方案会比按量调用更划算,适合每天高频使用的场景。
具体入口我列一下,方便你按需取用。想快速验证模型是否正常,用模型对话页面发一句话即可;需要管理或新建 Key,去控制台;想看完整的接入参数和示例,翻接入文档;如果你用 Claude Code 这类工具,也有对应的接入说明可以参考。这些页面里都有现成的配置示例,跟本文的settings.json片段可以互相印证。
最后说一个实际经验:把 Key 和 Base URL 集中管理之后,最大的好处不是省了多少钱,而是排障时变量少了。以前三个工具各配各的,出问题要挨个查;现在只要 curl 能通,就知道是编辑器层的事,反之就是凭证或网络层的事。这个分界线一旦建立起来,配置类问题的处理速度会快很多。你可以先把本文的settings.json片段落地,跑通 KaTeX 渲染和一次 curl 请求,剩下的就是按自己的写作习惯微调快捷键了。