Skip to main content

基础概念

内置对象

主要类:

  • window sublime的窗口
  • view 表示一个文本缓冲的视图,可以认为是打开的一个 tab
  • edit 继承自 sublime_plugin.TextCommand 的命令, Edit 为第一个参数。
  • region 表示缓冲区的一个区域或者叫选区
  • selection 表示已经选择的区域
  • settings :配置对象,每一个view 都有一个独立的配置对象
  • Line:行

基础类型:

  • location:(str, str, (int, int))
  • Point :代表缓冲区的一个位置
  • value :任何 Python 数据类型boolintfloatstrlistdict
  • dipfloat 类型
  • vector tuple(int, int) x,y 的坐标类型
  • CommandInputHandler TextInputHandlerListInputHandler 的子类。

[常用 API](#常用 API[)

Window

获取途径

  • sublime.windows() -> list[sublime.Window]
  • sublime.active_window() -> sublime.Window
  • sublime_plugin.window() -> sublime.Window

View

获取途径

所有对文本内容的操作,插入,删除,粘贴等操作都通过能self.view调用对应的api来完成。

view.name()               # 获取当前视图名
view.set_name(str) # 更改当前视图名
view.id() # 当前视图的id
view.buffer_id() # 当前缓冲区的id
view.sel() # 返回当前所有选择区,如果没有,则返回鼠标所在位置(turple)
view.substr(region) # 将缓冲区的内容转换成可处理字符
view.line(region) # 将光标当前行存入一个新的缓存区 返回一个缓存区
view.find_all() # 全文搜索
view.substr() # 转换成字符串
view.file_name() # 获取当前文件的名字

view.settings().get('default_line_ending') # 获取行结尾的符号,对应 \n \r \n\r
view.insert(edit,point,content) # 对象,坐标,要插入的内容
view.is_loading() #
view.is_read_only() #
view.is_dirty() # 判断是否已修改
view.size() # 返回当前所有字符数量
View 常用方法说明
name():str# 获取当前视图名
set_name(str)# 更改当前视图名

Edit

打开一个 view 以后必须要指定 Edit 才能真正的 insert 字符。需要 view.begin_edit 开始使用编辑区,使用完要 end_edit 。

根据 sublime 3 API 的说法,只能继承,不能被创建。

获取途径

  • 继承自 sublime_plugin.TextCommand

Region

表示缓冲区的一个区域。有两个init类型的属性a和b。Region.a表示区域开始的点,Region.b表示区域结束的点。

view 的 find_all 等可以匹配一系列的 region 出来

获取途径

  • region = sublme.region(startPoint, endPoint)
region.begin() # 缓冲区的开始位置

.end() # 缓冲区的结束位置

Settings

表示选择的区域。

函数sublime.View.sel()返回的类型就是list[Selection],表示目前选中的所有区域。

Selection.add(Region)方法可以添加选择区域。

获取途径

  • settings = view.settings()
settings.get(key:str)

settings.encode_value(value,<pretty>)

示例

# 获取当前缩进数
tab_size = settings.get("tab_size")

Point

int类型,代表缓冲区的一个位置。可以通过sublime.View.rowcol(point)将point转化为行列信息(int,int)。或通过sublime.View.text_point(row,col)将行列信息转化为point。

获取途径

  • point = view.sel()[0].a|b
  • pointA|pointB = sublime.Region(0, view.size()).a|b

Line

这里看到 line 返回的是鼠标所在行的起始字符数,从文件头开始,算 UTF8 字符,一个中文也是一个字符,无论光标在何处,都是这样的结构(行开始字符数, 行结束字符)

full_line(point)->region
full_line(region)->region

line(point)->->region
line(region)->region
lines(region)->[region]

获取途径

  • point = view.sel()[0].a|b
  • pointA|pointB = sublime.Region(0, view.size()).a|b

常用 API

sublime.Region()            # 代表一个缓冲区对象
sublime.version() # 显示当前sublime的版本
sublime.platform() # 显示当前系统
sublime.get_clipboard() # 获取剪贴板的内容
sublime.set_clipboard(str) # 将str放到剪贴板

目录结构

Data

  • Windows: %APPDATA%Sublime Text 3
  • OS X: ~/Library/Application Support/Sublime Text 3
  • Linux: ~/.config/sublime-text-3

删除这个目录之前使用的插件和自定义的一些配置都会被同时删除,再次打开ST3,这个目录会被自动创建

如果在软件根目录创建 data 目录,那么sublimeText将不会再读取上述目录,转而将本地data作为唯一数据目录,需要制作绿色版或者便携版的话,这是最好的方法,没有之一

Packages

Data目录下的Packages目录是一个非常重要的目录,关于编程和标记语言的所有支持都保存在这里。

通过Sublime Text -> Preferences -> Browse Packages…可以打开该目录。

User

User目录在Packages目录下,用于保存自定义plugins,snippets, macros(宏)。插件配置等都存在这个目录下。

插件更新时,这个目录里的内容不会被修改。

更换环境时,将此目录通过git或者U盘保存作迁移即可保留大部分功能和配置到新环境

加载顺序

  1. Installed Pacages 目录
  2. Packages 目录
  3. Packages/User 目录

根据约定,不会加载更深层次嵌套的文件,也就是说如果把 untitled.py 放在packages目录下会生效,但是如果放在User/new/下就不会生效,仅加载跟目录下的*.py.sublme-*文件

延时任务

1.sublime.set_timeout_async()

插件继承类的主要作用

类名
sublime_plugin.EventListener
sublime_plugin.ViewEventListener

生命周期

插件加载完成

插件首次被加载,回执内部自带函数: plugin_loaded()

  • plugin_loaded()
import sublime
def plugin_loaded():
passs
# 此时可以使用的api比较有限
vsublime.version()
sublime.platform()

生命周期的API主要集中在下面两个类:

通过基础并重写该类的方法,可以让sublimeText在对应的时机执行对应的动作

  • sublime_plugin.EventListener(整个sublime范围的事件)
  • sublime_plugin.ViewEventListener (仅控制当前视图区内的事件)
# 监听整个软件
class ExecEventListener(sublime_plugin.EventListener):
def on_*(self,):
.../

# 仅监听当前视图区
class ExecEventListener(sublime_plugin.ViewEventListener):
def on_*(self,):
.../
  • 加载文件时
def on_load(self, view):
def on_load_async(self, view):
  • 文件保存
# 保存前
def on_pre_save(self, view):
def on_pre_save_async(self, view):

# 保存后
def on_post_save(self, view):
def on_post_save_async(self, view):
  • 文件发生变化时
def on_modified(self, view):
def on_modified_async(self, view):
  • 文件关闭时
def on_pre_close(self, view):
def on_close(self, view):

配置文件 .sublime-*

不清晰

CommandInputHandler - TextInputHandler/ ListInputHandler 的子类