代码编辑器:按键、行号栏、语法着色与补全
脚本页面的编辑器是一个透明的 textarea,下面叠着同步滚动的行号栏和一层着色层。它在不引入任何编辑器库的前提下,加上了行号、缩进按键、语法颜色和一个 API 补全列表。
Senzoukria · 文档 · 更新于 2026 年 9 月
位置
- 位置
- 脚本页面 → 中央的编辑区
- 缩进单位
- 两个空格 —— 与示例脚本和助手的输出一致
- 拼写检查
- 关闭
- 补全来源
- JavaScript 中为 lib.*,Python 中为 of.* —— 由语言决定提供哪份列表
- 无障碍名称
- “脚本源代码”
它做什么
一个普通的 textarea 会把 Tab 交给焦点导航,不显示行号,也没有任何快捷键 —— 一旦你开始写真正的脚本,这三点就很要紧。这个编辑器保留浏览器原生的输入行为(选区、撤销、输入法、无障碍),并在它周围补上缺失的部分:一条随文本滚动的行号栏、下面一层着色层,以及一个补全列表。
行号栏会标出光标所在行,运行失败所报告的行以红色高亮,因此控制台里的“第 23 行”指向的是你看得见的东西。
按键
| 按键 | 默认行为 | 作用 |
|---|---|---|
| Tab | 插入两个空格 | 在多行选区上改为整块缩进。 |
| Shift+Tab | — | 把该行或所选块减少一级缩进。 |
| Enter | 保持缩进 | 保留当前行的缩进,在一行打开代码块之后再加一级。 |
| Ctrl/Cmd+S | — | 保存脚本。 |
| Ctrl/Cmd+Enter | — | 在示例数据上运行脚本。 |
| 方向键 上 / 下 | — | 补全列表打开时在其中移动。 |
| Enter 或 Tab(列表打开时) | — | 接受高亮的补全项,替换已输入的前缀。 |
| Escape | — | 关闭补全列表且不插入任何内容。 |
着色与补全
- 分词器逐字符单遍扫描,输出的是 CSS 类而不是颜色,因此配色与产品的设计令牌放在一起,并跟随主题。
- 关键字集合按语言划分:JavaScript、Python 和 C++ 各有自己的一套。
- 补全列表提供两种语言共用的计算辅助函数 —— sma、ema、wilder、stdev、highest、lowest、rsi 和 atr —— 以及所声明语言的输出构建器。
- JavaScript 的输出构建器是 line、histogram、markers、levels、table 和 panel。Python 除同样的六个之外还有 bands,以及单数形式的 marker() 和 level(),并且第一个参数是 time 而不是 bars。
- 每一条补全都从实现它的代码中转录而来,绝不凭记忆书写:一条错误的补全会教给你一个并不存在的 API。
局限与陷阱
- 滚动会有意关闭补全列表 —— 否则一个绝对定位的列表最后会指向另一行代码。
- 没有折叠、没有多光标、也没有语言服务器:这是一个按设计做小的编辑器,不给打包体积增加任何负担。
- 着色层和 textarea 必须使用相同的排版度量。如果你在自定义主题中覆盖了字体或间距,颜色可能与输入的文字错位。
相关页面
其他语言版本
常见问题
- 为什么一个脚本里补全的是 of.*,另一个里是 lib.*?
- 列表跟随脚本所声明的语言。JavaScript 脚本通过 lib 构建输出,Python 脚本通过 of 构建,同时提供两者等于在你正在写的文件里教一半并不存在的 API。
- 我能用四个空格缩进吗?
- 你可以自己敲,但 Tab 插入的是两个空格,示例脚本和助手产出的也是两个空格。在同一个 Python 文件里混用两种缩进,是缩进错误最常见的来源。
- 编辑器会在我输入时校验代码吗?
- 不会。校验发生在运行时:运行会报告出错的行,随后那一行会在行号栏中高亮。