如何覆盖 Sublime Text 3 包的 (CSS3) 完成语法
How to override Sublime Text 3 Package's (CSS3) completion syntax
我正在使用带有 Sublime Text 3 的 CSS3 包。
我试图覆盖输入 CSS 属性 时的行为。例如,给定以下内容:
body {
| <- insertion point
}
如果我输入 background
并按 Tab,结果将是 background:
,这是我想要的。
如果我键入 background:
,当我键入冒号时,该行变为 background: ;
,插入点位于分号之前。我不想要这个,因为我自己总是在冒号后键入一个 space,最后以两个 space 结尾。我不想重新训练我的肌肉记忆,因为我的所有其他编辑环境都不会自动添加 space。
我真的很想知道如何覆盖这个完成行为。
我试过编辑 CSS3 包内的 completions/properties.py
文件,但这似乎不是这个完成的来源。不幸的是,我对如何将 ST 包放在一起来解决这个问题知之甚少。
来自 completions/properties.py
的完成由包的 on_query_completions
处理程序使用,这是 Sublime 用来填充自动完成弹出窗口的内容。因此,修改那里的内容(并重新启动 Sublime 以便重新加载包)将改变自动完成弹出窗口中提供的内容(或者在正确的情况下可以自动选择最佳完成的内容)。
("background", "background: ;"),
这指定 background
的自动完成触发器应该扩展到 属性 的名称后跟一个冒号和一个 space,光标留在 </code>,所以 <code>back
Tab 扩展为 background: |;
;如果您想添加或修改这些类型的补全,请在此处修改。
另一方面,您遇到的问题是按下 : 是触发插入 space 的原因。这实际上根本不是与自动完成相关的东西,尽管从外观上看并不完全明显。
如果您打开命令日志记录 (View > Show Console
, sublime.log_commands(True)
) 并按照上述步骤操作,当您按 : 时,您会在控制台中看到:
command: insert_snippet {"contents": ": [=11=];"}
这表明有一个键绑定正在为您执行此操作。使用命令选项板中的 View Package File
并使用 css3 keymap
过滤将允许您打开 CSS3/Default.sublime-keymap
,其中第一个键绑定是这样做的:
{ "keys": [":"], "command": "insert_snippet", "args": {"contents": ": [=12=];"}, "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
命令为您插入 space 和分号。
为了阻止它这样做,将该绑定从该文件复制到您自己的键绑定文件中,并将 contents
更改为不包含您不需要的 space。
我不使用这个包,但基于 select 或 context
中的范围,这可以在几个不同的实例中触发,而不仅仅是在这个实例中;在所有情况下,它也会导致插入 space。
如果您的肌肉记忆总是在输入 :
时插入 space,那么这没什么大不了的;如果是,那么您将需要更改复制的绑定以更改 selector
上下文行,以便它们仅在您编辑 属性 时匹配。在那种情况下,这会导致 Sublime select 你的键绑定,但在其他情况下会退回到包中的键绑定。
我正在使用带有 Sublime Text 3 的 CSS3 包。
我试图覆盖输入 CSS 属性 时的行为。例如,给定以下内容:
body {
| <- insertion point
}
如果我输入 background
并按 Tab,结果将是 background:
,这是我想要的。
如果我键入 background:
,当我键入冒号时,该行变为 background: ;
,插入点位于分号之前。我不想要这个,因为我自己总是在冒号后键入一个 space,最后以两个 space 结尾。我不想重新训练我的肌肉记忆,因为我的所有其他编辑环境都不会自动添加 space。
我真的很想知道如何覆盖这个完成行为。
我试过编辑 CSS3 包内的 completions/properties.py
文件,但这似乎不是这个完成的来源。不幸的是,我对如何将 ST 包放在一起来解决这个问题知之甚少。
来自 completions/properties.py
的完成由包的 on_query_completions
处理程序使用,这是 Sublime 用来填充自动完成弹出窗口的内容。因此,修改那里的内容(并重新启动 Sublime 以便重新加载包)将改变自动完成弹出窗口中提供的内容(或者在正确的情况下可以自动选择最佳完成的内容)。
("background", "background: ;"),
这指定 background
的自动完成触发器应该扩展到 属性 的名称后跟一个冒号和一个 space,光标留在 </code>,所以 <code>back
Tab 扩展为 background: |;
;如果您想添加或修改这些类型的补全,请在此处修改。
另一方面,您遇到的问题是按下 : 是触发插入 space 的原因。这实际上根本不是与自动完成相关的东西,尽管从外观上看并不完全明显。
如果您打开命令日志记录 (View > Show Console
, sublime.log_commands(True)
) 并按照上述步骤操作,当您按 : 时,您会在控制台中看到:
command: insert_snippet {"contents": ": [=11=];"}
这表明有一个键绑定正在为您执行此操作。使用命令选项板中的 View Package File
并使用 css3 keymap
过滤将允许您打开 CSS3/Default.sublime-keymap
,其中第一个键绑定是这样做的:
{ "keys": [":"], "command": "insert_snippet", "args": {"contents": ": [=12=];"}, "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
命令为您插入 space 和分号。
为了阻止它这样做,将该绑定从该文件复制到您自己的键绑定文件中,并将 contents
更改为不包含您不需要的 space。
我不使用这个包,但基于 select 或 context
中的范围,这可以在几个不同的实例中触发,而不仅仅是在这个实例中;在所有情况下,它也会导致插入 space。
如果您的肌肉记忆总是在输入 :
时插入 space,那么这没什么大不了的;如果是,那么您将需要更改复制的绑定以更改 selector
上下文行,以便它们仅在您编辑 属性 时匹配。在那种情况下,这会导致 Sublime select 你的键绑定,但在其他情况下会退回到包中的键绑定。