Sublime插件开发API手册

Sublime插件开发API手册[中文版]

本文为Sublime插件API手册的中文翻译版本,英文版地址:http://www.sublimetext.com/docs/2/api_reference.html

翻译和理解水平有限,有不当的地方欢迎指正。部分方法描述里添加了些个人的注解,希望有助于理解方法的使用。

后期如果有更多实践经验的话再回过头来修正可能解释有误的地方,或加些注解。

 

Sublime插件开发API手册

插件示例

在sublime的插件目录下Packages/Default里有几个预置的插件,可以作为参考看看:

  • Packages/Default/delete_word.py 删除光标左边或者右边的一个单词

  • Packages/Default/duplicate_line.py 复制当前行

  • Packages/Default/goto_line.py 提示用户输入,然后更新选择点

  • Packages/Default/font.py 展示了如何使用settings

  • Packages/Default/mark.py 用了add_regions() 往行头槽里插入图标

  • Packages/Default/trim_trailing_whitespace.py 保存前修改缓冲区

sublime模块

方法返回值描述
set_timeout(callback, delay)None延时调用 (毫秒). 回调的顺序会按添加的顺序依次执行. 多线程调用setTimeout也是安全的.
status_message(string)None设置状态栏消息.
error_message(string)None显示一个error对话框.
message_dialog(string)None显示一个message对话框.
ok_cancel_dialog(string, <ok_button>)bool显示一个"确认/取消"的对话框。如果有"确认"按钮,点击确认返回True.
load_settings(base_name)Settings载入一个配置,name参数要包括文件名和后缀而不是路径。会根据base name搜索插件包,结果返回setting对象。后续调用load_settings载入同一个base_name将返回同一个对象,而不会重新从磁盘读取文件。
save_settings(base_name)None保存配置,写入磁盘。
windows()[Window]返回打开窗口的列表。
active_window()Window返回最近使用的一个窗口。
packages_path()String返回packages目录的路径.
installed_packages_path()String返回所有用户 *.sublime-package文件的目录。
get_clipboard()String返回剪贴板的内容。
set_clipboard(string)None设置剪贴板的内容。
score_selector(scope, selector)Int把选择器设置成对应的区域,返回区域值。 0标示没有选区,大于0表示有一个选区。 不同的选择器可以通过scope来比较: scope值越高说明这段选区越适合这个选择器.
run_command(string, <args>)None运行ApplicationCommand,string是command名字,args是传给command的参数。
log_commands(flag)None控制命令的日志。如果启用,所有command从快捷键,菜单中执行都回记录到控制台。
log_input(flag)None控制日志输出。如果启用,所有按键都回被记录到控制台。
version()String返回版本号。
platform()String返回运行的平台。"osx", "linux" 或者 "windows"。
arch()String返回CPU架构。64/32位,"x32" or "x64"。

sublime.View类

view代表了text buffer(缓冲区)中的视图。注意,多个view可以引用同一段buffer, 但是它们有自己唯一的选区和几何形状。

