1.1.8 定制化
设置
Sublime Text 把配置文件存放在 .sublime-settings中。
小经验:总是把个人配置文件放到Packages/User下,保证它们会优先于其它任何有冲突的配置文件。
格式
带有.sublime-settings扩展名的 JSON 文件。
设置的类型
.sublime-settings文件的名字决定了它的目的,名字可以是具有描述性的或是和它们所控制的内容相关的。例如,文件类型设置需要携带.tmLanguage定义文件类型的名字。因此,.py类型文件的语法定义就必须包含 在Python.tmLanguage
文件中,相应的设置文件被成为Python.sublime-settings
。
然而,一些设置文件只在特殊的平台上生效,这可以通过文件名来推断。例如,Preferences (platform).sublime-settings
。平台的有效名称是Windows
、Linux
、OSX
。
这一点非常重要:Packages/User
下面基于平台的设置文件会被忽略,这种情况下,你可以确定一个单独的文件可以覆盖其它设置。
设置的改变是时时的,但是你也许需要重启 Sublime Text 来加载新的设置文件。
如何访问和编辑基本设置文件
可以通过菜单栏的Preferences | Settings - User和Preferences | Settings - More来访问主要的配置文件(除非你需要设置非常细粒度的控制,否则还是不要修改这个)。不鼓励修改Preferences | Settings - Default ,因为每次更新软件这个文件都会恢复。然而,你可以把它当作一个参考文档:它包含了所有可用的全局和文件类型设置的解释。
.sublime-settings
文件优先级顺序
相同的设置文件(例如Python.sublime-settings
)可以出现在多个地方,在具有相同名称文件中定义的所有设置将根据预定义的规则进行合并和覆盖。到这里查看详细。
Packages/User
下的设置文件最终都会覆盖其它同名文件的设置内容。
除了设置文件之外,Sublime Text 维护会话数据——为当前正在被编辑的特定文件集进行设置。当你工作在一些文件时,会话数据会被更新,因此如果你以任何形式(主要是通过 API 调用)调整特殊文件的设置,它将会被记录 在会话中,这将优先于任何可适用.sublime-setting文件。
要检查一个正在被编辑的特定文件的设置,在控制台输入view.settings().get("setting_name")
。
最后,值得注意的是一些设置会自动为你进行调整。如果你对一些设置的值有困惑时,请牢记这一点。例如,这是一个有关空白设置和syntax
设置的例子。
下面,你可以看到在 Windows 下 Sublime Text 对 Python 文件进行处理的一个假想层级设置的顺序。
- 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
- 当前文件的会话数据
- 自动调整设置
设置的层次结构查看完整示例。
全局编辑器设置和全局文件设置
这些设置被存放在Preferences.sublime-settings
和Preferences (platform).sublime-settings
文件中,默认设置在Packages/Default
下。
平台的有效名称是Windows
、Linux
、OSX
。
文件类型设置
以语法定义来命名.sublime-settings
文件,例如,语法定义为Python.tmLanguage
,设置文件命名为Python.sublime-settings。
和全局设置一样,你也可以对文件类型创建指定平台的设置,例如,Python (Linux).sublime-settings
只会作用于 Linux。
此外,我们强调Pakages/User
下只有Python.sublime-settings
会被读到。
无论它的位置在哪里,特殊设置都会有一个较高的优先级,高于全局设置。
设置的层次结构
下面,你可以看到在 Windows 下 Sublime Text 对 Python 文件进行处理的一个假想层级设置的顺序。
Packages/Default/Preferences.sublime-settings
Packages/Default/Preferences (Windows).sublime-settings
Packages/AnyOtherPackage/Preferences.sublime-settings
Packages/AnyOtherPackage/Preferences (Windows).sublime-settings
Packages/User/Preferences.sublime-settings
- 项目中的设置
Packages/Python/Python.sublime-settings
Packages/Python/Python (Windows).sublime-settings
Packages/User/Python.sublime-settings
- 当前文件的会话数据
- 自动调整设置
存放用户设置
当你想在软件更新时保留你的设置,把对应的.sublime-settings文件放到Packages/User
下。
缩进
按键绑定
文件格式
.sublime-keymap
为扩展名的 JSON 文件中。
例如:
[
{ "keys": ["ctrl+shift+n"], "command": "new_window" },
{ "keys": ["ctrl+o"], "command": "prompt_open_file" }
]
定义和重写按键绑定
默认:Packages/Default/Default (Windows).sublime-keymap)
。如果你想覆盖的话,需要新建一个具有更高优先级的设置文件,例如:Packages/User/Default (Windows).sublime-keymap
。
高级按键绑定
简单按键绑定包括映射到一个命令的一个或多个键的序列,然而还有更加复杂的语法,例如给命令传递一些参数,限制特定上下文的按键绑定。
传递参数
使用args
指定参数:
{ "keys": ["shift+enter"], "command": "insert", "args": { "characters": "\n" } }
这里,当按下Shift+Enter
时,insert
命令会加上\n
参数。
上下文
上下文决定了一个给定的按键绑定是否生效。
{ "keys": ["escape"], "command": "clear_fields", "context": [{ "key": "has_next_field", "operator": "equal", "operand": true }] }
同样的按键可能会被映射到其它上下文中,所以同样的按键可能产生不一样的结果。
Key Chords(同时按两个键)
你可以用多个按键组合创建一个按键绑定。
{ "keys": ["ctrl+k", "ctrl+v"], "command": "paste_from_history" }
这里,触发paste_from_history
命令,必须先按下Ctrl + K
,然后松开K
,按下V
。
注:这是一个默认的按键行为,你可以随时尝试。
菜单
文件格式
Format | JSON (带注释) |
---|---|
Extension | .sublime-menu |
Name | 可用菜单项的列表,查看Available Menus |
Location | Packages 下的任意位置 |
Content | “Menu Item” 对象的列表 |
例子
下面的内容是 Main.sublime-menu
文件中的一个摘要:
[
{
"caption": "Edit",
"mnemonic": "E",
"id": "edit",
"children":
[
{ "command": "undo", "mnemonic": "U" },
{ "command": "redo_or_repeat", "mnemonic": "R" },
{
"caption": "Undo Selection",
"children":
[
{ "command": "soft_undo" },
{ "command": "soft_redo" }
]
},
{ "caption": "-", "id": "clipboard" },
{ "command": "copy", "mnemonic": "C" },
{ "command": "cut", "mnemonic": "t" },
{ "command": "paste", "mnemonic": "P" },
{ "command": "paste_and_indent", "mnemonic": "I" },
{ "command": "paste_from_history", "caption": "Paste from History" }
]
}
]
图片
编辑区域的默认的右键菜单
编辑区域的编辑后的右键菜单
可用菜单
文件/菜单名 | 描述 |
---|---|
Main | 主菜单 |
Context | 编辑区域的右键菜单 |
Find in Files | 点击在文件中查找面板中的“…”按钮(查找范围)时出现。 |
Side Bar | 侧边栏每个节点的右键菜单 |
Side Bar Mount Point | 侧边栏最外层文件夹额额外右键菜单项 |
Tab Context | 标签栏的右键菜单 |
Widget Context | 各组件输入框的右键菜单,包括命令面板,跳转到,查找面板和各插件打开的面板。 |
此外,当你点击状态栏中下面四项时会显示各自的列表:
- Encoding
- Line Endings
- Indentation
- Syntax
状态栏菜单的演示
菜单项
选中一个菜单项时,会执行一个命令或者打开一个子菜单列表。
可用属性:
- 指令名
- 命令的参数
- 一个 ID
- 一个标题
- 快捷键
- 子菜单
一个可正常工作的菜单至少包含:
- 指令名
- 标题和子菜单
- 只有标题
- 一个 ID
解析一个菜单将遵循以下规则:
- 包含子菜单的菜单无法调用指令,如果使用了分隔符标题,则它将被渲染成连字符。
- 如果没有提供标题,则会从指令的描述信息中抽取出一个标题,如果及没有标题也没有指令,则标题为空字符串。
- 快捷键必须包含在 caption 中,且是大小写敏感的。
- 引用了不存在的指令的菜单将被禁用。
- 菜单项可以通过其引用的指令进行隐藏或禁用。
分隔符
分隔符是菜单项标题有 -
且无子菜单的,通常用于给有相同目的的菜单项进行分组。分隔符不能调用指令。
多个分隔符会缩减成一个,菜单的开头和结尾的分隔符不显示。
菜单合并
.sublime-menu
文件的加载顺序和包加载的顺序一样,具有相同名称的菜单文件将被拼接起来,除非指定了特定的 ID。
同一个包中的菜单文件将从根目录开始按字典的顺序加载,子菜单也是类似。
作为一种特殊情况,User Packages中声明的无 ID 的菜单项总是在其他包中的标准项之后才插入。
菜单项 ID
ID 决定了该部分的名称,如果菜单项的 ID 匹配到了则将会出现在该部分的第一个,其他项将会在追加到其后面,直到下一个菜单项 ID 被匹配到。
如果不同 .sublime-menu
文件中的两个菜单项通过 ID 引用了同样的菜单项,Sublime Text 将用新的参数覆盖之前的参数。
把 ID 分配给分隔符或有子菜单的项是一种常见的做法,这样可以很方便的对菜单栏进行定制。
子菜单
每个菜单项都可以有一个子菜单,鼠标悬停在菜单项就可以看到子菜单,子菜单是有其自己的 ID 层次的独立菜单。
为了从一个不同的菜单文件扩展子菜单,两个地方必须都指定 ID 以定位正确的菜单项。
主菜单
和其它菜单不一样,主菜单的根菜单表示菜单栏上的菜单项。
命令的接口
一个菜单项可以动态地被:
- 隐藏
- 禁用
- 调用
- 安排一个不同的标题
为此,指令必须实现这些必须的方法,每个实现了的方法,都将通过相应的菜单项中指定的参数来调用。如果调用失败,该方法将马上被再次通过无参数的形式调用。
is_visible
is_enabled
is_checked
description
其中的一些方法也会对命令面板有一定的影响。
色彩主题
Sublime Text 默认的 Python 高亮配色主题: