我经常要把 2 空格缩进的源代码转换为 4 空格缩进的源代码(也许你的需求是反过来的)。之前的做法是在 View/Indentation
菜单中先把缩进转换为 tab, 再设定新的 tab width
等于 4 的方式来实现。这样做需要选择两次菜单才能完成,做得多了也是蛮费尽的。研究了一下,可以通过 Sublime Marco (宏) 来完成。
最终的宏定义
[
{ "args": null, "command": "select_all" },
{ "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" },
{ "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
{ "args": { "setting": "tab_size", "value": 4 }, "command": "set_setting" },
{ "args": { "set_translate_tabs": true }, "command": "expand_tabs" }
]
这是一个 JSON 文件,建议保存在 ~/Library/Application Support/Sublime Text 3/Packages/User
下,起名为 space2To4.sublime-macro
。
该宏的内容我逐行解释一下:
- 选择全部文档。
- 将当前的
tab_size
设定为 2 空格,因为缺省可能不是这个值,下一步转换需要这个值。 - 将当前文档的缩进从空格转为 tab(每两个空格被视为一个 tab)。
- 将
tab_size
设定为 4 空格。 - 将 tab 转换回空格,由于上一步的
tab_size
设定为 4 空格,因此这一步也会转换为 4 空格。
到这里,你已经可以通过 Sublime 菜单 Tools/Macros/user
选择 space2To4
来执行了。
绑定热键
绑定热键的话会更加方便。
选择 Sublime 菜单 Preferences/Key Binding
, 编辑该文件,增加一行:
{ "keys": ["f12"], "command": "run_macro_file", "args": {"file": "Packages/User/space2To4.sublime-macro"} }
这样按下功能键 f12
就可以执行这个宏了。
知道了原理,你可以在空格和 tab 之间自由转换。