Документация по ОС FreeBSD Пятница, 19.04.2024, 05:17
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Shell [40]

Главная » Статьи » Программирование » Shell

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

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

discovery config pykto
#set mutateTests True
back

back
target
set target http://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
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
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). В питоновском файле это применяется для определения строк.
Существует вложенность этих сущностей. Также можно их объединять в группы. После этого у нас уже подсвечивается набор ключевых слов 
 
Теперь осталось задать новый тип файла. Для этого в ~/.vimrc добавим (либо воспользуемся modeline ...:h modeline):
" Filetipes
au BufRead,BufNewFile *.w3af set filetype=w3af
 
Затем по аналогии с питоновским файлом, я добавил и другие правила подсветки. На самом деле, количество различных настроек и приёмов, описанные в :h syntax поражают, но что можно было ожидать от такого редактораа как Vim? =)


Источник: http://allaboutvim.blogspot.com/2008/10/blog-post.html
Категория: Shell | Добавил: oleg (15.10.2008) | Автор: Pento
Просмотров: 1097 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024