Sublime text 3 擦除片段触发器而不是插入片段

Sublime text 3 erases snippet trigger instead of inserting snippet

我正在尝试使用以下 sublime 片段来快速创建 LaTeX 文档:

<snippet>
    <content><![CDATA[
\def\HWset{}
\def\myname{MyName}              
\documentclass{CustomClassFromMyProfessor}
\usepackage{bigints}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand{\cord}{\coordinate}
\newcommand\ddfrac[2]{\frac{\displaystyle #1}{\displaystyle #2}}
\newcommand{\eps}{\epsilon}
\newcommand{\p}{\partial}
\newcommand{\er}{\bv{e}_r}
\newcommand{\ephi}{\bv{e}_\varphi}
\newcommand{\etheta}{\bv{e}_{\theta}}
\newcommand{\ez}{\bv{e}_z}
\newcommand{\ex}{\bv{e}_x}
\newcommand{\ey}{\bv{e}_y}
\newcommand{\qed}{$\hfill\blacksquare$\}
\usepackage{mathtools}
\DeclarePairedDelimiter\br{\langle}{\rvert}
\DeclarePairedDelimiter\kt{\lvert}{\rangle}
\DeclarePairedDelimiterX\brkt[2]{\langle}{\rangle}{#1 \delimsize\vert #2}

\newcommand\brktt[3]{\left< #1 \right| #2 \left| #3 \right>}

\begin{document}
\textbf{}
\makeHWtitle

\problem{}


\end{document}
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>newhw</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <!-- <scope>source.python</scope> -->
</snippet>

然而,当我尝试实际使用它时输入:newhw 然后按 Tab 键只是擦除 newhw 而不会插入任何内容。

此代码段实际上在某些时候有效,所以我很困惑为什么它停止了。我也知道我可能应该只创建自己的文档 class,但这听起来相当令人生畏,尤其是因为我必须合并我没有编写的自定义 class,但是我还没有真的研究了这个。

您的代码段正文中包含一些无效文本,因为它在第 19 行有一些未转义的 $ 个字符:\newcommand{\qed}{$\hfill\blacksquare$\}。在每个字符前加上 \ 字符以告诉 Sublime 下面的 $ 字符不是特殊字符将解决问题。

作为背景,$ 字符在片段中(以及在 Sublime 中支持变量扩展的其他各种地方)是特殊的,代表要扩展的变量的名称(或者在一个片段,一个字段的占位符)。

通常当您指定一个不存在的变量时(例如 $cool),结果是该变量扩展为一个空字符串。在这种特殊情况下,变量看起来像 $\$\,这不是有效的变量名。在幕后,整个扩展失败,导致整个片段插入失败。

作为一般性建议(完全没有隶属关系),PackageDev 软件包的功能包括针对各种 Sublime 文件类型的增强语法突出显示,这可以使此类问题更加明显。例如,在这里您可以看到未转义的 $ 字符被突出显示为无效(占位符也被突出显示):