sublime 插件开发

sublime text用来做开发真的非常棒,这种高度可定制的文本编辑器太吸引人,而强大的 packagecontrol 已经可以解决我们绝大部分需求,但作为一名爱折腾的程序员,必须要自己的撸一把,造一回轮子玩玩,于是……

项目结构

....Default (Linux).sublime-keymap
....Default (OSX).sublime-keymap
....Default (Windows).sublime-keymap
....GenerateFolderOfString.py
....GenerateFolderOfString.sublime-settings
....Main.sublime-menu

基本上已经涵盖绝大部分功能所需文件。*.sublime-keymap 快捷键、*.py 核心文件、*.sublime-settings 配置文件、*.sublime-menu 菜单项配置文件。

*.py

可以通过 toolsNew Plugin... 来生成一个简单所必须的 Python 代码模块。

import sublime, sublime_plugin

class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.insert(edit, 0, "Hello, World!")

然后我们将文件保存至 C:\Users\asdf\AppData\Roaming\Sublime Text 3\Packages\DemoPlugin,至于名称无所谓这里用 DemoPlugin.py;View – Show Console,运行:view.run_command('example'),就会在当前的文件里插入 Hello, World!。

注意这里运行命令是 example,即插件名,这和 class ExampleCommand(sublime_plugin.TextCommand):ExampleCommand 所对应,只不过去掉 Command,并且用下划线符号命名替换驼峰式命名。假如我们用 GenerateFolderOfStringCommand 得到的命令必须是 view.run_command("generate_folder_of_string")

Command 类型

sublime text 有三种不同 Command 类型,分别:

  • Text Commands:通过 View 对象访问被选定文件或缓存区。
  • Window Commands:通过 Window 对象,可引用当前窗口。
  • Application Commands:没有引用任何特定的窗口,文件或者缓存区,很少使用。

同一个插件里面可以同时使用不同 Command 类型。

比如:

import sublime, sublime_plugin

class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.insert(edit, 0, "Hello, World!")

class WinExampleCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.show_input_panel(
            "请输入要查询的文本",
            "",
            self.on_text,
            None,
            None)
        pass

Application Commands 并不是很了解,而对于另外两种其实也是带着包含关系,即 Window Commands 通常是运用在菜单中对应的命令,可以访问当前所有打开文件的 View 对象;相反 Text Commands 只允许对当前激活状态下文件的 View 对象。而 View 对象才是我们核心的对象,因为我们需要用它来给文件插入文本、获取选中的文本并给予加工等等。

所有这一切我们都可以使用 Python 语言来做任何你想做的事,包括访问远程文件。当然这可能会涉及到一些性能问题,但你不需要担心,因为你可以使用线程来解决这些问题。详细可参考后面的文档,由于我对 Python 语言了解只停留粗浅部分,所以具体自行发挥。

*.sublime-keymap

在IDE里面应该说有句谚语:能用快捷键决不用鼠标,而 sublime text 有个其它 IDE 所不具备的功能就是 Command Palette... 命令面板,要知道我们永远不可能记住所有快捷键,但我们可以记得一些单词,按 Ctrl+Shift+P 可以快速打开命令面板,我们可以搜索出需要执行的一切命令,而每个条目的后面也会有相应的快捷键提醒。

而这些快捷键就是通过 *.sublime-keymap 设置,内容:

[
    {
        "keys": ["ctrl+alt+g,ctrl+t"],
        "command": "do_generate_folder_of_string"
    }
]

以上相当于同时按下 ctrl+alt+g,ctrl+t 执行 do_generate_folder_of_string 命令。

而针对不同系统需要创建不同文件,格式按:Default (platform).sublime-keymap 来命令,其中有效的platform为:Windows, Linux, OSX,可以参考项目结构规则。

*.sublime-settings

很多插件我们可以修改一些配置信息以达到个性化,比如打开Package Control的debug功能,只需要:Preferences-Package Settings-Package Control-Setting Default(或Setting User),来开启 "debug": true

配置文件是一个标准的json文件,比如:

{
    // 前缀字符
    "prefix_character": "....",
    // 开始等级
    "start_level": 1
}

配置文件是可以出现在不同文件中,所有配置文件中定义的相同名称都会被合并,当然这会有一个合并的顺序规则,比如Windows下:

Packages/Default/Preferences.sublime-settings
Packages/Default/Preferences (Windows).sublime-settings
Packages/User/Preferences.sublime-settings
Packages/Python/Python.sublime-settings
Packages/User/Python.sublime-settings

其实有点晕,而我有一种比较不会出错办法,即在插件包下创建一个 demo.sublime-settings,然后通过 *.sublime-menu 配置一个用于访问该配置文件的路径,这样就确保我们访问的配置文件只有一个。

读取配置信息

