代码编辑器:按键、行号栏、语法着色与补全

脚本页面的编辑器是一个透明的 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 文件里混用两种缩进,是缩进错误最常见的来源。
编辑器会在我输入时校验代码吗?
不会。校验发生在运行时:运行会报告出错的行,随后那一行会在行号栏中高亮。