Mercurial > vim
view runtime/syntax/cf.vim @ 35308:22c03485f222 v9.1.0456
patch 9.1.0456: Left shift is incorrect with vartabstop and shiftwidth=0
Commit: https://github.com/vim/vim/commit/88d4f255b7b7a19bb4f6489e0ad0956e47d51fed
Author: Gary Johnson <garyjohn@spocom.com>
Date: Sat Jun 1 20:51:33 2024 +0200
patch 9.1.0456: Left shift is incorrect with vartabstop and shiftwidth=0
Problem: Left shift is incorrect with vartabstop and shiftwidth=0
Solution: make tabstop_at() function aware of shift direction
(Gary Johnson)
The problem was that with 'vartabstop' set and 'shiftwidth' equal 0,
left shifts using << were shifting the line to the wrong column. The
tabstop to the right of the first character in the line was being used
as the shift amount instead of the tabstop to the left of that first
character.
The reason was that the tabstop_at() function always returned the value
of the tabstop to the right of the given column and was not accounting
for the direction of the shift.
The solution was to make tabstop_at() aware of the direction of the
shift and to choose the tabtop accordingly.
A test was added to check this behavior and make sure it doesn't
regress.
While at it, also fix a few indentation/alignment issues.
fixes: #14864
closes: #14887
Signed-off-by: Gary Johnson <garyjohn@spocom.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 01 Jun 2024 21:00:03 +0200 |
parents | 45987b1b77dc |
children |
line wrap: on
line source
" Vim syntax file " " Language: CFML (ColdFusion) " Author: Ernst M. van der Linden <ernst.vanderlinden@ernestoz.com> " License: The MIT License (MIT) " " Maintainer: Ernst M. van der Linden <ernst.vanderlinden@ernestoz.com> " URL: https://github.com/ernstvanderlinden/vim-coldfusion " Last Change: 2017 Nov 28 " " Filenames: *.cfc *.cfm " Quit when a syntax file was already loaded. if exists("b:current_syntax") finish endif " Using line continuation here. let s:cpo_save=&cpo set cpo-=C sy sync fromstart " 20171126: disabled as we have fast computers now. "sy sync maxlines=2000 sy case ignore " INCLUDES {{{ sy include @sqlSyntax $VIMRUNTIME/syntax/sql.vim " 20161010: Disabled include html highlighting as it contains huge keywords " regex, so it will have impact on performance. Use own simple SGML tag " coloring instead. "runtime! syntax/html.vim " / INCLUDES }}} " NUMBER {{{ sy match cfmlNumber \ "\v<\d+>" " / NUMBER }}} " EQUAL SIGN {{{ sy match cfmlEqualSign \ "\v\=" " / EQUAL SIGN }}} " BOOLEAN {{{ sy match cfmlBoolean \ "\v<(true|false)>" " / BOOLEAN }}} " HASH SURROUNDED {{{ sy region cfmlHashSurround \ keepend \ oneline \ start="#" \ end="#" \ skip="##" \ contains= \@cfmlOperator, \@cfmlPunctuation, \cfmlBoolean, \cfmlCoreKeyword, \cfmlCoreScope, \cfmlCustomKeyword, \cfmlCustomScope, \cfmlEqualSign, \cfmlFunctionName, \cfmlNumber " / HASH SURROUNDED }}} " OPERATOR {{{ " OPERATOR - ARITHMETIC {{{ " +7 -7 " ++i --i " i++ i-- " + - * / % " += -= *= /= %= " ^ mod sy match cfmlArithmeticOperator \ "\v \(\+|-)\ze\d \|(\+\+|--)\ze\w \|\w\zs(\+\+|--) \|(\s( \(\+|-|\*|\/|\%){1}\={,1} \|\^ \|mod \)\s) \" " / OPERATOR - ARITHMETIC }}} " OPERATOR - BOOLEAN {{{ " not and or xor eqv imp " ! && || sy match cfmlBooleanOperator \ "\v\s \(not|and|or|xor|eqv|imp \|\!|\&\&|\|\| \)(\s|\)) \|\s\!\ze\w \" " / OPERATOR - BOOLEAN }}} " OPERATOR - DECISION {{{ "is|equal|eq "is not|not equal|neq "contains|does not contain "greater than|gt "less than|lt "greater than or equal to|gte|ge "less than or equal to|lte|le "==|!=|>|<|>=|<= sy match cfmlDecisionOperator \ "\v\s \(is|equal|eq \|is not|not equal|neq \|contains|does not contain \|greater than|gt \|less than|lt \|greater than or equal to|gte|ge \|less than or equal to|lte|le \|(!|\<|\>|\=){1}\= \|\< \|\> \)\s" " / OPERATOR - DECISION }}} " OPERATOR - STRING {{{ " & " &= sy match cfmlStringOperator \ "\v\s\&\={,1}\s" " / OPERATOR - STRING }}} " OPERATOR - TERNARY {{{ " ? : sy match cfmlTernaryOperator \ "\v\s \\?|\: \\s" " / OPERATOR - TERNARY }}} sy cluster cfmlOperator \ contains= \cfmlArithmeticOperator, \cfmlBooleanOperator, \cfmlDecisionOperator, \cfmlStringOperator, \cfmlTernaryOperator " / OPERATOR }}} " PARENTHESIS {{{ sy cluster cfmlParenthesisRegionContains \ contains= \@cfmlAttribute, \@cfmlComment, \@cfmlFlowStatement, \@cfmlOperator, \@cfmlPunctuation, \cfmlBoolean, \cfmlBrace, \cfmlCoreKeyword, \cfmlCoreScope, \cfmlCustomKeyword, \cfmlCustomScope, \cfmlEqualSign, \cfmlFunctionName, \cfmlNumber, \cfmlStorageKeyword, \cfmlStorageType sy region cfmlParenthesisRegion1 \ extend \ matchgroup=cfmlParenthesis1 \ transparent \ start=/(/ \ end=/)/ \ contains= \cfmlParenthesisRegion2, \@cfmlParenthesisRegionContains sy region cfmlParenthesisRegion2 \ matchgroup=cfmlParenthesis2 \ transparent \ start=/(/ \ end=/)/ \ contains= \cfmlParenthesisRegion3, \@cfmlParenthesisRegionContains sy region cfmlParenthesisRegion3 \ matchgroup=cfmlParenthesis3 \ transparent \ start=/(/ \ end=/)/ \ contains= \cfmlParenthesisRegion1, \@cfmlParenthesisRegionContains sy cluster cfmlParenthesisRegion \ contains= \cfmlParenthesisRegion1, \cfmlParenthesisRegion2, \cfmlParenthesisRegion3 " / PARENTHESIS }}} " BRACE {{{ sy match cfmlBrace \ "{\|}" sy region cfmlBraceRegion \ extend \ fold \ keepend \ transparent \ start="{" \ end="}" " / BRACE }}} " PUNCTUATION {{{ " PUNCTUATION - BRACKET {{{ sy match cfmlBracket \ "\(\[\|\]\)" \ contained " / PUNCTUATION - BRACKET }}} " PUNCTUATION - CHAR {{{ sy match cfmlComma "," sy match cfmlDot "\." sy match cfmlSemiColon ";" " / PUNCTUATION - CHAR }}} " PUNCTUATION - QUOTE {{{ sy region cfmlSingleQuotedValue \ matchgroup=cfmlSingleQuote \ start=/'/ \ skip=/''/ \ end=/'/ \ contains= \cfmlHashSurround sy region cfmlDoubleQuotedValue \ matchgroup=cfmlDoubleQuote \ start=/"/ \ skip=/""/ \ end=/"/ \ contains= \cfmlHashSurround sy cluster cfmlQuotedValue \ contains= \cfmlDoubleQuotedValue, \cfmlSingleQuotedValue sy cluster cfmlQuote \ contains= \cfmlDoubleQuote, \cfmlSingleQuote " / PUNCTUATION - QUOTE }}} sy cluster cfmlPunctuation \ contains= \@cfmlQuote, \@cfmlQuotedValue, \cfmlBracket, \cfmlComma, \cfmlDot, \cfmlSemiColon " / PUNCTUATION }}} " TAG START AND END {{{ " tag start " <cf...> " s^^ e sy region cfmlTagStart \ keepend \ transparent \ start="\c<cf_*" \ end=">" \ contains= \@cfmlAttribute, \@cfmlComment, \@cfmlOperator, \@cfmlParenthesisRegion, \@cfmlPunctuation, \@cfmlQuote, \@cfmlQuotedValue, \cfmlAttrEqualSign, \cfmlBoolean, \cfmlBrace, \cfmlCoreKeyword, \cfmlCoreScope, \cfmlCustomKeyword, \cfmlCustomScope, \cfmlEqualSign, \cfmlFunctionName, \cfmlNumber, \cfmlStorageKeyword, \cfmlStorageType, \cfmlTagBracket, \cfmlTagName " tag end " </cf...> " s^^^ e sy match cfmlTagEnd \ transparent \ "\c</cf_*[^>]*>" \ contains= \cfmlTagBracket, \cfmlTagName " tag bracket " </...> " ^^ ^ sy match cfmlTagBracket \ contained \ "\(<\|>\|\/\)" " tag name " <cf...> " s^^^e sy match cfmlTagName \ contained \ "\v<\/*\zs\ccf\w*" " / TAG START AND END }}} " ATTRIBUTE NAME AND VALUE {{{ sy match cfmlAttrName \ contained \ "\v(var\s)@<!\w+\ze\s*\=([^\=])+" sy match cfmlAttrValue \ contained \ "\v(\=\"*)\zs\s*\w*" sy match cfmlAttrEqualSign \ contained \ "\v\=" sy cluster cfmlAttribute \ contains= \@cfmlQuotedValue, \cfmlAttrEqualSign, \cfmlAttrName, \cfmlAttrValue, \cfmlCoreKeyword, \cfmlCoreScope " / ATTRIBUTE NAME AND VALUE }}} " TAG REGION AND FOLDING {{{ " CFCOMPONENT REGION AND FOLD {{{ " <cfcomponent " s^^^^^^^^^^^ " </cfcomponent> " ^^^^^^^^^^^^^e sy region cfmlComponentTagRegion \ fold \ keepend \ transparent \ start="\c<cfcomponent" \ end="\c</cfcomponent>" " / CFCOMPONENT REGION AND FOLD }}} " CFFUNCTION REGION AND FOLD {{{ " <cffunction " s^^^^^^^^^^ " </cffunction> " ^^^^^^^^^^^^e sy region cfmlFunctionTagRegion \ fold \ keepend \ transparent \ start="\c<cffunction" \ end="\c</cffunction>" " / CFFUNCTION REGION AND FOLD }}} " CFIF REGION AND FOLD {{{ " <cfif " s^^^^ " </cfif> " ^^^^^^e sy region cfmlIfTagRegion \ fold \ keepend \ transparent \ start="\c<cfif" \ end="\c</cfif>" " / CFIF REGION AND FOLD }}} " CFLOOP REGION AND FOLD {{{ " <cfloop " s^^^^^^ " </cfloop> " ^^^^^^^^e sy region cfmlLoopTagRegion \ fold \ keepend \ transparent \ start="\c<cfloop" \ end="\c</cfloop>" " / CFLOOP REGION AND FOLD }}} " CFOUTPUT REGION AND FOLD {{{ " <cfoutput " s^^^^^^^^ " </cfoutput> " ^^^^^^^^^^e sy region cfmlOutputTagRegion \ fold \ keepend \ transparent \ start="\c<cfoutput" \ end="\c</cfoutput>" " / CFOUTPUT REGION AND FOLD }}} " CFQUERY REGION AND FOLD {{{ " <cfquery " s^^^^^^^ " </cfquery> " ^^^^^^^^^e "\@cfmlSqlStatement, sy region cfmlQueryTagRegion \ fold \ keepend \ transparent \ start="\c<cfquery" \ end="\c</cfquery>" \ contains= \@cfmlSqlStatement, \cfmlTagStart, \cfmlTagEnd, \cfmlTagComment " / CFQUERY REGION AND FOLD }}} " SAVECONTENT REGION AND FOLD {{{ " <savecontent " s^^^^^^^^^^^ " </savecontent> " ^^^^^^^^^^^^^e sy region cfmlSavecontentTagRegion \ fold \ keepend \ transparent \ start="\c<cfsavecontent" \ end="\c</cfsavecontent>" " / SAVECONTENT REGION AND FOLD }}} " CFSCRIPT REGION AND FOLD {{{ " <cfscript> " s^^^^^^^^^ " </cfscript> " ^^^^^^^^^^e "\cfmlCustomScope, sy region cfmlScriptTagRegion \ fold \ keepend \ transparent \ start="\c<cfscript>" \ end="\c</cfscript>" \ contains= \@cfmlComment, \@cfmlFlowStatement, \cfmlHashSurround, \@cfmlOperator, \@cfmlParenthesisRegion, \@cfmlPunctuation, \cfmlBoolean, \cfmlBrace, \cfmlCoreKeyword, \cfmlCoreScope, \cfmlCustomKeyword, \cfmlCustomScope, \cfmlEqualSign, \cfmlFunctionDefinition, \cfmlFunctionName, \cfmlNumber, \cfmlOddFunction, \cfmlStorageKeyword, \cfmlTagEnd, \cfmlTagStart " / CFSCRIPT REGION AND FOLD }}} " CFSWITCH REGION AND FOLD {{{ " <cfswitch " s^^^^^^^^ " </cfswitch> " ^^^^^^^^^^e sy region cfmlSwitchTagRegion \ fold \ keepend \ transparent \ start="\c<cfswitch" \ end="\c</cfswitch>" " / CFSWITCH REGION AND FOLD }}} " CFTRANSACTION REGION AND FOLD {{{ " <cftransaction " s^^^^^^^^^^^^^ " </cftransaction> " ^^^^^^^^^^^^^^^e sy region cfmlTransactionTagRegion \ fold \ keepend \ transparent \ start="\c<cftransaction" \ end="\c</cftransaction>" " / CFTRANSACTION REGION AND FOLD }}} " CUSTOM TAG REGION AND FOLD {{{ " <cf_...> " s^^^ ^ " </cf_...> " ^^^^^ e sy region cfmlCustomTagRegion \ fold \ keepend \ transparent \ start="\c<cf_[^>]*>" \ end="\c</cf_[^>]*>" " / CUSTOM TAG REGION AND FOLD }}} " / TAG REGION AND FOLDING }}} " COMMENT {{{ " COMMENT BLOCK {{{ " /*...*/ " s^ ^e sy region cfmlCommentBlock \ keepend \ start="/\*" \ end="\*/" \ contains= \cfmlMetaData " / COMMENT BLOCK }}} " COMMENT LINE {{{ " //... " s^ sy match cfmlCommentLine \ "\/\/.*" " / COMMENT LINE }}} sy cluster cfmlComment \ contains= \cfmlCommentBlock, \cfmlCommentLine " / COMMENT }}} " TAG COMMENT {{{ " <!---...---> " s^^^^ ^^^e sy region cfmlTagComment \ keepend \ start="<!---" \ end="--->" \ contains= \cfmlTagComment " / TAG COMMENT }}} " FLOW STATEMENT {{{ " BRANCH FLOW KEYWORD {{{ sy keyword cfmlBranchFlowKeyword \ break \ continue \ return " / BRANCH KEYWORD }}} " DECISION FLOW KEYWORD {{{ sy keyword cfmlDecisionFlowKeyword \ case \ defaultcase \ else \ if \ switch " / DECISION FLOW KEYWORD }}} " LOOP FLOW KEYWORD {{{ sy keyword cfmlLoopFlowKeyword \ do \ for \ in \ while " / LOOP FLOW KEYWORD }}} " TRY FLOW KEYWORD {{{ sy keyword cfmlTryFlowKeyword \ catch \ finally \ rethrow \ throw \ try " / TRY FLOW KEYWORD }}} sy cluster cfmlFlowStatement \ contains= \cfmlBranchFlowKeyword, \cfmlDecisionFlowKeyword, \cfmlLoopFlowKeyword, \cfmlTryFlowKeyword " / FLOW STATEMENT }}} " STORAGE KEYWORD {{{ sy keyword cfmlStorageKeyword \ var " / STORAGE KEYWORD }}} " STORAGE TYPE {{{ sy match cfmlStorageType \ contained \ "\v< \(any \|array \|binary \|boolean \|date \|numeric \|query \|string \|struct \|uuid \|void \|xml \){1}\ze(\s*\=)@!" " / STORAGE TYPE }}} " CORE KEYWORD {{{ sy match cfmlCoreKeyword \ "\v< \(new \|required \)\ze\s" " / CORE KEYWORD }}} " CORE SCOPE {{{ sy match cfmlCoreScope \ "\v< \(application \|arguments \|attributes \|caller \|cfcatch \|cffile \|cfhttp \|cgi \|client \|cookie \|form \|local \|request \|server \|session \|super \|this \|thisTag \|thread \|variables \|url \){1}\ze(,|\.|\[|\)|\s)" " / CORE SCOPE }}} " SQL STATEMENT {{{ sy cluster cfmlSqlStatement \ contains= \@cfmlParenthesisRegion, \@cfmlQuote, \@cfmlQuotedValue, \@sqlSyntax, \cfmlBoolean, \cfmlDot, \cfmlEqualSign, \cfmlFunctionName, \cfmlHashSurround, \cfmlNumber " / SQL STATEMENT }}} " TAG IN SCRIPT {{{ sy match cfmlTagNameInScript \ "\vcf_*\w+\s*\ze\(" " / TAG IN SCRIPT }}} " METADATA {{{ sy region cfmlMetaData \ contained \ keepend \ start="@\w\+" \ end="$" \ contains= \cfmlMetaDataName sy match cfmlMetaDataName \ contained \ "@\w\+" " / METADATA }}} " COMPONENT DEFINITION {{{ sy region cfmlComponentDefinition \ start="component" \ end="{"me=e-1 \ contains= \@cfmlAttribute, \cfmlComponentKeyword sy match cfmlComponentKeyword \ contained \ "\v<component>" " / COMPONENT DEFINITION }}} " INTERFACE DEFINITION {{{ sy match cfmlInterfaceDefinition \ "interface\s.*{"me=e-1 \ contains= \cfmlInterfaceKeyword sy match cfmlInterfaceKeyword \ contained \ "\v<interface>" " / INTERFACE DEFINITION }}} " PROPERTY {{{ sy region cfmlProperty \ transparent \ start="\v<property>" \ end=";"me=e-1 \ contains= \@cfmlQuotedValue, \cfmlAttrEqualSign, \cfmlAttrName, \cfmlAttrValue, \cfmlPropertyKeyword sy match cfmlPropertyKeyword \ contained \ "\v<property>" " / PROPERTY }}} " FUNCTION DEFINITION {{{ sy match cfmlFunctionDefinition \ "\v \(<(public|private|package)\s){,1} \(< \(any \|array \|binary \|boolean \|date \|numeric \|query \|string \|struct \|uuid \|void \|xml \)\s){,1} \<function\s\w+\s*\("me=e-1 \ contains= \cfmlFunctionKeyword, \cfmlFunctionModifier, \cfmlFunctionName, \cfmlFunctionReturnType " FUNCTION KEYWORD {{{ sy match cfmlFunctionKeyword \ contained \ "\v<function>" " / FUNCTION KEYWORD }}} " FUNCTION MODIFIER {{{ sy match cfmlFunctionModifier \ contained \ "\v< \(public \|private \|package \)>" " / FUNCTION MODIFIER }}} " FUNCTION RETURN TYPE {{{ sy match cfmlFunctionReturnType \ contained \ "\v \(any \|array \|binary \|boolean \|date \|numeric \|query \|string \|struct \|uuid \|void \|xml \)" " / FUNCTION RETURN TYPE }}} " FUNCTION NAME {{{ " specific regex for core functions decreases performance " so use the same highlighting for both function types sy match cfmlFunctionName \ "\v<(cf|if|elseif|throw)@!\w+\s*\ze\(" " / FUNCTION NAME }}} " / FUNCTION DEFINITION }}} " ODD FUNCTION {{{ sy region cfmlOddFunction \ transparent \ start="\v< \(abort \|exit \|import \|include \|lock \|pageencoding \|param \|savecontent \|thread \|transaction \){1}" \ end="\v(\{|;)"me=e-1 \ contains= \@cfmlQuotedValue, \cfmlAttrEqualSign, \cfmlAttrName, \cfmlAttrValue, \cfmlCoreKeyword, \cfmlOddFunctionKeyword, \cfmlCoreScope " ODD FUNCTION KEYWORD {{{ sy match cfmlOddFunctionKeyword \ contained \ "\v< \(abort \|exit \|import \|include \|lock \|pageencoding \|param \|savecontent \|thread \|transaction \)\ze(\s|$|;)" " / ODD FUNCTION KEYWORD }}} " / ODD FUNCTION }}} " CUSTOM {{{ " CUSTOM KEYWORD {{{ sy match cfmlCustomKeyword \ contained \ "\v< \(customKeyword1 \|customKeyword2 \|customKeyword3 \)>" " / CUSTOM KEYWORD }}} " CUSTOM SCOPE {{{ sy match cfmlCustomScope \ contained \ "\v< \(prc \|rc \|event \|(\w+Service) \){1}\ze(\.|\[)" " / CUSTOM SCOPE }}} " / CUSTOM }}} " SGML TAG START AND END {{{ " SGML tag start " <...> " s^^^e sy region cfmlSGMLTagStart \ keepend \ transparent \ start="\v(\<cf)@!\zs\<\w+" \ end=">" \ contains= \@cfmlAttribute, \@cfmlComment, \@cfmlOperator, \@cfmlParenthesisRegion, \@cfmlPunctuation, \@cfmlQuote, \@cfmlQuotedValue, \cfmlAttrEqualSign, \cfmlBoolean, \cfmlBrace, \cfmlCoreKeyword, \cfmlCoreScope, \cfmlCustomKeyword, \cfmlCustomScope, \cfmlEqualSign, \cfmlFunctionName, \cfmlNumber, \cfmlStorageKeyword, \cfmlStorageType, \cfmlTagBracket, \cfmlSGMLTagName " SGML tag end " </...> " s^^^^e sy match cfmlSGMLTagEnd \ transparent \ "\v(\<\/cf)@!\zs\<\/\w+\>" \ contains= \cfmlTagBracket, \cfmlSGMLTagName " SGML tag name " <...> " s^^^e sy match cfmlSGMLTagName \ contained \ "\v(\<\/*)\zs\w+" " / SGML TAG START AND END }}} " HIGHLIGHTING {{{ hi link cfmlNumber Number hi link cfmlBoolean Boolean hi link cfmlEqualSign Keyword " HASH SURROUND hi link cfmlHash PreProc hi link cfmlHashSurround PreProc " OPERATOR hi link cfmlArithmeticOperator Function hi link cfmlBooleanOperator Function hi link cfmlDecisionOperator Function hi link cfmlStringOperator Function hi link cfmlTernaryOperator Function " PARENTHESIS hi link cfmlParenthesis1 Statement hi link cfmlParenthesis2 String hi link cfmlParenthesis3 Delimiter " BRACE hi link cfmlBrace PreProc " PUNCTUATION - BRACKET hi link cfmlBracket Statement " PUNCTUATION - CHAR hi link cfmlComma Comment hi link cfmlDot Comment hi link cfmlSemiColon Comment " PUNCTUATION - QUOTE hi link cfmlDoubleQuote String hi link cfmlDoubleQuotedValue String hi link cfmlSingleQuote String hi link cfmlSingleQuotedValue String " TAG START AND END hi link cfmlTagName Function hi link cfmlTagBracket Comment " ATTRIBUTE NAME AND VALUE hi link cfmlAttrName Type hi link cfmlAttrValue Special " COMMENT hi link cfmlCommentBlock Comment hi link cfmlCommentLine Comment hi link cfmlTagComment Comment " FLOW STATEMENT hi link cfmlDecisionFlowKeyword Conditional hi link cfmlLoopFlowKeyword Repeat hi link cfmlTryFlowKeyword Exception hi link cfmlBranchFlowKeyword Keyword " STORAGE KEYWORD hi link cfmlStorageKeyword Keyword " STORAGE TYPE hi link cfmlStorageType Keyword " CORE KEYWORD hi link cfmlCoreKeyword PreProc " CORE SCOPE hi link cfmlCoreScope Keyword " TAG IN SCRIPT hi link cfmlTagNameInScript Function " METADATA " meta data value = cfmlMetaData hi link cfmlMetaData String hi link cfmlMetaDataName Type " COMPONENT DEFINITION hi link cfmlComponentKeyword Keyword " INTERFACE DEFINITION hi link cfmlInterfaceKeyword Keyword " PROPERTY hi link cfmlPropertyKeyword Keyword " FUNCTION DEFINITION hi link cfmlFunctionKeyword Keyword hi link cfmlFunctionModifier Keyword hi link cfmlFunctionReturnType Keyword hi link cfmlFunctionName Function " ODD FUNCTION hi link cfmlOddFunctionKeyword Function " CUSTOM hi link cfmlCustomKeyword Keyword hi link cfmlCustomScope Structure " SGML TAG hi link cfmlSGMLTagName Ignore " / HIGHLIGHTING }}} let b:current_syntax = "cfml" let &cpo = s:cpo_save unlet s:cpo_save