Pull to refresh

Создаем свою подсветку синтаксиса

Reading time 3 min
Views 7K
Немного предыстории. Не так давно я решил присоединиться к проекту w3af (Web Application Attack and Audit Framework). В этом приложении есть возможность автоматизировать повторяющиеся действия с помощью скриптов команд (такой аналог батников и шелл-скриптов).

# This is a test for the 404 fingerprinting of the core
plugins
output console,textFile
output
output config textFile
set fileName output-w3af.txt
set verbose True
back
output config console
set verbose False
back
discovery pykto,serverHeader

discovery config pykto
#set mutateTests True
back

back
target
set target localhost/w3af
back
start


Постоянно работая с ними, я подумал, а почему так все блекло? И родилась идея сделать простую подсветку синтаксиса для w3af скриптов.

Начинать конечно надо с чтения манов (:h syntax). Вообще даже в этом моменте ярко выражена глубина настройки вима. Можно сделать свой файл подсветки синтаксиса. Можно переопределить уже существующий и так далее. Для начала нам будет интересен там раздел MAKING YOUR OWN SYNTAX FILES.

1. Если у вас ещё нет, то создаем каталог ~/.vim/syntax
2. Тут мне больше всего понравился подход в мане:

Write the Vim syntax file. Or download one from the internet. Then write it in your syntax directory.

Ну то есть я вроде как в ман-то и полез, что бы узнать как такие файлы писать, а тут такое :) Ну ладно, я взял за основу файл подстветки синтаксиса Питона. После того, как удалим от туда все лишнее, сохраняемся :w ~/.vim/syntax/w3af.vim
3. Ура, теперь можно использовать вашу собственную схему подстветки: :set syntax=mine

Остановимся чуть подробнее на 2 пункте :)

" Vim syntax file
" Language: w3af file
" Maintainer: Pento <naplanetu@gmail.com>
" Last change: 2008 Oct 12

if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif

syntax sync fromstart

syn keyword w3afStatement set back start assert plugins exploit profiles exit help
syn match w3afComment "#.*$"

if version >= 508 || !exists("did_w3af_syn_inits")
if version <= 508
let did_w3af_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif

" The default methods for highlighting. Can be overridden later
HiLink w3afStatement Statement
HiLink w3afComment Comment
delcommand HiLink
endif

let b:current_syntax = 'w3af'

Statement — это общие для всех языков программирования лексемы (если я правильно употребляю тут этот термин) вроде Function, Comment и т.п. То есть в итоге вы будете оперировать этими общими группами при раскраске своего файла (см. :h syntax раздел NAMING CONVENTIONS) keyword — синтаксическая сущность. Vim понимает 3 такие сущности:

1. keyword — обыкновенные ключевые слова. Не больше и не меньше :) (:h syn-keyword)
2. match — соответствие регулярному выражению (:h syn-match). Удобно, такое использовать например для определения комментариев.
3. region — область между двумя «тегами» (тоже рег. выражениями) (:h syn-region). В питоновском файле это применяется для определения строк.

Существует вложенность этих сущностей. Также можно их объединять в группы. После этого у нас уже подсвечивается набор ключевых слов:

image

Теперь осталось задать новый тип файла. Для этого в ~/.vimrc добавим (либо воспользуемся modeline ...:h modeline):

" Filetypes
au BufRead,BufNewFile *.w3af set filetype=w3af

Затем по аналогии с питоновским файлом, я добавил и другие правила подсветки. На самом деле, количество различных настроек и приёмов, описанные в :h syntax поражают, но что можно было ожидать от такого редактораа как Vim? =)
Кросспост с Всё о Vim
Tags:
Hubs:
+3
Comments 4
Comments Comments 4

Articles