Это не может работать только с этим единственным matlabLoop
регионом. Вам также необходим полный анализ структуры if...end
; то есть другое определение синтаксиса для всего блока условий. Или вы расширяете существующий синтаксический скрипт $VIMRUNTIME/syntax/matlab.vim
(со свертыванием)? В следующем предполагается, что (но решение также применимо к автономному определению синтаксиса).
Этот синтаксический сценарий определяет простое ключевое слово для end
, поэтому оно будет соответствовать где угодно. Если вы хотите исключить i:end
из соответствия, вам нужно сделать это соответствие более точным, например, с отрицательным взглядом за утверждением («не должно предшествовать двоеточие» - я не знаю синтаксис Matlab, так что это всего лишь предложение по технике, а не полностью правильное решение).
Это оригинальное определение из синтаксического скрипта:
syn keyword matlabConditional else elseif end if otherwise
Чтобы удалить end
, мы должны очистить его и переопределить:
syntax clear matlabConditional
syntax keyword matlabConditional else elseif if otherwise
Теперь мы можем указать более точную спецификацию, используя :help /\@<!
для подтверждения отсутствия двоеточия впереди и \<...\>
для сохранения границ ключевых слов исходного определения:
syntax match matlabConditional ":\@<!\<end\>"
Если вы считаете, что это расширение обычно полезно для синтаксиса, отправьте исправление автору сценария синтаксиса; его контактная информация находится в заголовке этого файла.