调整缩进空格数量的 Sublime 宏

我经常要把 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

该宏的内容我逐行解释一下:

  1. 选择全部文档。
  2. 将当前的 tab_size 设定为 2 空格,因为缺省可能不是这个值,下一步转换需要这个值。
  3. 将当前文档的缩进从空格转为 tab(每两个空格被视为一个 tab)。
  4. tab_size 设定为 4 空格。
  5. 将 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 之间自由转换。

推荐阅读更多精彩内容