如何停止Sublime Text 3在花括号中自动换行

3

我正在处理一个 Handlebars (.hbs) 文件,内容如下:

<div>
  ...

  _
  <button {{action "signin"}}>Sign in</button>
</div>

当我将光标放置在下划线位置并输入花括号 { 时,它会用花括号包裹整个 <button> 行:
{
<button {{action "signin"}}>Sign in</button>
}

但我想要的只是:
{}
<button ...

[和(没有这种行为。有没有办法禁用Sublime Text的此功能?我查看了键绑定,但找不到方括号和花括号之间的差异,使它们表现不同。

如何禁用Sublime Text中使用方括号时自动插入闭合符号的功能?

我查看了键绑定,但是没有发现方括号和花括号之间的差异导致它们表现不同。请问是否有方法可以禁用这个功能?

2个回答

1

我的解决方案依赖于您已应用语法,因此可能会或可能不会直接使用。

尝试将以下内容添加到您的用户键绑定中。

{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context":
    [
        { "key": "indented_block", "match_all": true },
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
        { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true },
        { "key": "selector", "operator": "equal", "operand": "source.handlebar", "match_all": true },
    ]
}

我为handlebar猜测了一个范围,如果需要,请进行更改。如果没有与文件类型相关联的语法定义,请进行评论,我会更新我的答案。
供以后参考,我通过在控制台中执行“sublime.log_commands(True)”找到了正在运行的命令。从那里我找到了相关的键绑定,并创建了一种覆盖特定文件类型的方式。

我尝试了你的解决方案,但是没有成功。然而,我还启用了控制台并注意到 { 键触发了 "wrap_block" 命令。现在我正在尝试在 "wrap_block" 覆盖中复制 "insert_snippet" 行为。否则,我不确定如何从默认首选项中删除 wrap_block 命令。 - Dihedral
啊哈!我必须覆盖所有“{”命令并从我的用户键映射文件中省略“wrap_block”命令。 - Dihedral
很高兴你解决了它。我那里的上下文是你找到的wrap_block命令的结果。我只是添加了选择器上下文并用插入片段替换了该命令。我猜测作用域问题阻止了它的工作。我的解决方案将保持其他文件类型中的行为。当然,如果你根本不想要那种行为,你可以简单地删除选择器上下文。 - skuroda
通过用“insert_snippet”替换命令,难道不会使默认的“wrap_block”继续发挥作用吗?我实际上不确定为什么我的解决方案有效,似乎它应该仍然具有旧行为。 - Dihedral
1
是的,在某些条件下它仍然会起作用。我(以及你)正在利用ST搜索要运行的命令的方式。它从用户目录开始,然后是任何已安装的软件包,最后是默认目录。如果有匹配的上下文,它将运行该命令并停止搜索。因此,在您的情况下,上下文在用户目录中匹配,因此它运行该命令。它永远不会落入默认目录,其中wrap_block命令将被运行。我希望这能让您更清楚一些。 - skuroda

0

我在JSX文件中使用Sublime Text 3时遇到了同样的问题。在阅读skuroda答案下面的评论后,我通过复制/覆盖“wrap_block”绑定的键和上下文,然后将“insert_snippet”绑定的命令和参数替换进去来解决了这个问题。

具体操作如下(添加到用户键绑定列表中):

    { "keys": ["{"], "command": "insert_snippet", "args": {"contents": "{$0}"}, "context":
        [
            { "key": "indented_block", "match_all": true },
            { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
            { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
            { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true },
        ]
    },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接