TRAE新SOLO 初体验之「一句话制作 markdown 应用」

首先感谢TRAE 提供了内测码,我和几个同事一起试用了一下,大家整体的感受都是做的挺不错的。

在这里说一下一句话做一个应用的体验。

以制作一个 Markdown读写应用为例,给到新SOLO的提示词是“给我做一个类似于 Typora 的 Markdown 应用”。

SOLO很快做好了应用,能够打开 Markdown文档,但无法编辑。

正好 antigravity 还有一些额度马上要刷新,就选了Claud Sonnet 4.6做了问题检查和优化,并出了一个记录:

一、原项目存在的问题

1. 编辑体验缺陷(核心问题)

原版「所见即所得」的实现方案存在根本性缺陷:将一个透明的 <textarea> 绝对定位叠加在 Markdown 渲染层之上。这个方案理论上可以让用户感觉在「直接编辑渲染结果」,但实际运行中问题严重:

  • 光标位置对不上<textarea> 使用等宽字体(monospace),而渲染层使用比例字体(sans-serif),两者字符宽度不同,导致光标视觉位置与实际输入位置存在显著偏移
  • 行高不一致:Markdown 渲染后标题、代码块等元素高度远大于纯文本,<textarea> 的行高无法同步匹配渲染层的高度,越往下偏移越大
  • 无法选中渲染内容:渲染层被 pointer-events: none 屏蔽,用户无法点击链接或复制渲染后的文字

2. 代码架构问题

问题 详情
单文件巨型组件 所有逻辑、状态、UI 全部堆在 App.tsx 一个文件,共 797 行
关注点不分离 文件管理、编辑器逻辑、主题设置、UI 渲染混在一起,难以维护和扩展
无 Custom Hooks 业务逻辑直接写在组件内,无法复用

3. 功能缺失

  • :cross_mark: 文件无法重命名(删除后重建才能改名)
  • :cross_mark: 目录(TOC)面板不可点击跳转,点击无反应
  • :cross_mark: 没有阅读时间估算等统计数据
  • :cross_mark: 只有源码/预览两种视图,缺少分栏模式
  • :cross_mark: 没有视图模式的直观切换控件

4. 视觉设计问题

  • 配色使用最普通的 #fafafa 白底 + #0066cc 蓝色,缺乏设计感
  • 字体全部使用 Inter(系统 UI 字体),正文阅读感不佳
  • 引用块、代码块、表格等样式粗糙,无精致细节
  • 代码高亮样式与整体主题不协调(github.css 在暗色模式下突兀)
  • 文件列表不显示修改时间,难以区分文件

二、改进内容

2.1 架构重构:单体 → 分层

将 797 行的单体文件彻底拆分为标准的分层架构:

src/
├── App.tsx                  # 精简至 ~120 行,仅负责状态编排与布局组装
├── hooks/
│   ├── useFiles.ts          # 文件管理(CRUD + localStorage 持久化)
│   ├── useEditor.ts         # 编辑器逻辑(文本插入、包裹、快捷键)
│   └── useSettings.ts       # 全局设置(主题、字体、行高、视图模式)
└── components/
    ├── Sidebar.tsx           # 侧边栏(文件列表、搜索、重命名、删除)
    ├── Toolbar.tsx           # 格式化工具栏 + 视图模式切换器
    ├── Editor.tsx            # 编辑器主体(三模式:源码/分栏/预览)
    ├── TocPanel.tsx          # 目录面板(自动提取标题 + 点击跳转)
    ├── StatusBar.tsx         # 底部状态栏(字符/词数/行数/阅读时间)
    └── SettingsModal.tsx     # 设置弹窗(主题/字体/行高/快捷键参考)

2.2 编辑体验修复

放弃有缺陷的「透明叠加」方案,改为业界普遍采用的分栏架构

原方案 新方案
实现思路 透明 textarea 叠加在渲染层上 独立的源码窗格 + 独立的预览窗格
光标准确性 :cross_mark: 光标有偏移 :white_check_mark: 光标完全准确
视图可选择 源码 / 预览(二选一) 源码 / 分栏 / 预览(三选一)
渲染层交互 :cross_mark: 无法点击链接 :white_check_mark: 预览区链接可点击

2.3 视觉系统重建

设计 Token(CSS 变量系统)

--editor-bg       /* 背景色 */
--editor-text     /* 正文色 */
--editor-accent   /* 强调色(Indigo #5B5BD6) */
--editor-border   /* 边框色 */
--editor-hover    /* 悬停背景 */
--code-bg         /* 代码背景 */
--sidebar-bg      /* 侧边栏背景 */

字体升级

  • 正文预览区:Lora(优雅衬线字体,匹配阅读场景)
  • 源码编辑区:JetBrains Mono(等宽字体,代码感强)
  • UI 界面元素:Inter(清晰的系统字体)

4 套主题

主题 背景色 强调色 适用场景
亮色(默认) #FAFAF8 暖白 #5B5BD6 Indigo 日常使用
暗色 #141414 深石板 #7C7CEA 浅紫 夜间写作
护眼 #F8F1E3 米黄 #8B5A2B 长时间阅读
Nord #2E3440 北欧蓝灰 #88C0D0 冰蓝 开发者偏好

