如何配置ctags以使用CSS,SCSS,HTML?

Tim*_*nov 5 vim ctags exuberant-ctags

我已经在stackoverflow上阅读了很多博客文章和答案,但似乎我做错了,因为我仍然有E388: Couldn't find definition错误.我做了什么:

  • 从这里下载ctags http://ctags.sourceforge.net/
  • 安装方式: ./configure && make install
  • tags+=tags;$HOME在我的.vimrc文件中设置
  • 添加一些行~/.ctags(见下文)
  • 不要ctags -R .在项目根,并得到一些警告(见下文)
  • 检查课程:tag .<C-D>,给我一个很大的课程列表(很高兴)

警告:

ctags: Warning: regcomp ([A-Za-z0-9._$]+)[ t]*[:=][ t]*{: Unmatched \{
ctags: Warning: regcomp ([A-Za-z0-9._$()]+)[ t]*[:=][ t]*function[ t]*(: Unmatched ( or \(
ctags: Warning: regcomp ([A-Za-z0-9._$]+)[ t]*[:=][ t]*[: Invalid regular expression
ctags: Warning: cannot open source file "static/img/touch/packages" : No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的~/.ctags文件如下:

--exclude=*.min.js
--exclude=*.min.css
--exclude=*.map
--exclude=.backup
--exclude=.sass-cache
--exclude=vendors
--exclude=.git

--langdef=css
--langmap=css:.css
--langmap=css:+.sass
--langmap=css:+.styl
--langmap=css:+.less
--regex-css=/^[ \t]*\.([A-Za-z0-9_-]+)/.\1/c,class,classes/
--regex-css=/^[ \t]*#([A-Za-z0-9_-]+)/#\1/i,id,ids/
--regex-css=/^[ \t]*(([A-Za-z0-9_-]+[ \t\n,]+)+)\{/\1/t,tag,tags/
--regex-css=/^[ \t]*@media\s+([A-Za-z0-9_-]+)/\1/m,media,medias/

--langdef=scss
--langmap=scss:.scss
--regex-scss=/^[ \t]*@mixin ([A-Za-z0-9_-]+)/\1/m,mixin,mixins/
--regex-scss=/^[ \t]*\$([A-Za-z0-9_-]+)/\1/v,variable,variables/
--regex-scss=/^([A-Za-z0-9_-]*)*(\.[A-Za-z0-9_-]+) *[,{]/\2/c,class,classes/
--regex-scss=/^[ \t]+(\.[A-Za-z0-9_-]+) *[,{]/\1/c,class,classes/
--regex-scss=/^(.*)*\#([A-Za-z0-9_-]+) *[,{]/\2/i,id,ids/
--regex-scss=/^[ \t]*#([A-Za-z0-9_-]+)/\1/i,id,ids/
--regex-scss=/(^([A-Za-z0-9_-])*([A-Za-z0-9_-]+)) *[,|\{]/\1/t,tag,tags/
--regex-scss=/(^([^\/\/])*)[ \t]+([A-Za-z0-9_-]+)) *[,|\{]/\3/t,tag,tags/
--regex-scss=/(^(.*, *)([A-Za-z0-9_-]+)) *[,|\{]/\3/t,tag,tags/
--regex-scss=/(^[ \t]+([A-Za-z0-9_-]+)) *[,|\{]/\1/t,tag,tags/
--regex-scss=/^[ \t]*@media\s+([A-Za-z0-9_-]+)/\1/d,media,media/

--regex-html=/id="([A-Za-z0-9_-]+)"/\1/i,id,ids/
--regex-html=/class="([A-Za-z0-9_-]+)"/\1/c,class,classes/

--langdef=js
--langmap=js:.js
--regex-js=/([A-Za-z0-9._$]+)[ t]*[:=][ t]*{/1/,object/
--regex-js=/([A-Za-z0-9._$()]+)[ t]*[:=][ t]*function[ t]*(/1/,function/
--regex-js=/function[ t]+([A-Za-z0-9._$]+)[ t]*(([^)]))/1/,function/
--regex-js=/([A-Za-z0-9._$]+)[ t]*[:=][ t]*[/1/,array/
--regex-js=/([^= ]+)[ t]*=[ t]*[^"]'[^']*/1/,string/
--regex-js=/([^= ]+)[ t]*=[ t]*[^']"[^"]*/1/,string/
Run Code Online (Sandbox Code Playgroud)

项目结构:

在此输入图像描述

无论(static/index.html,static/css/main.scssstatic/css/components/set.scss)我尝试"跳转到"用]^D我总是得到E388: Couldn't find definition.怎么了?

UPDATE

<C-]>_col-2名称的开头按下:

  • 如果<div class="_col-2">..给出E426: Tag not found: _col.看起来vim没有正确检测classname.
  • 如果.class { @extend ._col-2; }给出相同的.

作为@romainl表明,添加后set iskeyword+=-.vimrc冲是关键字的一部分,按压<div class="_col-2">..在该行的开头抛出了我.

rom*_*inl 5

关于E426: Tag not found: txal-center……

.ctags遗嘱中的这些行.foo-bar带有前导点)在*.scss文件中索引:

--regex-scss=/^([A-Za-z0-9_-]*)*(\.[A-Za-z0-9_-]+) *[,{]/\2/c,class,classes/
--regex-scss=/^[ \t]+(\.[A-Za-z0-9_-]+) *[,{]/\1/c,class,classes/
Run Code Online (Sandbox Code Playgroud)

当你<C-]>在 HTML 文档中按下一个类名时,Vim 会寻找那个确切的类名,比如foo-bar,但它不会找到它,因为你只有.foo-bar在你的tags文件中。那是因为 Vim 默认进行“全字”搜索。

这个特定问题的解决方案是将点留在标签之外:

--regex-scss=/^([A-Za-z0-9_-]*)*\.([A-Za-z0-9_-]+) *[,{]/\2/c,class,classes/
--regex-scss=/^[ \t]+\.([A-Za-z0-9_-]+) *[,{]/\1/c,class,classes/
Run Code Online (Sandbox Code Playgroud)