0

0

Sublime怎么入门插件开发_Sublime如何编写第一个插件代码【攻略】

尼克

尼克

发布时间:2026-03-19 13:26:03

|

122人浏览过

|

来源于php中文网

原创

Sublime Text插件必须用Python编写,ST3基于Python 3.3、ST4基于Python 3.8,不支持第三方包和部分新语法;插件需继承sublime_plugin类并遵循命名规则才能在Command Palette中显示。

sublime怎么入门插件开发_sublime如何编写第一个插件代码【攻略】

Sublime Text 插件用 Python 写,不是 JS 或 TypeScript

很多人以为 Sublime 插件像 VS Code 那样用 JavaScript 开发,其实它底层是 Python 3.8(Sublime Text 4)运行时,所有插件必须写成 .py 文件,放在 Packages/User/ 或独立包目录下。不支持 npmimport 外部 PyPI 包,也不能用 async/await(除非走 sublime.set_timeout_async)。

常见错误现象:ImportError: No module named 'requests'、插件保存后没反应、控制台报 invalid syntax(用了 f-string 但 ST3 是 Python 3.3)。

  • Sublime Text 3 对应 Python 3.3,不支持 yield frompathlib.Path 等新语法
  • Sublime Text 4 升级到 Python 3.8,支持 := 海象运算符,但依然不能装第三方包
  • 插件入口必须继承 sublime_plugin.TextCommandsublime_plugin.EventListener,名字要带 Command 后缀才能被识别

怎么让一个最简插件在 Command Palette 里出现

插件文件名决定命令 ID,比如 toggle_comment.py → 命令 ID 是 toggle_comment;类名决定显示名,ToggleCommentCommand → 显示为 “Toggle Comment”。不满足这个命名规则,ctrl+shift+p 里根本搜不到。

实操建议:

  • 新建 Packages/User/hello_world.py
  • 内容只写三行:import sublime_plugin,然后定义 class HelloWorldCommand(sublime_plugin.TextCommand):,再写一个 def run(self, edit): self.view.insert(edit, 0, "Hello")
  • 重启 Sublime 或按 ctrl+shift+pDeveloper: Reload Plugin,再打开 Command Palette 搜 “hello”,就能看到 “Hello World”

edit 对象不能跨函数传,也不能缓存

edit 是 Sublime 的编辑上下文令牌,只在 run() 方法内有效,且一次 run() 只能用一次。拿它当全局变量、塞进 threading.Thread、或者在回调里重用,都会触发 RuntimeError: Invalid edit object

靠岸学术
靠岸学术

一款集翻译,阅读,文献管理于一体的英文文献阅读器

下载

典型错误场景:想异步读文件再插入内容,结果在 set_timeout_async 回调里直接用上一个 edit

  • 正确做法:把需要插入的文本先算好,再用 sublime.set_timeout(lambda: self.view.insert(edit, pt, text), 0) —— 但注意,这仍然错,因为 edit 已失效
  • 真正可行的是:改用 self.view.run_command('insert', {'characters': text}),或重新获取 edit = self.view.begin_edit()(仅限 ST3,ST4 不允许)
  • ST4 推荐方案:用 view.run_command('insert', ...) 或自定义一个新 command 来封装插入逻辑

监听文件保存但不想重复触发

on_post_save 是最常用事件,但它在每次保存都触发,包括自动保存、格式化后保存、甚至 Git 插件覆盖写入。如果插件里做了耗时操作(比如调用外部 CLI),很容易卡住 UI 或重复执行。

关键判断点在于区分“用户主动保存”和“后台静默保存”:

  • 检查 view.is_dirty() —— 保存后通常为 False,但不可靠,因为有些插件会立刻改写
  • 更稳的方式:记录上次保存时间戳 + 文件大小,两次变化都一致才跳过
  • 或者加开关:用 view.settings().set('skip_on_post_save', True) 在格式化前设,保存后清,配合 on_post_save_async 避免阻塞主线程

别忽略 _async 版本事件 —— 它们在子线程跑,不能直接调用 view.insert,但适合做 IO 或计算。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

50

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

202

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

122

2026.03.13

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1111

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1572

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

170

2025.10.17

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

103

2025.09.18

Go Web框架Gin接口开发与中间件设计实践
Go Web框架Gin接口开发与中间件设计实践

本专题围绕 Go 在 Web 后端开发中的主流框架 Gin 展开,系统讲解高性能接口开发与中间件机制设计。内容涵盖路由分组、请求绑定、参数校验、统一响应封装、日志与鉴权中间件实现,以及接口限流与异常处理策略。通过实战项目案例,帮助开发者构建结构清晰、性能优良的 Go Web 服务体系,提升接口开发效率与系统可维护性。

7

2026.03.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号