为什么没有sublime使用选择器自动检测这个自定义sublime-build?

时间:2014-10-14 20:48:17

标签: sublimetext sublimetext3 sublime-build

我将以下内容保存到我的用户文件夹中的node-sass.sublime-build

{
    "shell_cmd": "node-sass.cmd $file",
    "selector": "source.scss"
}

我有一个slideEditor.scss文件。如果我明确地将构建系统设置为node-sass,则ctrl + b可以正常工作,但是如果我将其设置为“自动”,则ctrl + b不执行任何操作,不会将任何内容记录到控制台。怎么回事?根据{{​​3}}我正在做的一切都是正确的。

1 个答案:

答案 0 :(得分:2)

首先,对您的问题的简短回答:将"source.scss"更改为"source.sass",自动构建系统应该可以正常工作。

背景和一些替代方案:

Sublime中的语法突出显示(和TextMate,其中的想法最初来自)基于每种语言的.tmLanguage语法定义。这些XML / Plist文件基本上是一系列正则表达式,它们将匹配项分配给作用域。例如,在以下CSS中:

body {
    margin: 0;
}

单词body的范围为source.css meta.selector.css entity.name.tag.csssource.css基本范围,或者是所有其他范围的父级。在Python文件中,基本作用域为source.python,HTML为text.html.basic,Javascript为source.javascript等。此基本作用域为"selector"正在寻找 - 它与文件名无关。

您使用的语法定义的基本范围为source.sass,这就是为什么您的构建系统无法正常工作,除非您专门选择它(它会覆盖selector属性)。有两种方法可以解决这个问题。首先,正如我上面提到的,只需将选择器更改为source.sass,您就可以全部设置。我更喜欢的第二个是使用Package Control提供的Syntax Highlighting for Sass包。首先,它为SASS和SCSS提供了单独的语言定义,因此您可以为两者进行适当的突出显示。正如您所期望的那样,SCSS的基本范围为source.scss,而对于SASS,source.sass,因此如果您使用这两种语言,则可以拥有单独的构建系统。此外,语法定义比您正在使用的程序包更丰富,因此如果您使用recommended color schemes之一,您将会非常好地突出显示所有各种元素,关键字最后,该软件包包括一堆完成和其他附加功能,使编写样式表变得更加容易。