2015-01-05 3 views
2

Я улучшаю синтаксис Verilog, добавляя поддержку автоматического складывания. Изначально я делал следующее:Улучшение производительности регулярного выражения соответствия синтаксису

syn region verilogFold start="\<task\>" end="\<endtask\>" transparent keepend fold

Но поскольку task также используется в качестве syntax keyword, не обнаружены складки. Таким образом, чтобы избежать согласований task ключевого слова я сейчас с помощью:

syn region verilogFold start="\(^\s*task\)\@<=\s\+\w\+" end="\<endtask\>" transparent keepend fold

К сожалению, это приводит к огромному увеличению на время Vim требуется для обработки каждого файла.

Есть ли у кого-нибудь идеи о том, как это выражение можно улучшить, чтобы обеспечить лучшую производительность?

+0

Посмотрите на использование '\ zs',': h/\ zs'. В документах упоминается использование '\ zs' для скорости в документации на положительный внешний вид,': h/\ @<= '. –

+0

Это была хорошая идея и на самом деле быстрее. Но, по-видимому, это не обходит тот факт, что 'task' является частью группы« синтаксическое ключевое слово », так как не обнаружено фолд. – Vitor

ответ

2

Да, положительный lookbehind может быть медленным. В последней 7.4 версии Vim, вы можете ограничить поиск до 4 байт (через \@4<=), но я думаю, что в этом случае, это лучше, чтобы удалить отдельные определения ключевых слов и вместо того, чтобы цвето начало и конец региона через matchgroup:

syn region verilogFold matchgroup=verilogStatement start="\<task\>" end="\<endtask\>" transparent keepend fold 

Если это не сработает, попробуйте удалить атрибут transparent; Я не уверен, относится ли это к matchgroup, но я думаю, нет.

+0

Просто, чтобы подтвердить, правильно ли я понял решение: для этого требуется удалить «task» и «endtask» из списка ключевых слов verilogStatement. Я пытался расширить существующий 'синтаксис/verilog.vim', не изменяя его напрямую, читая его внутри моего файла синтаксиса. Можно ли удалить отдельное ключевое слово из группы? – Vitor

+0

Использование 'matchgroup' заставляет скопировать все старые слова' verilogStatement' обратно в мой файл синтаксиса, так как теперь он имеет правильную подсветку. Жаль, что нет ничего лучше, чем '- =' для синтаксических ключевых слов. – Vitor