rho*_*dee 2 css vim sass ctags
更新: 此问题已被修改,以反映下面非常有用的评论和答案.我已经接受了答案,但是到目前为止还没有完整的功能.
.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/
Run Code Online (Sandbox Code Playgroud)
当我将光标放在目标下时,vim说 E426 tag not found: tag_name
考虑以下模式:
footer{
.wrapper{
.general-info{
.footer-links{
a{@include ticker($bg, $white);}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在目录中的单独文件(modules.scss)中,我有ticker的定义:
@mixin ticker($color, $bg-color) {
color: $color;
background-color: $bg-color;
}
Run Code Online (Sandbox Code Playgroud)
当我将光标放在目标下时,vim仍然说 E426 tag not found: tag_name
ctags不会对tickermixin 编制索引.但是我可以使用ctags直接从SCSS gem中查找方法(例如,变暗).
在使用ctags时\,在最后一个之前添加a {不会发出警告.我不知道所生成的标签是否会产生预期的结果,因为我不懂语言.
结果将是:
--langdef=scss
--langmap=scss:.scss
--regex-scss=/^[ \t]*([^\t {][^{]{1,100})(\t| )*\{/| \1/d,definition/
Run Code Online (Sandbox Code Playgroud)
更新:就像我上面提到的,我不懂语言,所以很难检查标签的实际定义.我在线查看,以下代码在某些网页中列为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;
}
Run Code Online (Sandbox Code Playgroud)
然后用以下内容:
--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/
Run Code Online (Sandbox Code Playgroud)
你得到两个新的标签left和table-scaffolding.因此,如果我left在数据内部的单词中,ctrl+]它会跳转到定义数据的行.你必须小心另一个关键字,因为它有一个-单词.所以,如果你在桌子上并按下,ctrl+]你将得到相同的错误标签.要使其工作,您必须在您的内容中添加以下内容.vimrc
set iskeyword+=-
Run Code Online (Sandbox Code Playgroud)
您应该能够将上述内容概括为您需要的其他标记,甚至可以构建一个通用正则表达式来处理所有标记,就像您最初的意思一样.
如果你发布一个特定的例子,说明你正在尝试使用的文件是什么样的,以及你试图获得的标签是什么,我相信我或其他人能够帮助找出一个表达式.