方法返回值描述
id()int返回当前view的唯一标识ID。
buffer_id()int返回当前view下buffer标识的唯一ID。
file_name()String返回buffer关联的完整文件名,如果没有缓冲区存储在磁盘的话返回None。(buffer指缓冲区,下同)
name()String返回buffer指定的名称。
set_name(name)None设置buffer的名称。
is_loading()bool如果buffer还在从磁盘载入返回ture,表示还未准备好给用户使用。
is_dirty()bool返回是否有未保存到buffer的修改。
is_read_only()bool返回true,如果buffer不允许修改。
set_read_only(value)None设置缓冲区不可修改。
is_scratch()bool如果缓冲区是临时缓冲区返回True。临时缓冲区不会报告为dirty。
set_scratch(value)None设置buffer为临时缓冲区。
settings()Settings返回view的settings对象。settings对象对当前view是私有的。
window()Window返回持有当前view的window。
run_command(string, <args>)None运行指定的TextCommand,args传入参数。
size()int返回文件中字符总数量。
substr(region)String返回region选区内容字符串。
substr(point)String返回point点的右侧字符。
begin_edit(<command>, <args>)Edit创建一个edit对象,可以划定一组撤销操作,需要对应到 end_edit()标记。
end_edit(edit)Edit标记完成一个edit对象。(译者注:begin_edit到end_edit之间的操作可以当成一个命令分组,可以用于撤销操作。)
insert(edit, point, string)int在缓冲区指定的点插入一个字符串。返回插入的字符数量;如果插入当前缓冲区的tabs返回有点区别。
erase(edit, region)None从缓冲区移除region选区内容。
replace(edit, region, string)None把region选区内容替换成指定的字符串。
sel()RegionSet返回selection(选择)的引用。
line(point)Region返回point点所在的行。
line(region)Region返回region区域行头到行尾的一份拷贝,从行头到行尾可能跨了多行(译者注:换行显示的时候,但是中间没有换行符)。
full_line(point)Region同 line(),但是尾部有换行符的时候也包括了换行符。
full_line(region)Region同 line(), 但是尾部有换行符的时候也包括了换行符
lines(region)[Region]返回region区域的所有行列表 (经过排序) 。
split_by_newlines(region)[Region]用换行符把整个region分割成多个region区域,返回region列表。
word(point)Region返回包含point点的单词。
word(region)Region返回包含region区域的单词区域(从第一个单词的开头,到最后一个单词的末尾)。有可能会跨多个单词。
find(pattern, fromPosition, <flags>)Region返回匹配的第一个区域,从指定的点位置开始,没有匹配结果返回None。flags参数可以是 sublime.LITERAL, sublime.IGNORECASE, 或者2个"或运算"。
find_all(pattern, <flags>, <format>, <extractions>)[Region]返回所有(无重叠)的匹配区域结果。flags参数同上, 如果有format参数,所有匹配结果都会按指定格式被格式化并添加到extractions列表里。
rowcol(point)(int, int)计算指定点从0开始的行位置和列位置。
text_point(row, col)int计算指定行,列位置字符的偏移量。"col"("列")是从一行的行头开始的字符数量。
set_syntax_file(syntax_file)None指定语法文件。view. syntax_file文件应该是按行来定义语法名称,基于Packages/Python/Python.tmLanguage。接受当前语法可以使用view.settings().get('syntax')。
extract_scope(point)Region返回指定点位置字符语法名称的范围。
scope_name(point)String返回指定点位置字符的语法名称。
score_selector(point, selector)Int返回包含指定点位置的选择器(selector)的数量(score)。score为0表示没有匹配, 大于0表示一个匹配,不同的选择器可以通过scope来比较: scope值越高说明这段选区越适合这个选择器。
find_by_selector(selector)[Regions]返回符合指定选择器的所有区域,结果为一个列表。
show(point, <show_surrounds>)None滚动view到指定的点。
show(region, <show_surrounds>)None滚动view到指定的区域。
show(region_set, <show_surrounds>)None滚动view到可以显示指定的区域集。
show_at_center(point)None滚动到view的中心位置。
show_at_center(region)None滚动view到region区域的中心位置。
visible_region()Region返回当前view可看见的区域。
viewport_position()Vector返回可视区域在布局坐标中的偏移量。
set_viewport_position(vector, <animate<)None把可视区域滚动到指定位置。
viewport_extent()vector返回可视区域宽高。
layout_extent()vector返回文档layout的宽高。(译者注:layout区域相当于编辑器里写的代码的范围,到代码字符的最后一行和最后一列区域,下同)
text_to_layout(point)vector把文本位置转换成layout位置。
layout_to_text(vector)pointlayout位置转换成文本位置。
line_height()real返回layout的行高。
em_width()real范围layout的字符宽度。
add_regions(key, [regions], scope, <icon>, <flags>)None往view里添加这一组区域(region)。如果region已经存在,会被覆盖。 scope参数决定region绘制的颜色,必须是scope名称,比如 "comment" 或者 "string"。如果没有scope参数,region不会被写入。

icon参数,如果有的话,每个region前面会绘制icon标记。图标的颜色跟scope参数有关。 icon名称可以是:dotcircle,、bookmark,、cross。

可选参数flags可以是下列的组合:

  • sublime.DRAW_EMPTY. 用竖线绘制空白区域。默认根本不绘制。

  • sublime.HIDE_ON_MINIMAP. 在minimap不显示这些区域。

  • sublime.DRAW_EMPTY_AS_OVERWRITE. 用横线绘制空白区域。

  • sublime.DRAW_OUTLINED. 绘制区域轮廓而不是填充。

  • sublime.PERSISTENT. 保存区域到会话。

  • sublime.HIDDEN. 不绘制区域。

