2015-08-20 54 views
1

由於評論的本質,這可能沒有意義。在TextMate2的中間使用備用語法高亮評論

另一方面,我試圖實現的是與轉義字符沒有太大差別。

舉一個簡單的例子,我想 # comment :break: comment 更出現像像

#comment 
"break" 
# comment 

會,但沒有第二#,一切都在同一行的,而是報價我有一些其他的轉義字符。儘管像引號一樣(並且不像我熟悉的轉義字符[例如\]),但我打算明確指出評論中斷的開始和結束。

感謝@Graham P Heath,我能夠實現alternate forms of comments in this question。我所追求的是對那裏取得的成就的一種提升。在我的場景中,#是我使用的語言(R)中的註釋,而#'既可用作R註釋又可用作其他語言的代碼的起始。現在,我可以在#'之後獲得與典型的R註釋不同的語法突出顯示,但我試圖在此子語言中獲得非常少量的語法突出顯示(#'實際上表示markdown的開始代碼,並且我想在一對`)中爲文本環繞聲突出顯示「raw」語法。

這塊語言的語法,我試圖打斷如下:

{ begin = '(^[ \t]+)?(?=#'')'; 
      end = '(?!\G)'; 
      beginCaptures = { 1 = { name = 'punctuation.whitespace.comment.leading.r'; }; }; 
      patterns = (
       { name = 'comment.line.number-sign-tick.r'; 
        begin = "#' "; 
        end = '\n'; 
        beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; }; 
       }, 
      ); 
     }, 

回答

0

我敢肯定,我已經想通了。以前我不明白的是該範圍如何工作。我仍然不完全理解它,但我現在已經足夠了解每種語法的beginend的嵌套定義(正則表達式)。

作用域使事情所以更容易!之前我想做(?<=\A#'\s.*)(\$)之類的正則表達式,在#'式樣的評論中找到美元符號......但顯然這不會起作用,因爲*+因爲同樣的原因而不起作用)的重複。通過範圍界定,它已經暗示我們必須在\A#'\s比賽中進行比賽,之後纔會匹配\$

這裏是我的語言語法的相關部分:

{ begin = '(^[ \t]+)?(?=#\'')'; 
      end = '(?!\G)'; 
      beginCaptures = { 1 = { name = 'punctuation.whitespace.comment.leading.r'; }; }; 
      patterns = (

       { name = 'comment.line.number-sign-tick.r'; 
        begin = "#' "; 
        end = '\n'; 
        beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; }; 


        patterns = (

         // Markdown within Comment 
         { name = 'comment.line.number-sign-tick-raw.r'; 
          begin = '(`)(?!\s)'; // backtick not followed by whitespace 
          end = '(?<!\s)(`)'; // backtick not preceded by whitespace 
          beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; }; 
         }, 

         // Equation within comment 
         { name = 'comment.line.number-sign-tick-eqn.r'; 
          begin = '((?<!\G)([\$]{1,2})(?!\s))'; 
          end = '(?<!\s)([\$]{1,2})'; 
          beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; }; 

          // Markdown within Equation 
          patterns = (
           { name = 'comment.line.number-sign-tick-raw.r'; 
            begin = '(`)(?!\s)'; // backtick not followed by whitespace 
            end = '(?<!\s)(`)'; // backtick not preceded by whitespace 
            beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; }; 
           }, 
          ); 
         }, 
        ); 
       }, 

      ); 
     }, 

這裏是一些R代碼裏面:

# below is a `knitr` (note no effect of backticks) code chunk 
#+ codeChunk, include=FALSE 


# normal R comment, follow by code 
data <- matrix(rnorm(6,3, sd=7), nrow=2) 

#' This would be recognized as markdown by `knitr::spin()`, with the preceding portion as "raw" text 
`note that this doesnt go to the 'raw' format ... it is normal code!` 

#+ anotherChunk 
# also note how the dollar signs behave normally 
data <- as.list(data) 
data$blah <- "blah" 
`data`[[1]] # backticks behaving 

#' I can introduce a Latex-style equation, filling in values from R using `knitr` code chunks: $\frac{top}{bottom}=\frac{`r topValue`}{`r botValue`}$ then continue on with markdown. 

這裏是什麼樣子的TextMate2這些更改後: enter image description here

相當不錯,除了被挑選出來的棋子在方程式裏面時,它們會以斜體顯示。我可以忍受這一點。我甚至可以說服自己,我是這樣想的;)(順便說一句,我指定fontName='regular'爲快遞新,所以我不知道爲什麼這是越來越重)