ST3 中 auto-indent/reindent 代码块的按键绑定

Keybind for auto-indent/reindent block of code in ST3

有没有办法在 Sublime Text 3 中添加键绑定以重新缩进突出显示的代码块?

我知道 Edit > Line > Reindent 中有一个 "reindent" 选项,但它没有键绑定。

此外,重缩函数并非如此 "smart",在某些情况下它会产生奇怪的结果。有没有更好解决这个问题的插件?

如果有帮助,我主要使用 JavaScript 编写代码。

涵盖问题的第一部分,可以将键绑定到菜单或命令面板中存在的任何内容,这只是找出您需要的命令和参数的问题。

最简单的方法是使用 Ctrl+`View > Show Console 打开 Sublime 控制台,然后输入命令 sublime.log_commands(True),执行命令并查看其内容:

>>> sublime.log_commands(True)
command: reindent {"single_line": true}

您可以 运行 使用 False 而不是 True 的命令命令来关闭日志记录,或者只是重新启动 Sublime。

有了这些知识,您可以使用 Preferences > Key Bindings 显示的命令和参数创建键绑定,并在右侧窗格中添加绑定。

在这种情况下,它看起来像这样(根据需要更改密钥):

{
    "keys": ["ctrl+alt+r"],
    "command": "reindent",
    "args": {
        "single_line": true
    }
},

执行此操作后,不仅键绑定处于活动状态,而且 Sublime 还会在菜单项旁边显示您在菜单中选择的键,作为额外提醒。

对于你问题的第二部分,Sublime内部代码的重新缩进和重新格式化确实不是很理想;部分原因是出于兼容性原因,其缩进系统由一些简单的正则表达式提供支持,其方式与 TextMate 相同。

无论如何,你可以search Package Control for third party packages that might allow for better formatting/reformatting of code. In the case of JavaScript, something like JsFormat可能是你想要的。

通常这样的包只提供与完成工作的外部工具的集成,因此还需要您安装外部第三方工具才能运行。然而,在 JsFormat 的特定情况下,它直接捆绑了自己的格式化程序。