2012-03-16 86 views
3

我希望有一個$(美元符號),它表示一個php變量在ST2中顯示爲它自己的顏色(#ff0000)。我一直在編輯自定義顏色方案文件,但似乎無法爲此符號獲取特殊顏色。在Sublime Text中編輯顏色方案2

回答

5

重要附錄前綴答案

以下說明假定,一個是寫在JSON的語法定義,然後建立與PackageDev插件的plist XML文件(如以下鏈接的非官方崇高文檔描述)。 ST2從後面的文件中讀取語法分析指令。

= = = =

我向你報告從我自己第一次涉足這一領域,所以我可能會被誤認爲在接下來一兩個點。

除非您的語法分析器將$定義爲具有自己的範圍選擇器,否則將無法通過配色方案文件爲該孤立符號設置顏色。正如你可能已經知道的那樣,你可以通過選擇它並按下option +命令+ p(在非mac上的alt + super + p)來檢查元素的範圍選擇器:它報告狀態欄中的信息。

我剛剛在自己的軟件上檢查了php語法分析器,並且$的範圍與它前綴所在的字符串之間沒有區別。因此,假設您的設置與我自己的設置類似,您需要編寫自己的語法定義。這可以在現有的php語法文件中完成,或者(在一個新的定義文檔中肯定是一個更安全的選項)完成,您將使用它作爲編輯的主要文檔。

您可以在非官方的崇高文本文檔中找到一個教程,其中涵蓋了編寫自己的語法定義的基本步驟。實際上,標題爲「Fine Tuning Matches」的部分解釋瞭如何通過使用「捕捉」來定義範圍選擇器,尤其是前綴dolla'符號的範圍選擇器。你可以參考文檔中關於創建語法定義文件的細節以及所有這些,但爲了鞏固我對流程的理解並在此處提供答案,我將盡我所能解釋JSON確定選擇器。

這是你需要使用正則表達式模式:

的上面的意思
{ "match": "\\$([A-Za-z][A-Za-z0-9_]+)", 
    "name": "keyword.syntaxTypeAbbreviation", 
    "captures": { 
    "1": { "name": "moreSpecific.selectorName.syntaxTypeAbbreviation " } 
    }, 
    "comment": "Variables like $PARAM1, $TM_SELECTION..." 
} 

分析:

"match"給出了確定要選擇的字符串模式的正則表達式。除非我錯了,它會顯示「任何以'$'開頭的字符串([後跟一個大寫或小寫字母]和[至少一個附加字母或數字]加上任何其他字符)」。 (Sublime Text使用oniguruma regex specifications。)

"name"提供了在配色方案文檔中選擇範圍的字符串。在方案xml中,這對應於<key>name</key> <string>specific.selector.syntaxTypeAbbreviation</string>

"captures"(這是您的目標的關鍵元素)指定了模式的子集,它將被賦予其自己的更具體的範圍選擇器。圓括號內的每一組正則表達式佔據一個地方,整數(這裏爲"1")指定哪些地方將被「捕獲」。當然,在我們的情況下,只有一個可捕獲的組。

"name"和以前一樣,但是作爲先前指定的亞種,"comment"爲您提供了評論定義重要性的選項。

最後,需要注意的是第一範圍選擇將設置整串的顏色和覆蓋它的前輩給不同的顏色下面的字母和數字是很重要的。也就是說,第一個選擇器將讓您着色$,第二個選擇器將成爲附加字符串的顏色。

因此,我們可以翻譯這樣的圖案:

「的任何字符串開頭與‘$’([後跟一個大寫或 小寫字母]和[至少一種額外的字母或數字]加上 任何附加字符)被命名爲NAME,除了其被封閉在所述第一組括號的,這是被命名爲中文別名代替的部分。

我希望這種解釋至少有一半對你來說是有用的,因爲這對我來說是可以寫的。此外,我會很感激人們糾正我確實犯下的任何錯誤。

問候,

aBath

+1

崇高文本2:V2.0.5此定義爲 - punctuation.definition.variable.php – Nick 2013-01-25 18:28:25

5

在你的配色方案文件:

<dict> 
    <key>name</key> 
    <string>Variable start</string> 
    <key>scope</key> 
    <string>punctuation.definition.variable</string> 
    <key>settings</key> 
    <dict> 
     <key>fontStyle</key> 
     <string>bold</string> 
     <key>foreground</key> 
     <string>#ff0000</string> 
    </dict> 
</dict> 

注:fontstyle =大膽也是一種選擇