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

    Немного предыстории. Не так давно я решил присоединиться к проекту 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
    Поделиться публикацией

    Похожие публикации

    Комментарии 4

      +2
      Кхм, хабракат плиз.
        +1
        Там есть хабракат.
        Кажется, парсер хабровский глючит.
        • НЛО прилетело и опубликовало эту надпись здесь
            +2
            Таки да, сам — дурак :) Спасибо!

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое