Sublime Text 本身不原生支持意图式 API,但可通过插件封装实现:定义高层语义命令(如 mark_function_as_reviewed)、基于LSP的上下文感知、声明式配置(JSON/YAML规则)、intent-aware快捷键与动态命令面板入口,使用户专注“做什么”而非“怎么做”。

Sublime Text 本身不原生支持“基于意图的 API”(Intent-based API),它提供的是一套面向操作的插件接口(如 sublime_plugin、View.run_command() 等),开发者需明确指定“如何做”——比如调用哪个命令、在什么位置插入文本、如何遍历 region。但你可以通过封装和抽象,在插件层面构建出接近“声明‘什么’而非‘如何’”的体验。
用高层语义封装底层命令
意图的本质是隐藏实现细节,暴露业务语义。例如,用户想“标记当前函数为已审核”,不必关心光标在哪、怎么找函数边界、如何写注释——你可定义一个 intent 命令:
-
定义 intent 接口:如
mark_function_as_reviewed,它内部自动检测当前光标所在的函数范围(用view.find_by_selector("entity.name.function")或 AST 解析) - 自动上下文感知:不依赖用户预选区域或手动定位,而是基于语法作用域、符号表或轻量解析推断“当前函数”“当前测试块”“配置节”等概念
- 幂等与状态管理:重复执行同一 intent 不产生副作用(如已标记则跳过,或切换状态),让用户放心“说一次”,无需担心执行逻辑
借助 declarative 配置降低意图表达门槛
让用户用 JSON/YAML 声明意图,比写 Python 插件更贴近“声明什么”。例如在 IntentRules.sublime-settings 中写:
{
"intent": "add_api_logging",
"when": { "selector": "source.python - string - comment", "has_symbol": "def " },
"apply": {
"before": ["import logging", "logger = logging.getLogger(__name__)"],
"inside": ["logger.debug('entering %s', __name__)"]
}
}你的插件监听保存/快捷键,匹配规则并自动注入——用户只描述“我要给函数加日志”,不写一行执行代码。
结合 LSP 和语义分析提升意图准确性
纯文本正则容易误判。接入 LSP(如 pylsp、rust-analyzer)后,你能真正理解“当前光标指向的是哪个函数声明”“该变量是否可变”“这个 if 块是否属于错误处理路径”。这样,“标记错误处理分支为已覆盖”这类意图才能被可靠执行,而不是靠行号或关键词硬匹配。
提供 intent-aware 快捷键与命令面板入口
把 intent 命令注册进 Command Palette,命名直击目的:
• “Intent: Wrap Selection in Try-Except”
• “Intent: Promote Local to Class Field”
• “Intent: Extract Constant from This Number”
用户无需记住命令名或参数结构,看到名字就知道“这正是我想要的”,点即生效。配合 is_enabled() 动态控制可见性(如仅当光标在数字字面量上才显示“Extract Constant”),进一步强化意图感。
不复杂但容易忽略:Intent-based 不是推翻 Sublime 的 API 模型,而是站在它之上做语义升维——把“怎么干”的体力活收到底层,把“想干嘛”的表达权还给用户。










