【发布时间】:2026-01-16 09:30:01
【问题描述】:
我正在尝试为 ST3 编写一个看起来相当无辜的 sn-p。用于插入
\left<open-parens> \right<close-parens>
在数学范围内进入 Latex 文档。
我现在拥有的是:
<snippet>
<content><![CDATA[\\left${1:(} $0 \\right${1/(\()|(\{)|(\[)/(?1:\))(?2:\})(?3:\])/}]]></content>
<tabTrigger>lft</tabTrigger>
<scope>text.tex.latex string.other.math.tex,meta.function.environment.math.latex</scope>
</snippet>
用法如下:
- 输入
lst,tab; -
\left( \right)被插入,(被选中; - 如果用户希望
(、tab位于中间; - 否则键入
{或[以在\right之后插入相应的右括号
我已验证正则表达式按预期工作(通过尝试将${1:(} 替换为${1:{} 和${1:[} 的sn-p 版本。
但是在使用中,当键入任何起始括号时,ST 调用它自己的 sn-p,a) 紧跟其后插入关闭括号 b) 从我的 sn-p 中删除焦点,因此永远不会调用正则表达式。
第一个问题,我已经能够通过捕获开头的parenses并调用一个微小的sn-p,插入字符本身来缓解。例如:
{ "keys": ["{"], "command": "insert_snippet", "args": {"contents": "$0{"}, "context": [
{"key": "selector", "operator": "equal", "operand": "text.tex.latex string.other.math.tex, meta.function.environment.math.latex"},
{"key": "preceding_text", "operator": "regex_contains", "operand": "\\\\left\\($", "match_all": true }] },
但后来我发现了 b)。
解决方案将涉及以下任何一项:
- 根据上下文和
"key": "preceding_text",阻止执行内置的自动关闭 sn-ps。 - 让我自己的 mini-sn-p 返回到前者(即在输入
[focus 后返回到 lst-sn-p)。
如何做到这一点?
【问题讨论】:
标签: autocomplete sublimetext2 sublimetext code-snippets sublimetext3