Ruby 变量和关键字的 Sublime color 语法

Sublime color syntax for Ruby variables vs keywords

有没有办法让 Sublime Text 2 为 Ruby "variables" 和 "keywords" 显示不同的颜色?下图是使用默认 Monokai 配色方案的 Ruby 代码示例。我希望我可以让变量 (list, x) 的颜色与关键字 (each, print) 的颜色不同。

目前,它们都绑定到 <key>foreground</key>。我确实尝试更改 variable 颜色,但只更改了 |x|.

不,没有办法使用 Sublime 附带的默认 Ruby 语法来执行此操作。 listeachprintx 的范围都与 source.ruby 相同,这意味着它们没有可以通过颜色定位的特定范围方案。另一方面,end 的作用域是 keyword.control.ruby,而 do 的作用域是 keyword.control.start-block.ruby(除了适用于所有元素的基础 source.ruby 作用域),所以如果您的配色方案中有 keywordkeyword.control 的规则,则可以对它们进行不同的着色。 |x| 对于管道 |punctuation.separator.variable.ruby,对于 xvariable.other.block.ruby,因此可以根据您的喜好进行调整。

本质上,一个项目只有在具有不同范围的情况下才能被着色,并且您的配色方案包含该范围的规则(或它的更通用版本,但不是它的更具体版本)。例如,与 Python 相比,Ruby 尤其具有挑战性,因为虽然 Python 方法总是在末尾带有括号(例如 string_var.replace())并且可以将正则表达式写入突出显示点 . 和括号之间的任何内容作为函数调用,Ruby 不遵循此范例,因此语法突出显示定义(在各种 .tmLanguage 文件中找到)无法区分方法调用和一个简单的属性,因此无法以不同方式突出显示它们。这就是为什么list.each在你的程序中只有source.ruby,而each没有作为函数高亮显示。