请注意:在 VIM 中编辑 HTML 时,我已经通过此链接跳转到 CSS 定义,但它对我没有帮助。
我希望跳转到 CSS 定义或 html 文件中的 javascript 函数。我很想在单词下方点击一个组合键来跳转到它的定义,而不仅仅是定义所在的文件。
我目前需要在打开的缓冲区中搜索单词,然后到达所需缓冲区中的所有搜索结果。这非常耗时。
请帮我解决这个非常常规的要求。
请注意:在 VIM 中编辑 HTML 时,我已经通过此链接跳转到 CSS 定义,但它对我没有帮助。
我希望跳转到 CSS 定义或 html 文件中的 javascript 函数。我很想在单词下方点击一个组合键来跳转到它的定义,而不仅仅是定义所在的文件。
我目前需要在打开的缓冲区中搜索单词,然后到达所需缓冲区中的所有搜索结果。这非常耗时。
请帮我解决这个非常常规的要求。
这个快速而肮脏的函数似乎对 *.html -> *.css 有用:
function! JumpToCSS()
let id_pos = searchpos("id", "nb", line('.'))[1]
let class_pos = searchpos("class", "nb", line('.'))[1]
if class_pos > 0 || id_pos > 0
if class_pos < id_pos
execute ":vim '#".expand('<cword>')."' **/*.css"
elseif class_pos > id_pos
execute ":vim '.".expand('<cword>')."' **/*.css"
endif
endif
endfunction
nnoremap <F9> :call JumpToCSS()<CR>
测试.html
<html>
<body>
<div class="foo" id="bar">lorem</div>
<div id="bar" class="foo">ipsum</div>
<div id="bar">dolor</div>
<div class="foo">sit</div>
</body>
</html>
foo/foo.css
.foo {
background-color: red;
}
酒吧/酒吧.css
#bar {
border-color: gold;
}
将光标放在 中的任何值foo
或bar
属性值上test.html
,点击<F9>
跳转到正确文件中的正确定义。可以修改该功能以拆分打开目标文件,仅搜索链接的样式表......或者被 ZyX 完全嘲笑和破坏;-)。
编辑
一些额外的指针:
:help iskeyword
使此函数与破折号连接的名称一起使用:help expand()
:help searchpos()
以及:help search()
论点的含义:help starstar
使用**
通配符我认为这应该是一个单独的答案,所以在那里。
您可以添加 CSS 支持ctags
并使用它来跳转到定义,就像您为 JavaScript 所做的那样。就像在文件中添加以下行一样简单~/.ctags
:
--langdef=css
--langmap=css:.css
--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/
完成后,clasic:!ctags -R .
将正确索引您的 CSS 文件,您将能够:tag .myClass
跳转到正确 CSS 文件中的正确 CSS 定义。
不过,有一个问题。ids标签将包含的类.
将不会起作用。最简单的解决方案是使用“regexp search”而不是“whole tag search” :。#
:tag myClass
:tag .myClass
:tag /myClass
这两个映射完美无缺(对于 JS 有一段时间,对于 CSS 有几天):
" alternative to <C-]>
" place your cursor on an id or class and hit <leader>]
" to jump to the definition
nnoremap <leader>] :tag /<c-r>=expand('<cword>')<cr><cr>
" alternative to <C-w>}
" place your cursor on an id or class and hit <leader>}
" to show a preview of the definition. This doesn't seem to be
" very useful for CSS but it rocks for JavaScript
nnoremap <leader>} :ptag /<c-r>=expand('<cword>')<cr><cr>