1. 先搞清楚:Mac 右键为什么没有"新建文件"这回事
从 Windows 迁过来的第一天,大部分人都会卡在同一个动作上:在桌面或文件夹空白处右键,想找"新建 → 文本文档",结果菜单里只有"新建文件夹"孤零零一项。我见过不少人这时候的第一反应是"是不是我的系统坏了",或者"是不是没装 Office 的原因"。都不是。这是 macOS 从一开始就没打算做这件事的结果,跟你的机器、你的软件、你的账号都没关系。
理解这一点很重要,因为它直接决定了你后面该走哪条路。Windows 的右键"新建"菜单,底层是注册表里一个叫 ShellNew 的机制,各类软件在安装时往这个键下面写一条记录,指向一个模板文件或者空文件类型,资源管理器右键时读出来展示。而 macOS 走的完全是另一套逻辑:文档由应用创建,访达(Finder)只负责管理已经存在的文件。你在 Pages 里新建一个文档,Pages 决定它长什么样、叫什么、存在哪;访达不参与"创造文档"这件事。所以你在访达里右键,它天然不会给你"新建一个 Word 文档"这种选项——因为访达根本不知道 Word 文档应该是什么结构。
这套设计有它的道理,但对于大量日常场景——随手记一个待办、临时建一个 txt 贴点内容、在项目目录里新建一个 md 写笔记——效率损失是实实在在的。每次都要先开编辑器、再另存为、再选路径,三步变一步的差距,一天下来就是几十次摩擦。
好在 macOS 留了一个正式的口子,叫"快速操作"(Quick Actions),旧版本里叫"服务"(Services)。它允许你把一段脚本注册到访达右键菜单里,并且——这是关键——当你在空白处右键、没有选中任何文件时,它依然能被触发,并且脚本能拿到"你当前所在的这个文件夹"这个信息。这个能力是解决整件事的技术地基,后面所有方案本质上都在围绕它做文章。这一段先说明白"为什么没有",下一段开始说"怎么补上"。
2. 三条可行路线,先选对方向再动手
我不喜欢一上来就给步骤,因为选错路线会让你做到一半返工。同样是"右键新建文件",实际落地有三条差异很大的路,各自的成本、可控性、稳定性完全不同。你花三分钟看完这张对照表,能省掉后面半小时的试错。
| 路线 | 实现方式 | 上手成本 | 可控性 | 稳定性 | 适合谁 |
|---|---|---|---|---|---|
| 系统自动化工具 | 自带"自动操作"做快速操作 | 中等,需要粘贴一段脚本 | 极高,逻辑自己写 | 高,除非大版本改动 | 愿意花 20 分钟换长期省事的人 |
| 系统快捷指令 | 自带"快捷指令"App 做快速操作 | 偏低,图形化拖拽 | 中高,复杂逻辑要嵌脚本 | 高,新系统主推路径 | 不想碰 Automator、系统较新的人 |
| 第三方右键增强 | 安装常驻菜单栏的工具 | 最低,装完就用 | 中,受限于工具提供的功能 | 取决于工具维护情况 | 完全不想折腾、能接受装软件的人 |
我个人的判断是:如果你一年里右键新建文件超过一百次,走第一条路。理由不是它"更高级",而是它零依赖、零费用、升级系统后即使失效你也能自己修,因为逻辑是你写的。第三方工具确实开箱即用,但它引入了三个你必须自己评估的变量:这个工具还在维护吗、它对当前系统版本做了适配吗、它需要你授予多大的权限。最后一个尤其值得警惕,右键增强类工具通常需要常驻后台并监听访达事件,一旦你给了过宽的权限,它就是常驻在你系统里的一个不受你控制的进程。
第二条路是苹果近年在推的方向,图形化程度高,和系统集成更紧,还能通过 iCloud 在几台机器之间同步同一套动作。但它在"取到当前文件夹路径"这件事上有个坑,我在第 4 章会详细讲怎么绕。
第三条路我不排斥,但我要提醒一句:别去搜"Mac 右键新建"然后闭眼装搜索结果第一个。选的时候至少核对四项:是否有正规签名(否则每次系统更新后可能被拦)、是否需要"完全磁盘访问权限"(这东西权限极大,能不给我就不给)、是否常驻后台并占用明显的内存、是否支持自定义模板。第 5 章我会给一份更细的选型清单。
3. 路线一实战:用自带工具做出"右键新建文本"
3.1 开工前的两个前置认知
动手之前有两件事必须说清楚,不然你按步骤做完会发现菜单里啥也没有,然后开始怀疑人生。
第一件:"快速操作"菜单项出现在右键菜单的二级位置。你右键之后看到的不是"新建文本文件",而是先看到"快速操作",鼠标悬停展开才能看到。这是系统行为,不是你没做对。如果你实在受不了多点一次,后面第 6 章我给一个用快捷键绕过的方案,比在二级菜单里找快得多。
第二件:保存位置决定了这个动作是否全局可用。做好的动作会存在你用户目录下的 Services 文件夹里,只对当前用户生效。如果你是多用户机器,需要给每个账号各做一次,或者把动作文件复制到系统的服务目录里。
还有一个容易被忽略的细节:这套方案依赖脚本执行权限。第一次触发时系统会弹窗提示"某某想要控制访达",必须点允许,否则脚本跑一半就断了,你会看到一个空文件夹但里面没文件,非常迷惑。
3.2 从零到能用:完整搭建步骤
打开"自动操作"(在启动台的其他文件夹里,或者直接 Spotlight 搜"自动操作")。启动后选择"新建文稿",在弹出的模板选择框里选**"快速操作"**,不要选"应用程序",也不要选"工作流程"。这一步选错,后面整个流程都跑不通。
新建之后,看窗口顶部那一排设置,有两个下拉框需要改,这是整套流程里最容易出错的地方:
- "工作流程收到当前"改成"没有输入"。这一项决定了你在空白处右键、没选中任何文件时,这个动作能不能出现。如果保持默认的"文件或文件夹",你就必须先选中一个文件才能触发,那完全违背了"新建文件"的初衷。
- "位于"改成"访达"。这一项决定动作注册到哪个应用的右键菜单里。
改完这两项,从左侧动作库里搜"运行 AppleScript",把它拖到右边的工作区。清空里面默认的代码,把下面这段贴进去:
on run {input, parameters} -- 基础名称与扩展名,按需修改这两行 set baseName to "未命名" set theExt to ".txt" -- 留空表示创建空文件;填绝对路径则复制该模板 set templateFile to "" tell application "Finder" set theFolder to insertion location as alias set folderPath to POSIX path of theFolder end tell set fileName to baseName & theExt set fullPath to folderPath & fileName set counter to 1 -- 重名自动加序号,避免覆盖已有文件 repeat while (do shell script "test -e " & quoted form of fullPath & " && echo y || echo n") is "y" set counter to counter + 1 set fileName to baseName & " " & counter & theExt set fullPath to folderPath & fileName end repeat if templateFile is "" then do shell script "touch " & quoted form of fullPath else do shell script "cp " & quoted form of templateFile & " " & quoted form of fullPath end if tell application "Finder" set newFile to file fileName of theFolder select newFile activate end tell -- 让新文件直接进入重命名状态,可删掉这两行 tell application "System Events" keystroke return end tell return input end run贴完之后按一下右上角的"运行"按钮试一次。注意,测试的时候访达必须是当前活动窗口,因为脚本里的insertion location取的是"访达当前打开的那个位置",如果访达在后台,它取到的可能是别的地方,甚至报错。这是新手最常踩的第一个坑。
测试成功后按Cmd + S保存,名字就叫"新建文本文件"。保存后回到访达,在任意文件夹空白处右键,找到"快速操作",应该就能看到它了。
3.3 脚本逐行拆解:为什么这么写
上面那段代码不长,但每一处都对应一个实际踩过的坑,值得拆开讲。
insertion location是整个方案的核心。它是访达的一个属性,含义是"用户当前操作位置的容器"——你在某个文件夹窗口里右键,它就是那个文件夹;你在桌面右键,它就是桌面;你在一个选中文件的旁边右键,它依然能返回父文件夹。正因为有它,这个动作才能在"什么都没选中"的情况下工作。
quoted form of这个写法看起来啰嗦,但它解决的是路径里带空格的问题。macOS 的文件夹名字里太常见空格和中文了,如果你直接拼接字符串交给 shell,遇到"我的 项目"这种目录名,命令会被拆成两个参数,touch就会在错误的位置建文件,或者直接报错。这个坑我在早期版本里踩过,表现为"在某些目录下能用,在某些目录下不能用",非常难查。
重名处理的那个repeat while循环,是为了避免你连续新建两次时把第一个覆盖掉。注意它生成的是"未命名 2.txt""未命名 3.txt"这种形式,而不是直接拒绝。你可以把这个逻辑改成带时间戳的形式,第 6 章有写法。
templateFile这个变量的设计,是为下一章的模板法留的接口。现在留空,跑的是touch分支,创建的是一个零字节的空文件。这个分支只适合纯文本类文件,原因后面马上说。
3.4 一个必须记住的红线:别用 touch 造 Office 文件
这是我要单独拎出来讲的一点,因为它太容易被误用。很多人做完 txt 的新建之后,觉得"改个扩展名不就完了",把.txt改成.docx,心想反正都是文件。然后双击打开,Word 报"文件已损坏"或者"内容有问题需修复"。如果你曾经遇到过这种莫名其妙的情况,八成就是这里来的。
原因不复杂:.docx、.xlsx、.pptx这些格式本质上是 ZIP 压缩包,里面装着一堆 XML 和资源文件,有一套严格的内部结构。一个零字节的文件,扩展名写着.docx,Word 打开时按 ZIP 去解,当然解不出来。同理,.pages、.numbers、.keynote也是包结构,.pdf有固定头部,.png、.jpg有二进制签名,全都不行。
所以规则很清晰:纯文本类扩展名可以用touch造空文件——.txt、.md、.csv、.json、.html、.css、.py、.js、.sh、.yaml、.log、.ini,这些扩展名的文件内容就是一串字节,零字节是合法的(虽然有点内容更好)。容器类、二进制类扩展名必须用模板复制。下一章就是讲怎么把模板这套机制搭起来,一次覆盖所有格式。
4. 路线进阶:一套模板库搞定 Word/Excel/PPT/图片全格式
4.1 模板法的核心思想
上一章结尾说了,.docx不能凭空造。那有没有办法让系统自己生成一个合法的空文档?有,但那需要调用 Word 或者 LibreOffice 的命令行去创建,速度慢、依赖重、还可能弹窗。更简单可靠的办法是:你自己造一个空白的模板文件,放在固定位置,新建的时候复制一份过来改名。
这个思路听起来朴素,实际是所有专业方案的做法。复制一个模板文件,耗时在几十毫秒量级,比你打开应用再另存为快一个数量级。而且模板可以由你完全控制:Word 模板里可以预置你常用的页边距、默认字体、标题样式;Markdown 模板里可以预置 front matter 和常用标签;代码模板里可以预置许可证头和 import 语句。新建出来的文件天生就是"你习惯的样子",而不是应用默认的那个样子,这个价值远远超过"少点两次鼠标"。
模板库放在哪?不建议放 iCloud 云盘或者"文稿"目录。原因有两个:一是云盘有"优化存储"机制,长期不访问的文件可能被替换成占位符,复制的时候会拿到一个空壳或者失败;二是你可能会误删或误改模板。我推荐的路径是用户资源库下的应用支持目录:
mkdir -p ~/Library/Application\ Support/NewFileTemplates这个目录默认在访达里是隐藏的,正好——你不会不小心点进去改坏模板。要进去的话,在访达里按Shift + Cmd + G,粘贴路径就能跳转。
4.2 模板文件怎么准备才规范
模板不是随便存一个文件就行,有几个细节决定了它好不好用。
第一,模板必须是一个"干净的空文档",而不是你的真实文件改名。我见过有人拿一份写了一半的合同当 Word 模板,结果新建出来的每个文件都带着上一份的内容,还要手动删。正确的做法是:打开 Word,新建空白文档,把页边距、默认字体、行距调成你习惯的样子,删掉所有正文,然后"另存为"模板,存到上面那个目录,命名为空白.docx。
第二,命名要能对应到脚本里。我的习惯是用"空白.扩展名",扩展名保持原样,这样脚本里的映射关系一目了然。下面是我自己机器上的模板清单,你可以照着挑需要的:
| 文件名 | 用途 | 内容建议 |
|---|---|---|
| 空白.txt | 纯文本速记 | 零字节即可 |
| 空白.md | 笔记、文档草稿 | 预置标题和日期占位 |
| 空白.docx | 正式文档 | 预置页边距、字号、行距 |
| 空白.xlsx | 数据表格 | 预置表头和常用格式 |
| 空白.pptx | 演示 | 预置母版配色 |
| 空白.pages | 轻量排版 | 预置段落样式 |
| 空白.numbers | 轻量表格 | 预置表头样式 |
| 空白.keynote | 轻量演示 | 预置版式 |
| 空白.html | 网页草稿 | 预置骨架和 meta |
| 空白.py | 脚本 | 预置解释器声明和 import |
第三,模板文件建议设为只读。用一个简单的命令就能锁住,防止你某次不小心用编辑器打开了模板本体、改了内容还保存了,之后新建的所有文件都带着错误内容:
chmod 444 ~/Library/Application\ Support/NewFileTemplates/空白.docx只读属性的副作用是复制出来的新文件也会继承只读属性。这个要在脚本里补一句chmod 644,或者干脆别用只读,靠"路径隐藏"来降低误操作概率。两条路都行,看你更怕哪种风险。
4.3 把脚本改造成模板复制版
拿到模板文件之后,改造脚本只需要动两行:把theExt改掉,把templateFile填上绝对路径。以 Word 为例:
on run {input, parameters} set baseName to "未命名" set theExt to ".docx" set templateFile to (POSIX path of (path to home folder)) & "Library/Application Support/NewFileTemplates/空白.docx" tell application "Finder" set theFolder to insertion location as alias set folderPath to POSIX path of theFolder end tell set fileName to baseName & theExt set fullPath to folderPath & fileName set counter to 1 repeat while (do shell script "test -e " & quoted form of fullPath & " && echo y || echo n") is "y" set counter to counter + 1 set fileName to baseName & " " & counter & theExt set fullPath to folderPath & fileName end repeat do shell script "cp " & quoted form of templateFile & " " & quoted form of fullPath do shell script "chmod 644 " & quoted form of fullPath tell application "Finder" set newFile to file fileName of theFolder select newFile activate end tell return input end run存成"新建 Word 文档"。Excel、PPT、Pages、Numbers、Keynote 依此类推,每做一份,只需要改baseName、theExt、templateFile三个地方。做完六七个,你的"快速操作"子菜单里就有了一整套新建入口。
这里有个实操心得:先做完一个能跑通的,再复制粘贴批量改。在自动操作里,你可以打开已经保存好的动作,直接"另存为"一个新名字,然后再改那三行。这比每次都从头拖一个 AppleScript 动作快得多,也不容易漏掉顶部那两个下拉框的设置。我第一版的时候每个都从头搭,第三个就开始忘了改"没有输入"那一项,结果做出来的菜单项怎么都不出现,白白折腾了二十分钟。
4.4 更省事的方案:一个菜单项 + 弹窗选格式
菜单项多了之后有个新问题:右键 → 快速操作 → 在七八个选项里找"新建 Word 文档",这个交互路径其实也不短,而且每次都要用眼睛扫一遍。我后来改成了一个入口加弹窗选择的方案,用起来更顺手。
思路是:脚本先弹一个列表让你选格式,选完之后再根据选择决定扩展名和模板路径。核心片段如下:
on run {input, parameters} set typeList to {"txt 纯文本", "md 笔记", "docx 文档", "xlsx 表格", "pptx 演示", "html 网页"} set chosen to choose from list typeList with prompt "要新建哪种文件?" default items {"txt 纯文本"} with title "新建文件" if chosen is false then return input set chosenItem to item 1 of chosen -- 从选项里解析出扩展名 set theExt to "." & word 1 of chosenItem -- 文本类走 touch,容器类走模板 set plainTypes to {".txt", ".md", ".html", ".json", ".csv"} set baseName to "未命名" tell application "Finder" set theFolder to insertion location as alias set folderPath to POSIX path of theFolder end tell set fileName to baseName & theExt set fullPath to folderPath & fileName set counter to 1 repeat while (do shell script "test -e " & quoted form of fullPath & " && echo y || echo n") is "y" set counter to counter + 1 set fileName to baseName & " " & counter & theExt set fullPath to folderPath & fileName end repeat if plainTypes contains theExt then do shell script "touch " & quoted form of fullPath else set templateFile to (POSIX path of (path to home folder)) & "Library/Application Support/NewFileTemplates/空白" & theExt do shell script "cp " & quoted form of templateFile & " " & quoted form of fullPath do shell script "chmod 644 " & quoted form of fullPath end if tell application "Finder" set newFile to file fileName of theFolder select newFile activate end tell return input end run这个版本的取舍很明显:牺牲一次点击,换来菜单清爽。如果你每天只新建一两种格式,用多个固定菜单项更快;如果你经常在七八种格式之间来回切,弹窗版更省心。我的实际做法是两者都有——最常用的 txt 和 md 做成独立菜单项配快捷键,其余格式收进弹窗那个入口里。
5. 不想写脚本:快捷指令方案与工具选型
5.1 用系统自带的快捷指令做同样的事
较新的系统版本里,"快捷指令"已经能直接注册成访达的快速操作,图形化搭建,对不熟悉脚本的人友好很多。路径是:打开快捷指令 App,新建一个快捷指令,在右侧详情面板里勾上"用作快速操作",然后把"接收"设为"无输入"、"在"设为"访达"。
逻辑上,你需要两个动作:一个"运行 AppleScript"(因为要取当前目录路径,纯图形化动作在这里拿不到这个信息),一个"停止并输出"。脚本部分和前面几乎一模一样,核心还是那句insertion location。这一点值得强调:快捷指令只是换了个外壳,真正解决"在空白处右键也能知道当前目录"这个问题的,依然是访达的insertion location属性。理解了这个本质,你就不会在不同方案之间反复怀疑自己哪里做错了。
快捷指令方案相对自动操作方案有两个实在的好处:一是动作可以通过云同步到你名下的其他机器,换电脑不用重做;二是它在新系统上的兼容性更被官方重视,长期看更稳。缺点是图形化编辑器在处理多分支逻辑时比较笨拙,稍微复杂一点就得嵌脚本,反而不如纯脚本干净。
5.2 第三方右键增强工具的选型清单
如果你完全不打算碰脚本,装个工具是最快的。但我希望你在装之前,用下面这几条过一遍,而不是看谁排在搜索结果前面就装谁。
| 检查项 | 为什么重要 | 怎么判断 |
|---|---|---|
| 是否有正规签名 | 无签名应用会被系统拦截,且每次大版本更新后可能直接失效 | 安装时是否弹"无法验证开发者",是否需要在设置里手动放行 |
| 权限要求是否合理 | 右键增强不需要"完全磁盘访问"这种顶级权限 | 首次启动要了哪些权限,能否拒绝后仍正常使用 |
| 是否常驻后台 | 常驻进程会持续占内存和电量 | 活动监视器里看空闲时的 CPU 和内存占用 |
| 是否支持自定义模板 | 决定了你能否复用自己准备好的空白文档 | 设置里能否指定模板文件夹或添加自定义格式 |
| 卸载是否干净 | 有些工具会在系统里留下多处残留 | 是否提供官方卸载入口 |
| 更新频率 | 系统升级后功能失效是这类工具的通病 | 最近一次更新时间,是否适配当前系统大版本 |
我个人的态度是:这类工具解决的是"我一点都不想学脚本"这个诉求,它本身没问题。但你要接受一个现实——系统每次大版本更新,这类深度挂钩访达的工具都有失效的可能,到时候你只能等作者更新。而脚本方案失效时,你打开自动操作看一眼报错,多数情况十分钟能自己修好。这是一个长期成本的选择题,没有标准答案。
5.3 真正的效率杀招:给动作绑快捷键
不管走哪条路,最后一步都建议做:给最常用的那个新建动作绑一个快捷键。因为右键 → 快速操作 → 选菜单项,这个路径再短也是三次操作,而快捷键是一次。
设置路径是:系统设置 → 键盘 → 键盘快捷键 → 服务(部分版本叫"快捷操作")→ 在列表里找到你做的那个动作 → 右侧双击,按下你想要的组合键。
选键位有几个讲究。首先避开系统已经占用的,Shift + Cmd + N是新建文件夹,已经很顺手,别去动它。其次尽量用三段组合,降低和其他应用冲突的概率。我自己的配置是:
Ctrl + Cmd + N:新建 txtCtrl + Cmd + M:新建 mdCtrl + Cmd + W:新建 Word 文档
注意Ctrl + Cmd + W在某些应用里是"关闭所有窗口"的意思,如果你常用那个功能,就换一个。绑完之后一定要在你最常工作的那个应用里实测一次——有些应用的快捷键优先级高于系统服务,会导致你的快捷键在那些应用里失灵,尤其是全屏状态下的编辑器。
6. 踩坑实录:那些文档里不会写的失败场景
6.1 权限、拦截与签名问题
第一个高频问题:动作做完了,右键里根本没有"快速操作"这一项。九成的原因是顶部那两个下拉框没设对,尤其是"工作流程收到当前"没有改成"没有输入"。第二种可能是动作保存后系统还没刷新菜单,注销重登或者重启访达就能解决。第三种可能是你在访达的"显示"菜单里把扩展名隐藏了,导致你以为没生成文件,其实生成了但看不到——把"显示所有文件扩展名"打开就能确认。
第二个高频问题:脚本跑到一半弹出"自动操作想要控制访达",点了不允许,之后再也不弹了。这种情况去系统设置 → 隐私与安全性 → 自动化,里面会有对应的开关,手动打开即可。同样的道理,脚本里那两行keystroke return需要"辅助功能"权限,如果它不工作,去隐私与安全性 → 辅助功能里把对应进程勾上。
第三个:从别处拷来的动作文件,第一次运行提示"无法验证"。这是因为动作文件本质上是一个带脚本的包,系统对来源不明的脚本会拦。解决方式是在隐私与安全性里点"仍要打开",但我要提醒一句——只对你确认来源的动作这么做。别人给你的脚本,你应该先用文本编辑器打开看一眼里面到底写了什么,尤其注意有没有do shell script后面跟着删除、上传、修改权限之类的命令。这是个基本习惯,不是多疑。
6.2 外置盘、云盘和网络盘的特殊情况
如果你经常在外置硬盘或者网络共享目录里新建文件,会遇到几个只在特定环境出现的问题。
外置盘如果是 exFAT 或 FAT32 格式,复制模板过去是可以的,但系统会额外生成._开头的隐藏文件,用来存放扩展属性。这些文件本身无害,但它们会让你在某些列表视图里看到一堆莫名其妙的文件,也影响拷贝速度。如果目录需要干净,可以在拷贝后清理掉,或者干脆把盘格式化成 APFS(仅限 macOS 专用盘)。
网络共享目录(SMB 之类的协议)的问题主要是权限和延迟。cp到网络盘上可能比本地慢很多,如果脚本里没加超时处理,你会感觉"点了没反应"。更麻烦的是某些网络盘不支持扩展属性写入,导致复制过去的 Office 文件打开时报错。遇到这种情况,改用"先在本地新建再拖过去"更稳妥。
云同步目录的风险前面提过:优化存储可能把模板替换成占位符。解决办法是把模板库放在本地固定路径,脚本里写死绝对路径,不要用相对路径或者"当前目录"去找模板。
6.3 常见问题速查表
我把这几年被问得最多的情况整理成一张表,出问题的时候对照着看,能省不少时间。
| 现象 | 最可能的原因 | 处理方式 |
|---|---|---|
| 右键里没有"快速操作" | 下拉框未设"没有输入" | 重开动作,改顶部设置后重新保存 |
| 有菜单项但点了没反应 | 缺少自动化或辅助功能权限 | 隐私与安全性中授权后重试 |
| 文件建在了错误目录 | 访达不是当前活动窗口 | 先点一下目标窗口再右键 |
| 生成了但找不到文件 | 扩展名被隐藏 | 显示所有文件扩展名 |
| Word 报文件损坏 | 用 touch 造了 .docx | 改用模板复制 |
| 中文名变成问号或乱码 | 路径含特殊字符未转义 | 统一用 quoted form of |
| 重名时覆盖了旧文件 | 没做重名检测 | 加 repeat while 循环 |
| 系统升级后动作消失 | 服务目录被清理 | 重新导入动作文件 |
| 外置盘上文件打不开 | 文件系统不支持扩展属性 | 换 APFS 格式或先建本地再拷贝 |
| 快捷键在某些应用里无效 | 应用内快捷键优先级更高 | 换一套不易冲突的组合键 |
6.4 两个我踩过但没人提过的坑
第一个坑:脚本里写死的中文路径在切换输入法时会出问题。这个问题极其隐蔽,表现为"平时都能用,偶尔某次就失败了"。根本原因是你用中文输入法状态下在脚本里打了中文路径,某些字符看起来一样,实际编码不同(比如全角空格和半角空格)。解决方式是:脚本里的路径尽量用英文目录名,或者路径不要手打,用变量拼接出来。
第二个坑:在"最近使用"或者"标签"视图里右键,insertion location的表现和普通文件夹窗口不一样。这些是虚拟视图,没有真实的父目录,脚本取到的路径可能是错的。这也是一个"偶尔失败"型的问题,很难复现。我的做法是遇到诡异失败时,先回到普通文件夹窗口重试一次,如果正常,那基本就锁定是这个原因。
7. 我的最终配置和一些可以抄的微调
7.1 现在这套方案长什么样
讲完所有细节,说说我机器上最后稳定下来的配置,你可以直接拿去当起点。
模板库放在本地用户资源库下的应用支持目录,一共十个模板文件,覆盖我日常用的全部格式,模板本身设了只读属性防止误改。右键菜单里我只保留了三个独立项:新建 txt、新建 md、新建文件夹(这个直接用系统自带的Shift + Cmd + N,没自己造)。其余六种格式全部收进一个叫"新建其他文件"的弹窗入口,选完格式自动创建并进入重命名状态。
快捷键只绑了两个:Ctrl + Cmd + N建 txt,Ctrl + Cmd + M建 md。这两个是我一天要用几十次的动作,其余格式一天用不到三次,不值得占键位。
另外我把"隐藏扩展名"彻底关掉了。这个改动看起来和新建文件无关,实际上解决了大量"文件生成了但我以为没生成"的困惑。
7.2 三个值得加的微调
第一个,把默认文件名改成带时间戳。默认叫"未命名"的话,你连续建五个文件就是"未命名""未命名 2""未命名 3",过两天根本认不出哪个是哪个。改一行就行:
set timeStamp to do shell script "date +%Y%m%d-%H%M" set baseName to "笔记-" & timeStamp这样新建出来就是"笔记-20250518-1432.txt",按名字排序天然就是按时间排序。
第二个,新建后自动把文件名全选。脚本末尾那两行keystroke return就是干这个的:文件建好后自动进入重命名状态,你直接打字就覆盖了"未命名"三个字,打完回车确认,整个流程一气呵成。不需要的话删掉那两行即可,代价是每次要多点一次重命名。
第三个,给 Markdown 模板预置一段骨架。这是我用得最爽的一个改动。模板文件里直接写好几行常用结构,新建出来的 md 立刻就是能写的样子,省掉每次开头敲那几个符号的动作。同理,代码模板里预置许可证头和常用 import,也是一次配置长期受益。
7.3 一个可以继续往下做的方向
如果你把这套搭起来之后觉得还不够,有两个扩展方向值得考虑。一是按项目区分的模板库:不同的项目用不同的模板,脚本里根据当前路径自动切换模板来源,比如在某个代码仓库里新建 Python 文件时自动带上这个项目约定的头部注释。二是把新建和历史目录结合:让脚本记住你最近新建过文件的几个目录,在弹窗里列出来,一键在新文件里跳过去——不过这已经超出"右键新建"的范围,属于文件管理自动化的范畴了。
我自己用了这么久,最大的体会其实是那句老话:摩擦小的动作才会被重复,被重复的动作才值得优化。新建一个文件这件事单次看微不足道,但它一天要发生几十次,是真正值得花二十分钟配好的东西。配完之后你可能半年都想不起来自己配过,但那半年里你确实少点了上千次鼠标——这大概就是自动化最朴素的价值。