settings = sublime.load_settings('GenerateFolderOfString.sublime-settings')
# 读取start_level
settings.get('start_level')
# 设置start_level为5
settings.set('start_level', 5)

*.sublime-menu

随便我们一味着推荐用快捷键,但设置相应的菜单也是必须的,就拿上面的配置信息文件,我们需要给他一个配置入口,否则还得去找包文件,好不蛋疼。

(type).sublime-menu,其中 type 有效类型包括:

  • Main:菜单栏。
  • Context:右击菜单栏。

首先 Main.sublime-menu 创建一个入口:

[{  
    "id": "preferences", "children":[{
        "id": "package-settings",
        "children": [{
            "caption": "Generate Folder Of String",
            "children": [{
                "caption": "Settings",
                "command": "generate_folder_of_string_set_settings"
            }]
        }]
    }]
}] 

其次创建 generate_folder_of_string_set_settings 命令:

class GenerateFolderOfStringSetSettingsCommand(sublime_plugin.TextCommand):
  def run(self, edit):
    self.view.window().open_file(PLUGIN_FOLDER + "/" + SETTINGS_FILE)

这样我们可以通过 Preferences-Package Settings-Generate Folder Of String-Settings 打开配置文件。

总结

其实 sublime text 开发插件非常简单,只要懂得一点 Python 语言,大可创建一些非常有意思的插件。而以上可能是插件有主要部分,但典型的插件所需要资源可以包括:

  • 构建系统(.sublime-build
  • 快捷键绑定(.sublime-keymap
  • 宏处理(.sublime-macro
  • 菜单(.sublime-menu
  • py(.py
  • 配置文件(.sublime-settings
  • 代码片断(.sublime-snippet
  • 语法定义(.tmLanguage
  • 元数据(.tmPreferences
  • 主题(.sublime-theme

怎么样,非常丰富,所以 sublime text 是一个可以创建世界的编辑器,难怪那么多人喜欢它。

参考文档

Sublime Text 一点小总结

写前端代码时,以前一直依赖VS,虽说智能提示很给力,但太大个头,修改一点东西非要非要那个大怪物,Editplus虽然也是不错的选择,可智能提示很有限制、编写效率极低。而在前端代码编写中Sublime Text估计是我遇到最好的编辑器了。

插件

我所喜爱估计只有一个下载Emmet插件,这个习惯来源于Editplus。不过在Sublime Text大可抛弃。

快捷键

键名 说明
Ctrl+W、Ctrl+Shift+W 关闭当前、所有页签
Ctrl+[、Ctrl+] 增减缩进
Ctrl+Shift+[、Ctrl+Shift+] 折叠选中的行,对于大文件很适用。
Ctrl+/、Ctrl+Shift+/  注释/取消注释,所有语言通用,霸气。
 F11、Shift+F11  全屏、当前文件全屏,清静。
 Ctrl+D  选中当前单词,我的最爱。
 Ctrl+Shift+D  复制当前行,也是我的最爱。

可查阅更多官网提供的快捷键代码:http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_win.html

代码复用

Sublime Text默认创建一个文档是Text类型且为空,那么需要用到代码复用。通过:Tools -> New Snippet,以下是我一个HTML5的XML文档:

<snippet>  
<content><![CDATA[ 
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8" /> 
<title>${1}</title> 
<script src="http://g.tbcdn.cn/kissy/k/1.4.2/seed.js"></script> 
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script> 
</head> 
<body> 
</body> 
</html>]]></content>  
<!-- 输入该字符串后tab就是在光标插入content中的内容 -->  
<tabTrigger>html5</tabTrigger>  
<!-- 文件类型,列表可参考:http://blog.csdn.net/pxzy/article/details/8490058 -->  
<scope>text.html.basic</scope>  
</snippet>

保存路径一般是默认的位置即可(例:C:\Users\cipchk\AppData\Roaming\Sublime Text 3\Packages\User),后缀必须是:.sublime-snippet。

重启后方可输入:html5+tab。

2.0.2 windows版本注册码一份:

----- BEGIN LICENSE -----
Andrew Weber
Single User License
EA7E-855605
813A03DD 5E4AD9E6 6C0EEB94 BC99798F
942194A6 02396E98 E62C9979 4BB979FE
91424C9D A45400BF F6747D88 2FB88078
90F5CC94 1CDC92DC 8457107A F151657B
1D22E383 A997F016 42397640 33F41CFC
E1D0AE85 A0BBD039 0E9C8D55 E1B89D5D
5CDB7036 E56DE1C0 EFCC0840 650CD3A6
B98FC99C 8FAC73EE D2B95564 DF450523
------ END LICENSE ------

附录

1.Google closure 本地压缩JavaScript,不用翻墙。
2.Build Systems 文档。(http://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/build_systems.html)

以上。

© 2017 卡片机色彩 沪ICP备13032872号-3

Theme by cipchk

to top