2012-05-23 36 views
2

更新: 此問題已修改,以反映非常有用的意見和答案。我已經接受了答案,但是完整的功能並不適用於最新版本。如何使ctags + scss發揮不錯

.ctags的內容(在〜/)

-R 
--exclude=.git 
--exclude=log 
--verbose=yes 
--langdef=scss 
--langmap=scss:.scss 
--regex-scss=/^[ \t]*([^\t {][^{]{1,100})(\t|)*\{/| \1/d,definition/ 
--regex-scss=/^[@]mixin ([^ (]+).*/\1/m,mixing/ 

當我把我的光標目標下,VIM說E426 tag not found: tag_name

考慮以下模式:

footer{ 
.wrapper{ 
    .general-info{ 
    .footer-links{ 
    a{@include ticker($bg, $white);} 
    } 
    } 
    } 
} 

在單獨的文件(modules.scss)在目錄中,我有ticker的定義:

@mixin ticker($color, $bg-color) { 
color: $color; 
background-color: $bg-color; 
} 

當我把我的光標目標下,仍VIM說E426 tag not found: tag_name

CTAGS不會索引ticker混入。不過,我可以使用ctags直接從SCSS gem中找到方法(例如變暗)。

+0

以您提供的正則表達式爲例,我給你的作品適合我。如果光標位於單詞ticker中,並按下'ctrl +]',它將跳轉到第一行,其中ticker在modules.scss中定義。此外,與單詞定義的行目前沒有做任何事情,我不認爲該行生成有效標籤,您可以刪除它。工作混合只是標記標籤的一種方式,因此可以將它們分組(如果要配置taglist插件,那麼所有標記爲混合的標籤都將一起列出。) – skeept

+0

您是對的,我必須刷新目錄中的ctags。經驗教訓 – rhodee

回答

5

在最後的{使用ctags時不會發出警告之前添加\。 我不知道生成的標籤是否能夠提供所需的結果,因爲我不知道該語言。

其結果將是:

--langdef=scss 
--langmap=scss:.scss 
--regex-scss=/^[ \t]*([^\t {][^{]{1,100})(\t|)*\{/| \1/d,definition/ 

更新:正如我上面提到的,我不知道的語言,所以很難檢查標籤的實際定義。 我在線看,下面的代碼在某些網頁中被列爲scss。 假設你想得到的標籤是混合後的單詞。

@mixin table-scaffolding {  
    th {       
    text-align: center;   
    font-weight: bold;   
    }        
    td, th { padding: 2px; }  
}        

@mixin left($dist) {    
    float: left;     
    margin-left: $dist;   
}        

#data {       
    @include left(10px);   
    @include table-scaffolding; 
}        
具有以下

則:

--langdef=scss 
--langmap=scss:.scss 
--regex-scss=/^[ \t]*([^\t {][^{]{1,100})(\t|)*\{/| \1/d,definition/ 
--regex-scss=/^[@]mixin ([^ (]+).*/\1/m,mixin/ 
--regex-scss=/^[@]function ([^ (]+).*/\1/f,function/ 

你會得到兩個新的標籤lefttable-scaffolding。 因此,如果我在數據命中ctrl+]內的單詞left中跳轉到定義數據的行。 您必須小心其他關鍵字,因爲它有一個-的單詞。因此,如果您在桌面上並按ctrl+],您將收到未找到的相同錯誤標記。對於這個工作,你必須添加下面你.vimrc

set iskeyword+=- 

你應該能夠初步概括上面你需要其他的標籤,甚至建立了一個一般的正則表達式來處理所有的標籤,因爲你意思。

如果您發佈了一個具體示例,說明您正在嘗試使用的文件的外觀如何,以及您嘗試獲取的標記是什麼,我相信我或其他人員能夠幫助找出表達式那。

+0

這個問題是關於讓它工作而不是壓制警告SCSS是一個用於編寫css語法的元框架 – rhodee

+0

那麼,你得到的標籤是否符合你的期望? – skeept

+0

沒有同樣的錯誤 – rhodee