如何覆盖Sublime Text 3包的(CSS3)完成语法

问题描述 投票:0回答:1

我在CSS3包中使用Sublime Text 3。

我试图在键入CSS属性时覆盖行为。例如,给出以下内容:

body {
  | <- insertion point
}

如果我键入background并按Tab,结果将是background:,这是我想要的。

[如果键入background:,则在键入冒号的那一刻,该行将变为background: ;,插入点位于分号之前。我不希望这样,因为我总是在冒号后面输入一个空格,最后在该空格后输入两个空格。我不想重新训练我的肌肉记忆,因为所有其他编辑环境都不会自动添加空间。

我真的很想弄清楚如何忽略此完成行为。

我已经尝试编辑CSS3包中的completions/properties.py文件,但这似乎不是完成此操作的源头。不幸的是,我对如何将ST软件包组合在一起以弄清楚这一点还不了解。

sublimetext3
1个回答
0
投票

来自completions/properties.py的补全由程序包的on_query_completions处理程序使用,Sublime用来填充自动完成弹出窗口。因此,在此处修改内容(并重新启动Sublime,以便重新加载软件包)将更改自动完成弹出窗口中提供的内容(或在正确的情况下可以自动选择为最佳完成的内容)。

    ("background", "background: ${1};"),

这指定background的自动完成触发器应扩展到属性名称,后跟冒号和空格,并且光标留在${1}处,因此类似back Tab扩展到background: |;;如果要添加或修改这些补全,可以在这里进行修改。

另一方面,您遇到的问题是按下会触发要插入的空格。实际上,这根本不是与自动填充相关的东西,尽管从外观上并不完全清楚。

如果打开命令记录(View > Show Consolesublime.log_commands(True))并按照上面的步骤操作,当您按时,您会在控制台中看到以下内容:

command: insert_snippet {"contents": ": $0;"}

这表明存在为您执行此操作的键绑定。使用命令面板中的View Package File并使用css3 keymap进行过滤,可以打开CSS3/Default.sublime-keymap,其中的第一个键绑定就是这样做的内容:

    { "keys": [":"], "command": "insert_snippet", "args": {"contents": ": $0;"}, "context":
        [
            { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
            { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
            { "key": "selector", "operator": "equal", "operand": "meta.declaration-list.css, meta.at-rule.color-profile.block.css, meta.at-rule.counter-style.block.css, meta.at-rule.font-face.block.css, meta.font-feature-type-block.css, meta.at-rule.font-palette-values.block.css, meta.at-rule.page.block.css -meta.page-margin-box.css, meta.at-rule.viewport.block.css", "match_all": true },
            { "key": "selector", "operator": "not_equal", "operand": "meta.selector.css", "match_all": true },
            { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
        ]
    },

应用于此绑定的context确保它在这种特殊情况下触发,并且它是手动触发insert_snippet命令为您插入空格和分号。

为了阻止它执行此操作,请将该绑定从该文件复制到您自己的键绑定文件中,然后将contents更改为不包含不需要的空间。

我不使用此包,但是基于context中的范围选择器,它可以在几个不同的实例中触发,而不仅仅是在这个实例中触发;在所有情况下,它也会导致空间的插入。

如果您的肌肉记忆力总是随着输入:而插入空格,那没什么大不了;如果是,则需要更改复制的绑定以更改selector上下文行,以便仅在编辑属性时才匹配。那将导致Sublime在这种情况下选择您的键绑定,但在其他情况下又退回到软件包中的键绑定。

© www.soinside.com 2019 - 2024. All rights reserved.