Prose 样式精修

  • H1 带 2px 底部边框,H2 带 1px 底部边框,层次感清晰
  • 引用块:左侧 3px 强调色细线 + 5% 强调色背景 + 斜体
  • 代码块:10px 圆角 + 1px 边框 + 微投影,浮于页面
  • 表格:圆角溢出隐藏 + tbody 行 hover 高亮
  • 所有标题带 scroll-margin-top 用于 TOC 跳转定位

2.4 功能完善

文件重命名

  • 侧边栏每个文件项悬浮时显示「重命名」和「删除」按钮
  • 点击重命名进入行内编辑模式,支持回车确认 / Esc 取消
  • 自动补全 .md 后缀

TOC 目录跳转

  • TocPanel 自动解析当前文档的 H1–H6 标题
  • 每个标题在渲染时生成唯一的 id(中文 slug)
  • 点击 TOC 条目调用 scrollIntoView({ behavior: 'smooth' })

状态栏增强

  • 新增「预计阅读时间」(按 300 字/分钟估算,过滤代码块)
  • 显示文件名
  • 所有数字实时更新

快捷键

  • ⌘/Ctrl + B:粗体
  • ⌘/Ctrl + I:斜体
  • ⌘/Ctrl + K:插入链接
  • `⌘/Ctrl + ``:行内代码
  • Tab / Shift+Tab:缩进 / 减少缩进
  • Enter 在列表项末尾:自动续列表(有序自动递增编号)

三、改进后的功能列表

核心编辑

  • :white_check_mark: 源码编辑:等宽字体,语法清晰,光标准确
  • :white_check_mark: 分栏预览:左编辑右渲染,实时同步,无闪烁
  • :white_check_mark: 纯预览:仅显示渲染结果,可点击链接
  • :white_check_mark: 自动续列表:Enter 自动添加下一个列表符号
  • :white_check_mark: 快捷键格式化:粗体、斜体、代码、链接
  • :white_check_mark: Tab 缩进:支持多级缩进,Shift+Tab 反缩进
  • :white_check_mark: 自动保存:内容实时写入 localStorage

文件管理

  • :white_check_mark: 新建文件:即时创建,自动聚焦编辑区
  • :white_check_mark: 导入文件:支持 .md / .markdown / .txt
  • :white_check_mark: 导出文件:下载当前文件为 .md
  • :white_check_mark: 重命名:行内双击铅笔图标,回车/Esc 控制
  • :white_check_mark: 删除文件:确保至少保留一个文件(自动创建)
  • :white_check_mark: 文件搜索:实时过滤文件名
  • :white_check_mark: 相对时间:显示「刚刚」「3 分钟前」等

视图与导航

  • :white_check_mark: 三种视图模式:源码 / 分栏 / 预览(工具栏右侧切换)
  • :white_check_mark: 专注模式:隐藏所有 UI 元素,鼠标移入时淡入工具栏和状态栏
  • :white_check_mark: 侧边栏折叠:收起侧边栏扩大编辑区
  • :white_check_mark: 目录面板:点击跳转对应标题
  • :white_check_mark: 格式化工具栏:16 个常用 Markdown 格式按钮,分组排列

Markdown 渲染支持

  • :white_check_mark: 标题 H1–H6(含层级视觉区分)
  • :white_check_mark: 粗体、斜体、删除线、行内代码
  • :white_check_mark: 无序列表、有序列表、任务列表(复选框)
  • :white_check_mark: 引用块(嵌套支持)
  • :white_check_mark: 代码块(多语言语法高亮)
  • :white_check_mark: 表格(含 thead 背景、tbody hover)
  • :white_check_mark: 链接(可点击,预览模式下生效)
  • :white_check_mark: 图片(圆角 + 微投影)
  • :white_check_mark: 水平分割线

设置

  • :white_check_mark: 4 套主题:亮色 / 暗色 / 护眼 / Nord
  • :white_check_mark: 字体大小:12px–24px 滑块调节
  • :white_check_mark: 行高:1.2–2.5 滑块调节,实时预览
  • :white_check_mark: 快捷键参考:设置面板内展示所有快捷键

数据统计(状态栏)

  • :white_check_mark: 字符总数
  • :white_check_mark: 词数(中英文混合计算)
  • :white_check_mark: 行数
  • :white_check_mark: 预计阅读时间(分钟)

四、文件变更摘要

文件 状态 说明
src/App.tsx 重写 797 行 → ~120 行,仅做布局与状态编排
src/index.css 重写 全新设计系统,~700 行精细样式
src/hooks/useFiles.ts 新建 文件管理逻辑
src/hooks/useEditor.ts 新建 编辑器操作逻辑
src/hooks/useSettings.ts 新建 全局设置状态
src/components/Sidebar.tsx 新建 侧边栏组件
src/components/Toolbar.tsx 新建 工具栏组件
src/components/Editor.tsx 新建 编辑器主体组件
src/components/TocPanel.tsx 新建 目录面板组件
src/components/StatusBar.tsx 新建 状态栏组件
src/components/SettingsModal.tsx 新建 设置弹窗组件
package.json 不变 依赖无新增

完善后的应用可以正常使用。

我相信,如果不仅仅只给 agent 一句话做为提示词,SOLO 也可以完成的很好,但当前来看,可能受限于我个人的提示词水平,或受限于默认大模型编码能力,一句话应用还不算理想。

另外,同事们还想要内测码,大家都很有兴趣。
最后,祝TRAE越来越好。