2010-01-29 2 views
4

Я пытаюсь следовать за instructions on the Vim wiki, чтобы получить плагин matchit, работающий с файлами ColdFusion (* .cfm), содержащий как теги ColdFusion, так и HTML, работающие на MacVim.Как получить плагин VIM matchit, работающий с ColdFusion и HTML?

У меня есть файл синтаксиса для ColdFusion (cf.vim), установленный в $ HOME/.vim/syntax/cf.vim, последняя версия соответствия, установленная в .vim/plugin/matchit.vim, и я «ве добавили следующий блок до конца конца matchit.vim:

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

Я также добавил следующую строку к концу моего $ HOME/.vimrc файл:

filetype plugin on 

Наконец Я добавил предложенный блок в конец 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.

ответ

2

Я сделал что-то подобное для языка шаблонов django. Я просто добавил выражения html в список b: match_words. Например. (Обратите внимание на первые три не Джанго ищет выражения)

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, если в файлах синтаксиса для холодного слияния нет соответствия.

Смежные вопросы