sublimetext3 - 如何覆盖 Sublime Text 3 包的 (CSS3) 完成语法
问题描述
我正在使用带有 Sublime Text 3的CSS3包。
我试图在键入 CSS 属性时覆盖该行为。例如,给定以下内容:
body {
| <- insertion point
}
如果我键入background
并按 Tab,结果将是background:
,这是我想要的。
如果我键入background:
,则在我键入冒号的那一刻,该行将变为background: ;
,插入点位于分号之前。我不想要这个,因为我自己总是在冒号后面输入一个空格,最后有两个空格。我不想重新训练我的肌肉记忆,因为我所有的其他编辑环境都不会自动添加空间。
我真的很想弄清楚如何覆盖这种完成行为。
我试过编辑completions/properties.py
CSS3 包中的文件,但这似乎不是这个完成的来源。不幸的是,我不太了解 ST 包是如何组合在一起来解决这个问题的。
解决方案
来自completions/properties.py
包的on_query_completions
处理程序使用来自的完成,这是 Sublime 用来填充自动完成弹出窗口的内容。因此,修改那里的内容(并重新启动 Sublime 以便重新加载包)将改变自动完成弹出窗口中提供的内容(或者在正确的情况下可以自动选择作为最佳完成的内容)。
("background", "background: ${1};"),
这指定自动完成触发器background
应该扩展为属性名称,后跟一个冒号和一个空格,并且光标留在${1}
,因此back
Tab扩展为background: |;
; 如果您想添加或修改这些类型的完成,这是修改的地方。
另一方面,您遇到的问题是按下:是触发插入空间的原因。这实际上根本不是与自动完成相关的东西,尽管从外观上看并不完全明显。
如果您打开命令日志记录 ( View > Show Console
, sublime.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
为不包含您不想要的空间。
我不使用这个包,但是基于 this 中的范围选择器,context
可以在几个不同的实例中触发,而不仅仅是在这个实例中;在所有情况下,它也会导致插入空间。
如果你的肌肉记忆总是在输入 a 时插入空格,:
那没什么大不了的。如果是,那么您需要更改复制的绑定以更改selector
上下文行,以便它们仅在您编辑属性时匹配。这将导致 Sublime 在这种情况下选择您的键绑定,但在其他情况下回退到包中的那个。
推荐阅读
- c# - 从 WCF 下载 ZIP 文件 - ASP.NET CORE
- python - 如何调用另一个函数内部的一个特定函数?
- oracle - MSAccess - Oracle:无法将记录添加到表单记录集
- r - 从内部数据帧中提取数据帧
- r - 如何动态计算 data.table 中的行值,避免 FOR 循环
- python-3.x - 我可以用什么来测量 3D (x,y,z) 中的某些属性?Regionprops 文档说它仅适用于 (N, M) 但我找到了 3D regionprops PR 的信息
- java - 如何在 Firebase Vision 文本识别器中设置字符白名单
- php - Symfony 控制台:对服务感到困惑
- xml - 在组件中将 XML 结果显示为数组
- mysql - mysql查询使用分区名称与where子句