gpt4 book ai didi

vim - 如何让 VIM matchit 插件与 ColdFusion 和 HTML 一起使用?

转载 作者:行者123 更新时间:2023-12-03 04:27:28 25 4
gpt4 key购买 nike

我一直在尝试遵循instructions on the Vim wiki让 matchit 插件与在 MacVim 上运行的包含 ColdFusion 和 HTML 标签的 ColdFusion (*.cfm) 文件一起使用。

我已经在 $HOME/.vim/syntax/cf.vim 中安装了 ColdFusion (cf.vim) 的语法文件,在 .vim/plugin/matchit.vim 中安装了最新版本的 matchit,并且我'我们将以下 block 添加到 matchit.vim 的末尾:

au FileType html,jsp,php,cf if !exists("b:match_words") |

我还在 $HOME/.vimrc 文件的末尾添加了以下行:

filetype plugin on

最后我将建议的 block 添加到 cf.vim 的末尾:

" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif

" Don't load another plugin for this buffer
let b:did_ftplugin = 1

if exists("loaded_matchit")
let b:match_words = '<cfif\>.\{-}>\|<cfif\>.\{-}$:'
\ . '<cfelseif\>.\{-}>\|<cfelseif\>.\{-}$:'
\ . '<cfelse\>.\{-}>\|<cfelse\>.\{-}$:'
\ . '<\/cfif>,'
\ . '<cfloop\>.\{-}>\|<cfloop\>.\{-}$:'
\ . '<\/cfloop\>.\{-}>,'
\ . '<cfoutput\>.\{-}>\|<cfoutput\>.\{-}$:'
\ . '<\/cfoutput\>.\{-}>,'
\ . '<cftimer\>.\{-}>\|<cftimer\>.\{-}$:'
\ . '<\/cftimer\>.\{-}>,'
\ . '<!---:--->,'
\ . '<cfquery\>.\{-}>\|<cfquery\>.\{-}$:<\/cfquery\>.\{-}>,'
\ . '<cfscript>:<\/cfscript>'
" Since we are counting things outside of comments only,
" It is important we account comments accurately or match_words
" will be wrong and therefore useless
syntax sync fromstart

endif " exists("loaded_matchit")

但是,当我按 % 键跳转到匹配标签时,根据文件扩展名,它只能工作一半。如果文件具有 .cfm 扩展名,我可以从 <cfif> 跳转至</cfif>但不是<body></body>例如。如果扩展名是 .html,情况则相反。

但是查看 cf.vim 的代码,它似乎应该与混合在同一文件中的 ColdFusion 和 HTML 标签一起使用:

" Inherit syntax rules from the standard HTML syntax file
if version < 600
source <sfile>:p:h/html.vim
else
runtime! syntax/html.vim
endif

在相关注释中我添加了:

let b:match_ignorecase = 1

到 $HOME/.vimrc 以禁用区分大小写,如文档中所述,但它仍然仅适用于 cfif 而不是 CFIF。

最佳答案

我对 django 模板语言做了类似的事情。我刚刚在 b:match_words 列表中添加了 html 表达式。例如。 (注意前三个非 django 表达式)

if exists("loaded_matchit")
let b:match_ignorecase = 1
let b:match_skip = 's:Comment'
let b:match_words = '<:>,' .
\ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
\ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>,' .-
\ '{% *if .*%}:{% *else *%}:{% *endif *%},' .-
\ '{% *ifequal .*%}:{% *else *%}:{% *endifequal *%},' .-
\ '{% *ifnotequal .*%}:{% *else *%}:{% *endifnotequal *%},' .-
\ '{% *ifchanged .*%}:{% *else *%}:{% *endifchanged *%},' .-
\ '{% *for .*%}:{% *endfor *%},' .-
\ '{% *with .*%}:{% *endwith *%},' .
\ '{% *comment .*%}:{% *endcomment *%},' .
\ '{% *block .*%}:{% *endblock *%},' .
\ '{% *filter .*%}:{% *endfilter *%},' .
\ '{% *spaceless .*%}:{% *endspaceless *%}'-
endif

这三个表达式涵盖了所有 html/xml,因此显然无论是谁提出这三个表达式,都比我更了解 vim 正则表达式。

如果冷聚变的语法文件中没有匹配项,我建议将您的代码提交给 vim.org cf.vim 维护者。

关于vim - 如何让 VIM matchit 插件与 ColdFusion 和 HTML 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2165582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com