如何创建仅重新缩进 Visual Code 中选定行的键绑定

How to create keybinding that reindents only selected lines in Visual Code

我在 MacOS 上使用 Visual Studio 代码 1.14,并尝试创建我自己的键绑定,重新缩进 突出显示.

我在 keybindings.json 中有这个:

[
    {
        "key": "alt+cmd+[", "command": "editor.action.reindentlines",
        "when": "editorHasSelection && editorTextFocus"
    }
]

我根据this article选择了"when":子句的命令。

问题:当我使用我的自定义键盘快捷键时,它会重新缩进整个页面,而不是仅缩进我的文本'已经选择了

这也许是微不足道的,但这可能会导致格式化噩梦,例如在编写 ReactJS 应用程序时,VSC 用于检测如何缩进的正则表达式模式在查看 javascript 的混合时似乎会感到困惑和 .jsx 文件中的 html。在这种情况下,我只想 re-indent/auto-indent 我选择的文本 - 而不是整个页面。

如何让键绑定以我正在寻找的行为运行?

when 子句只能在命令处于 活动 时更改 - 而不是它的行为方式。问题是该命令的实施是对整个文件进行操作,而不是对当前选择进行操作。

我认为还不支持重新缩进选择,但它似乎在路线图上。例如,它在 #19847 中被提及(强调我的):

The reason that right now we don't support Reindent in ranges is that we have some issues with boundaries in embedded-language files. Some of them are just TextMate Grammar issues but I'm sure if that can fix all. Once that issue is addressed, I think it's easy to support reindent in ranges/selection. And then Reindent when paste/moveLines/etc.

感谢@Gama11 指点我这个github issue

完成我试图做的事情的解决方案是使用命令 editor.action.formatSelection 而不是 editor.action.redindentlines

如 Gama11 所示,目前不支持在范围内重新缩进,但是格式选择是一个非常相似的命令,它使用不同的逻辑来完成特定范围内的缩进。