get_regions(key)[regions]返回指定key的region。
erase_regions(key)None移除指定key的region
set_status(key, value)None往view里添加状态。value值会被现实在状态栏, 以key排序,每个状态值逗号分隔。value为空字符串将清空改key对应的状态值。
get_status(key)String返回key对应的状态值。
erase_status(key)None清空key对一个的状态值。
command_history(index, <modifying_only>)(String,Dict,int)返回undo/redo栈中保存的,命令名称,参数和重复次数。

Index 为0 对应最近的一次command, -1对应倒数第二次的命令,一次类推。index为正数代表redo 栈中德命令。如果undo / redo历史记录不足够多返回(None, None, 0) 。

如果modifying_only为True (默认为False) 将只会返回修改了缓冲区的输入。

fold([regions])bool折叠指定区域,如果已经折叠返回False。
fold(region)bool同上。
unfold(region)[regions]展开对应区域的所有文本,返回展开的区域。
unfold([regions])[regions]同上。
encoding()String返回当前文件编码。
set_encoding(encoding)None设置文件编码,文件下一次保存时生效。
line_endings()String返回当前文件使用的换行符模式。(译者注:windows系统下回返回"Windows")
set_line_endings(line_endings)None设置文件的换行符模式,下一次保存时生效。

sublime.RegionSet类

维护一组区域,确保区域间没有重叠。区域的按保存的顺序持有。

方法返回值描述
clear()None移除所有区域。
add(region)None添加指定区域。如果已经存在与该region有交集的区域,会被合并。
add_all(region_set)None添加region_set里的所有区域。
subtract(region)None从所有region中移除指定区域。
contains(region)bool如果所有区域中包含指定的region返回true。

sublime.Region类

代表了buffer中的一块区域。空白区域可以相等(==)。

构造器描述
Region(a, b)创建一块区域。
属性类型描述
aintregion区域的第一个结束位置。(译者注:结束位置是相对于整个文档的第一个开始字符而言。)
bintregion区域的第二个结束位置。b可能会比a小,这样的话就相当于一个反转的区域。
方法返回值描述
begin()int返回a,b中较小的值。
end()int返回a,b中较大的值。
size()int返回区域的字符总数。始终 >= 0。
empty()bool如果begin()==end(),返回True。
cover(region)Region返回一个跨越当前region和指定region的一个新的区域。
intersection(region)Region返回当前region和指定region的交集。
intersects(region)bool如果this==region或者当前region和指定region都包含了一个或多个同样的位置。(译者注:其实就是判断指定的region和当前的region是否有交集)
contains(region)bool如果指定的region是当前region的一个子集返回True。
contains(point)bool如果begin() <= point <= end()返回True。(译者注:point点在当前区域范围内)。

sublime.Edit类

Edit对象没有方法,它是用于对buffer的修改进行分组。

可以通过view.begin_edit()来创建。每一个begion_edit()调用都要对应一个view.end_edit()调用。通常会写在try ... finally块内。

方法返回值描述
(无方法)

sublime.Window类

方法返回值描述
id()int返回window的ID.
new_file()View创建一个文件。返回一个空的view,view的is_loaded方法返回True。
open_file(file_name, <flags>)View打开指定文件,并返回对应的view。如果文件已经被打开,会切换到当前当前视图。注意,文件载入是异步的,view的is_loading() 方法返回False前不能对文件进行操作。

可选参数flags可以是下列的组合:

  • sublime.ENCODED_POSITION. 指定通过查找文件名后缀:row 或者 :row:col来定位打开文件后定位的位置。

  • sublime.TRANSIENT. 只作预览打开文件:在修改前不会有文件tab分配。

active_view()View返回当前正在编辑的view。
active_view_in_group(group)View返回指定组里正在编辑的view。
views()[View]返回window中所有打开的view。
views_in_group(group)[View]返回指定组里的所有view。
num_groups()int返回window中打开的view分组的总数。
active_group()int返回当前选中组的索引。
focus_group(group)None激活指定分组。
focus_view(view)None切换到指定view。
get_view_index(view)(group, index)返回view的分组,和在分组里的索引。如果没有返回-1。
set_view_index(view, group, index)None把view移动到指定分组和指定的索引位置。
folders()[String]返回当前打开的文件夹列表。(译者注:sublime左侧显示的folders列表的每个跟目录)。
run_command(string, <args>)None运行WindowCommand,传入指定参数。
show_quick_panel(items, on_done, <flags>)None显示一个选择列表中某个选项的快速面板。 on_done会被调用一次,接受选中项的索引为参数。如果快速面板被取消,on_done调用的时候接收的参数为-1。

