基础概念
内置对象
主要类:
- window sublime的窗口
- view 表示一个文本缓冲的视图,可以认为是打开的一个 tab
- edit 继承自 sublime_plugin.TextCommand 的命令, Edit 为第一个参数。
- region 表示缓冲区的一个区域或者叫选区
- selection 表示已经选择的区域
- settings :配置对象,每一个view 都有一个独立的配置对象
- Line:行
基础类型:
- location:(str, str, (int, int))
- Point :代表缓冲区的一个位置
- value :任何 Python 数据类型bool、int、float、str、list或dict。
- dip:
float
类型 - vector tuple(int, int) x,y 的坐标类型
- CommandInputHandler
TextInputHandler
或ListInputHandler
的子类。
[常用 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盘保存作迁移即可保留大部分功能和配置到新环境
加载顺序
Installed Pacages
目录Packages
目录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 的子类