- 开发工具
- 桌面应用
【免费下载链接】CotEditor
Lightweight Plain Text Editor for macOS
CotEditor 是一款面向 macOS 的轻量级纯文本编辑器,它的核心目标是为所有人提供一个直觉化的 macOS 原生界面。本指南以项目 README.md 为骨架,结合仓库中的源码、配置与资源文件,深入讲解 CotEditor 的设计哲学、系统版本支持策略、Swift 源码架构,以及从源码构建 CotEditor(ad-hoc 本地构建与正式发布构建)的完整流程,并附带cot命令行工具的实战用法。读完本文,你将能理解这个纯 Swift 文本编辑器的内部组织方式,并掌握在本机 Xcode 中复现构建它的每一步。
CotEditor 是什么:定位与核心特性
CotEditor 是一个为 macOS 设计的轻量级纯文本编辑器,项目在 README.md 中的定位是“面向所有人的通用纯文本编辑器(general plain text editor for everyone)”,同时提供 macOS 原生、直观的用户界面。它的产品形态覆盖 Mac App Store 与官方直接分发两种渠道,并内置了跨语言本地化支持。
从仓库资源可以直接看到它的功能版图:
- 内置 70 种语法定义:仓库的 CotEditor/Resources/Syntaxes 目录下包含 70 个
.cotsyntax包,覆盖 C/C++/Java/Swift/Go/Rust/Python/Ruby/PHP/Shell、Markdown/HTML/CSS/JSON/YAML/XML/TOML 等主流语言,也包含 LaTeX、BibTeX、Verilog、VHDL、Scheme、Mojo 等专业或小众格式。 - 内置 13 个配色主题:CotEditor/Resources/Themes 下的
.cottheme文件(如 Classic、Anura、Resinifictrix 等)提供深浅两套视觉方案。 - 文档类型覆盖面广:CotEditor/Info.plist 中声明的
LSItemContentTypes将纯文本、源码、Markdown、SVG、JSON 等数十种 UTI 注册给 CotEditor 作为默认编辑器,并额外导出了com.coteditor.CotEditor.syntax(.cotsyntax)、theme(.cottheme)、replacement(.cotrpl)、settings(.cotsettings)等专属文档类型,这意味着语法、主题和批量替换规则都可以作为可分发文件被系统识别。 - 多语言支持:README 列出英语、简/繁中文、粤语、捷克语、荷兰语、法语、德语、印地语、意大利语、日语、韩语、波兰语、葡萄牙语、俄语、西班牙语、乌克兰语和土耳其语共 19 种语言。仓库中 CotEditor/Localizables 下的
.xcstrings字符串目录是这套本地化体系的实体。
设计哲学:五种原则如何塑造产品形态
README 用一节专门阐述了驱动项目长期方向的五项设计原则,这五条不仅是产品文档,也直接反映在代码组织上:
做一等公民的 macOS 应用(Behave as a first-class macOS application)CotEditor 采用系统原生 UI 组件、约定与行为,目标是与 macOS 融为一体而非彰显个性。偏离标准 macOS 行为的特性——即使其他编辑器很常见——也可能被拒绝。对应到源码,CotEditor/Sources 中大量使用 AppKit 原生组件(
NSTextView、NSLayoutManager、NSTextContainer的定制扩展位于 CotEditor/Sources/Document Window/Text View),并以 Cocoa 文档架构承载整个应用(见下文“源码架构”)。对新手和高级用户都易用、舒适CotEditor 在保持简单上手的同时,为有经验的编辑者和开发者保留精确控制能力。例如 CotEditor/Sources/Text Finder 提供的正则查找替换、CotEditor/Sources/Scanners/EditorCounter.swift 实现的字符/单词统计,都同时服务于两类用户。
少即是多(Less is more)项目刻意避免不必要的复杂度,因为“微小的选项会累积起来,最终给用户带来不必要的决策负担”。这意味着功能取舍上偏向克制,设置项被收敛到九个设置面板(见 CotEditor/Sources/Settings Window/Panes)。
准确处理广泛的纯文本格式从日常笔记到小众甚至遗留格式,CotEditor 优先保证正确的文本处理、编码支持与可预测的编辑行为。这体现在独立的 Packages/EditorCore 包中:
FileEncoding(编码探测与转换)、LineEnding(换行符)、CharacterInfo(字符信息)、TextFind(文本查找)等模块均被拆为可独立测试的组件。通过本地化与无障碍尊重多元用户只要可能,CotEditor 就集成 macOS 的本地化、无障碍与用户自定义能力。仓库中遍布各处的
.xcstrings字符串目录、Storyboard 的mul.lproj多语言资源,以及 CHANGELOG 中反复出现的 VoiceOver 改进条目(如 7.0.4 “让编辑器通过 VO-Shift-H 朗读状态栏中的文本统计信息”),都是这一原则的落地证据。
这些原则既是项目的长期方向,也是评估新功能请求是否符合 CotEditor “macOS 原生身份”的过滤器。
系统版本支持策略:跟随最新两个 macOS 大版本
README 明确声明:CotEditor 支持最新两个大版本的 macOS。例如当前仓库要求macOS Tahoe 26 或更高版本(对应 Packages/EditorCore/Package.swift 中platforms: [.macOS(.v26)])。
这一策略已延续多年,且不会按单个版本逐个评估。它的理由是:及时采用新的 macOS 技术,同时维持已支持版本的质量与稳定性;支持更多版本会显著增加测试与维护负担,反而不利于新功能与可靠更新。
对旧系统用户:如果你使用的是已不再受当前版本 CotEditor 支持的旧版 macOS,README 建议从官方 Archives 页获取与该系统兼容的最新版本——它包含针对该 macOS 版本的最终更新与修复,也是该系统上最稳定的版本。
源码架构:纯 Swift 的 Cocoa 文档型应用
README 的 Source Code 一节说明:CotEditor 是纯 macOS 原生应用,完全用 Swift 编写,遵循 Cocoa 的 document-based 应用架构,并充分尊重NSTextView及其相关文本系统 API 的能力。仓库结构完全印证了这一点:
- 应用主体CotEditor:包含
Document/DirectoryDocument文档类(CotEditor/Sources/Document)、基于NSTextView的编辑器体系(CotEditor/Sources/Document Window/Text View)、设置窗口、文本查找、脚本支持与各类设置管理器(CotEditor/Sources/Setting Managers)。 - EditorCore 包Packages/EditorCore:把字符信息、编码、换行、排序、查找等底层能力拆成 16 个独立 target,每个都配有独立测试(如
FileEncodingTests、TextFindTests、StringUtilsTests),Package.swift中以 Swift 6.3 工具链、macOS 26 平台基线构建。 - MacUI 包Packages/MacUI:提供正则高亮、快捷键(Shortcut)等跨场景 UI 能力。
- Syntax 包Packages/Syntax:承载基于 tree-sitter 的语法解析器与语法格式(SyntaxFormat、SyntaxParsers),
SyntaxMap.json(CotEditor/Resources/SyntaxMap.json)在构建阶段自动生成语法与文件扩展名/解释器的映射关系。 - 开发环境:README 给出的环境为 macOS 27、Xcode 27,并启用了 Sandbox 与 Hardened Runtime。
这种“文档类 + NSTextView + 独立底层包”的分层,让 CotEditor 既能精确控制文本渲染(定制 LayoutManager、行号视图、不可见字符绘制),又能对核心算法做单元测试。
从源码构建 CotEditor 的两种方式
README 的 How to Build 一节给出了两条构建路径,下面结合仓库中的实际配置文件展开。
方式一:ad-hoc 本地构建(自用体验)
适合“只想在本地构建并玩玩 CotEditor”的开发者,不涉及正式签名:
- 在 Xcode 中打开 CotEditor.xcodeproj。
- 切换到 ad-hoc 构建模式:
- 打开 Configurations/CodeSigning.xcconfig;
- 取消注释其中的
#include "CodeSigning-AdHoc.xcconfig"一行(该行上方有说明注释“Uncomment the following line to override these settings for ad-hoc local development”)。
- 构建 “CotEditor” scheme。
CodeSigning.xcconfig的默认内容(用于正式发布)是:
CODE_SIGN_IDENTITY = Apple Development CODE_SIGN_STYLE = Automatic DEVELOPMENT_TEAM = HT3Z3A72WZ而被引入的 Configurations/CodeSigning-AdHoc.xcconfig 会把这些签名设置覆盖为 ad-hoc 模式:
CODE_SIGN_ENTITLEMENTS = CotEditor/$(PRODUCT_NAME)-AdHoc.entitlements CODE_SIGN_IDENTITY = - CODE_SIGN_STYLE = Manual DEVELOPMENT_TEAM = PROVISIONING_PROFILE_SPECIFIER =对比可见:ad-hoc 模式使用空身份(-)做临时签名、手动签名风格、清空开发团队与描述文件,并使用专用的 AdHoc entitlements(CotEditor/CotEditor-AdHoc.entitlements)。这样任何人都能在没有 Apple 开发者账号的情况下完成本地构建。
方式二:正式发布构建
- 在 Xcode 中打开 CotEditor.xcodeproj。
- 直接构建 “CotEditor” scheme。
此时使用CodeSigning.xcconfig中的自动签名配置(Apple Development 身份 + 自动风格 + 项目开发团队),适合有开发者证书的分发场景。README 同时提醒:构建环境需为 macOS 27 与 Xcode 27,且应用启用了 Sandbox 与 Hardened Runtime。
附带价值:内置cot命令行工具
README 没有展开,但仓库内确实包含一个与编辑器深度集成的命令行工具,值得作为进阶内容补充。它的可执行脚本位于 CotEditor/Resources/cot(Python 3 实现,版本 7.0.1),通过 AppleScript 与 CotEditor 通信,安装后位于/usr/local/bin/cot。从parse_args()的源码可见其完整参数表:
| 参数 | 说明 |
|---|---|
FILE... | 要打开的文件路径(支持通配符;-表示从标准输入读取) |
-v, --version | 输出版本号 |
-w, --wait | 等待打开的文件被关闭后再返回 |
-g, --background | 打开但不将应用带到前台 |
-r, --readonly | 以只读方式打开文档 |
-n, --new | 新建一个空白文档(不带 FILE 时新建空白窗口) |
-s, --syntax | 为打开的文档指定语法着色 |
-l, --line | 跳转到指定行 |
-c, --column | 跳转到指定列 |
--goto FILE[:LINE[:COLUMN]] | 打开文件并跳转到指定行列(不能与--line/--column/FILE 共用) |
典型用法示例:
cot README.md # 打开文件 cot -n # 新建空白文档 cot -l 120 main.swift # 打开文件并跳到 120 行 cot --goto "docs/guide.md:35:4" # 打开并跳到 35 行 4 列 echo "hello" | cot - # 用管道内容新建文档 cot -r -s "Markdown" notes.md # 只读打开并指定 Markdown 语法cot的安装状态检测逻辑位于 CotEditor/Sources/Setting Managers/CommandLineToolManager.swift:它通过检查/usr/local/bin/cot符号链接的解析目标,返回none(未安装)、validTarget(指向应用内捆绑脚本)、differentTarget(指向其他目标)或invalidTarget(目标不可达)四种状态,用户可以在集成设置(Integration)面板中一键安装或修复。
许可证
CotEditor 的代码部分采用Apache License 2.0,图像资源采用Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International(CC BY-NC-ND 4.0)许可,版权归属为:
- © 2005-2009 nakamuxu
- © 2011, 2014 usami-k
- © 2013-2026 1024jp
详细条款见 LICENSE。贡献者在提 issue 或提交 PR 前应阅读 CONTRIBUTING.md,其中对编码风格、本地化维护流程(以.xcstrings字符串目录为核心)、内置语法/主题的接收规则都有明确约定——例如新增内置语法只允许放入CotEditor/Resources/Syntaxes/目录,SyntaxMap.json会在构建阶段自动生成,无需手工修改。
总结
CotEditor 是一个可以完整从源码构建的 macOS 原生文本编辑器:它用纯 Swift 与 Cocoa 文档架构搭建骨架,用“少即是多”的设计哲学约束功能边界,用紧跟最新两个 macOS 大版本的策略换取对新技术的及时采用,并通过cot命令、脚本支持(AppleScript/sdef,见 CotEditor/CotEditor.sdef)等服务把编辑能力延伸到终端与自动化场景。如果你在寻找一个可读、可测、可二次构建的 macOS 原生编辑器参考实现,这份仓库和上述构建路径就是最好的起点。
- 开发工具
- 桌面应用
【免费下载链接】CotEditor
Lightweight Plain Text Editor for macOS
相关推荐
CotEditor:macOS轻量文本编辑器的完整使用手册
CotEditor:macOS轻量文本编辑器的完整使用手册 作为macOS平台上备受好评的轻量级文本编辑器,CotEditor以其简洁界面和强大功能赢得了众多用
开发工具桌面应用轻松掌握CotEditor:macOS原生文本编辑器的8个实用技巧
轻松掌握CotEditor:macOS原生文本编辑器的8个实用技巧 你是否正在寻找一款既轻量又强大的文本编辑器?CotEditor作为macOS平台上的原生应用
开发工具桌面应用Trumbowyg源码架构解析:深入理解轻量级编辑器设计原理
Trumbowyg是一个轻量级、功能强大的WYSIWYG(所见即所得)JavaScript编辑器,体积控制在10KB以下,却提供了丰富的编辑功能和插件系统。作为
前端UI库/组件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考