Как экспортировать правила подсветки синтаксиса из формата vim в формат vimrc

286
Zaboj Campula

Когда я анализирую файлы журналов, vimя часто создаю специальные правила подсветки синтаксиса для лучшей ориентации. Например

:syntax match myerror match /NullPointerException/ :highlight myerror ctermbg=red 

Все идет нормально. Но иногда я создаю довольно сложные правила во время длительного сеанса редактирования и хочу сохранить все созданные специальные правила, чтобы их можно было использовать повторно. Я могу напечатать их:

:syntax myerror xxx match /NullPointerException/ :highlight myerror xxx ctermbg=4 

Но этот вывод содержит не только специальные правила и не может быть просто скопирован .vimrcв новый файл синтаксиса или из-за другого формата. :makevimrcНе сохраняет правила подсветки синтаксиса вообще.

Есть идеи, как экспортировать специальные правила раскраски?

1
Насколько мне известно, Vim не предоставляет механизма для этого. Я скопировал бы их из моей: -командной истории, набрав `q:` (q, двоеточие) в обычном режиме и выполнив их поиск. Heptite 7 лет назад 1
@ Heptite: хороший намек! Я понял, что можно редактировать историю команд, чтобы я мог выполнить `q:`, а затем удалить все не синтаксические команды `: g! / ^ Sy / d` и скопировать их все. И то же самое для "привет". Благодарю. Zaboj Campula 7 лет назад 0
Поскольку вы смогли найти полное решение, вы можете ответить на свой вопрос с подробными инструкциями, а затем пометить его как принятое. Heptite 7 лет назад 0
Я не думаю, что это полное решение. Я бы дал +1, чтобы ответить, как это, но не принял бы, потому что я все еще надеюсь, что есть более удобный способ. Если никто не придет с лучшим решением, я, возможно, напишу функцию, основанную на комментариях выше, мимо этого здесь, и это может быть приемлемым ответом с моей точки зрения. Zaboj Campula 7 лет назад 0

1 ответ на вопрос

1
Heptite

Насколько мне известно, нет никакого собственного механизма Vim для этого. Я думаю, что предполагается, что если вы собираетесь разрабатывать набор правил подсветки синтаксиса, вы будете делать это в скрипте Vim с самого начала.

Я собрал простой скрипт Vim, который добавит все команды синтаксиса и выделения из истории: -command в именованный файл:

function! GetSyntaxHistory() let l:lines=[] for l:i in range(1,histnr(':')) let l:line = histget(':', l:i) if l:line =~ '^\s*\(syn\|syntax\|hi\|highlight\)\s\+' let l:lines += [l:line] endif endfor return l:lines endfunction  function! WriteSyntax(file) let l:lines = GetSyntaxHistory() call writefile(l:lines, a:file, 'a') endfunction  command! -nargs=1 -complete=file ExportSyn call WriteSyntax(<f-args>)