Items 可以是字符串数组,或者一个字符串数组的数组(二维字符串数组)。如果是后者,快速面板里的每个条目会显示成多行。

Flags 只能有一个值: sublime.MONOSPACE_FONT

show_input_panel(caption, initial_text, on_done, on_change, on_cancel)View显示一个输入面板,收集用户的一行输入。caption是输入框的标题,on_done 和 on_change如果不为空的话需要是一个接受一个字符串的函。on_cancel 是一个无参数的函数。
get_output_panel(name)View返回view对应的指定名称的输出面板,如果有必要会创建。output面板可以通过运行show_panel( window command)来显示,panel 的名称会加上 "output." 前缀。

sublime.Settings类

方法返回值描述
get(name)value返回指定名称的设置。
get(name, default)value返回指定名称的设置,如果没有定义该设置返回默认的。
set(name, value)None设置某个名称的配置,只能接受原类型,列表, lists,字典。
erase(name)None移除某个配置。如果是继承自父配置不会被删除。
has(name)bool判断当前配置类中是否存在某个配置或者父配置中是否存在。
add_on_change(key, on_change)None注册当前配置对象的change的回调。只要有一个配置发生变化都会被回调。.
clear_on_change(key)None移除指定的change回调。

sublime_plugin模块

方法返回值描述
(无方法)

sublime_plugin.EventListener类

注意,有许多事件是view下的buffer缓冲区触发的,而且这些方法只调用一次, view作为第一个参数。

方法返回值描述
on_new(view)None当创建一个新的buffer时触发。
on_clone(view)None当从一个已存在的view复制一份时触发。
on_load(view)None当文件载入完成时触发。
on_close(view)None当view被关闭时触发(注意,在同一buffer中可能还有其它view)。
on_pre_save(view)None在一个view保存前触发。
on_post_save(view)None在一个view保存后触发。
on_modified(view)Noneview被修改后触发。
on_selection_modified(view)Noneview里的选区变化时触发。
on_activated(view)None一个view被激活时触发。
on_deactivated(view)None一个view被隐藏时触发(被切换到后台)。
on_query_context(view, key, operator, operand, match_all)bool or None当使用给定的上下文key去触发一个key绑定时触发。如果插件知道如何处理上下文可以返回True 或者 False。如果上线问是未知的,应该返回None。

operator可取下列某个值:

  • sublime.OP_EQUAL. context等于operand

  • sublime.OP_NOT_EQUAL. context 不等于operand

  • sublime.OP_REGEX_MATCH. context匹配operand给定的正则

  • sublime.OP_NOT_REGEX_MATCH. context 不匹配operand给定的正则

  • sublime.OP_REGEX_CONTAINS. context包含可以匹配operand给定正则的子字符串

  • sublime.OP_NOT_REGEX_CONTAINS. context不包含可以匹配operand给定正则的子字符串

如果context涉及到选择(selections)应该使用match_all:是否每个选择都需要匹配(match_all = True), 还至少要一个选择匹配 (match_all = Fals)。

sublime_plugin.ApplicationCommand类

方法返回值描述
run(<args>)None当command运行时执行。
is_enabled(<args>)bool如果command在当前时间可运行返回True。 默认实现都返回Flase。
is_visible(<args>)bool如果command在当前可显示在菜单。默认实现都返回False。
description(<args>)String返回command的描述。在菜单中使用,如果没有标题的情况下。返回None获取默认描述。

sublime_plugin.WindowCommand类

WindowCommands 每个window只初始化一次。Window对象可以通过self.window来引用。

方法返回值描述
run(<args>)Nonecommand运行时调用。
is_enabled(<args>)bool如果command在当前时间可运行返回True。 默认实现都返回Flase。
is_visible(<args>)bool如果command在当前可显示在菜单。默认实现都返回False。
description(<args>)String返回command的描述。在菜单中使用,如果没有标题的情况下。返回None获取默认描述。

Class sublime_plugin.TextCommand

TextCommands每个view只初始化一次。可以通过self.view放访问当前view。

方法返回值描述
run(edit, <args>)Nonecommand运行时调用。
is_enabled(<args>)bool

如果command在当前时间可运行返回True。 默认实现都返回Flase。

is_visible(args)bool

如果command在当前可显示在菜单。默认实现都返回False。

description(args)String

返回command的描述。在菜单中使用,如果没有标题的情况下。返回None获取默认描述。


转载于:https://my.oschina.net/u/2306127/blog/367734

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值