2016-09-14 2 views
1

Есть ли способ получить доступ к регулярному выражению объекта синтаксиса, хранящегося в vim? Я предпочел бы не иметь для разбора файлов синтаксиса или выхода выключен, напримерextract regex используется для определения объекта синтаксиса в vim

:syntax list vimFunc 

--- Syntax items --- 
vimFunc  xxx match /\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA- Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(/ contains=vimFuncName,vimUserFunc,vimExecute 
       links to vimError 
+0

Для чего вам нужно регулярное выражение? Написать собственный (похожий) синтаксис или действительно программно расширить его? –

+0

Я действительно хочу использовать их в качестве псевдонимов вместе с командой ': vimgrep'. – HeLi8

ответ

0

Но что является регулярного выражения используется для определения синтаксиса группы.

Чтобы получить правильный файл синтаксиса, вам нужно только посмотреть в :scriptnames, так как :syntax list <group> будет работать только для групп в синтаксисе текущего типа файла. Вы получаете тип файла с set ft? (например, filetype=vim), а затем ищите этот тип файла в :scriptnames с префиксом /syntax/ (который в моей системе равен /usr/share/vim/vim74/syntax/vim.vim).

Используя эту технику, я могу найти, что линия, определяющая матч регулярного выражения:

syn match vimFunc  "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("  contains=vimFuncName,vimUserFunc,vimExecute 

Which (дисконтирование кавычки) такая же, как на выходе :syntax list vimFunc.


Shameless бета стек обмена веб-маркетинга: мы имеем vi.SE специально для Vim вопросов.

+0

Hm, используя vim 8, тип группы синтаксиса (например, совпадение или область), по-видимому, заменяется на «xxx» на выходе списка синхронизации . @grochmal, любые идеи, почему? Также см. Мой связанный комментарий в другом документе: https://stackoverflow.com/questions/3853631/toggling-the-concealed-attribute-for-a-syntax-highlight-in-vim – timblaktu

+0

Обратите внимание, что этот ответ строго true для синтаксических групп типа match. Для синтаксических групп типа региона «syn match» выводит только «xxx», за которым следуют аргументы, представленные в исходной команде «syn region». (Кто-нибудь знает, почему это так? Есть ли другой способ в общем и программном определении типа группы синтаксиса?) – timblaktu

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

  • Нет связанных вопросов^_^