Итак, задача: имея какие-нибудь абстрактные логи доступа в wonder-net:
!->14/02 16:44:22 [134.249.51.251:39951>80] (t1 19) >HTTP in:504 out:34 Time:156
GET /516874233**21893/ HTTP/1.1 SCOD=00
!->14/02 16:44:24 [134.249.51.251:49507>80] (t1 20)
GET /44058858**409377/ HTTP/1.1 SCOD=00
!->14/02 16:54:11 [195.18.13.107:1721>80] (t2 22)
GET /41494377**562173/ HTTP/1.1 SCOD=00
!->14/02 16:54:11 [195.18.13.107:1721>80] (t2 23) >HTTP in:385 out:10138 Time:156
GET /5211537**1172048/ HTTP/1.1 SCOD=00
!->14/02 16:54:24 [195.18.13.107:1727>80] (t1 30) >HTTP in:423 out:1220 Time:187
GET /5211537**6447554/ HTTP/1.1 SCOD=23
!->14/02 18:07:24 [82.145.208.159:43634>80] (t2 52)
GET /4149437**8265377/ HTTP/1.1 SCOD=00
!->14/02 18:09:41 [82.145.208.174:41708>80] (t2 61)
GET /4149497**5750155 / HTTP/1.1 SCOD=00
!->14/02 18:51:39 [82.145.210.33:55210>80] (t1 66) >HTTP in:543 out:34 Time:0
GET /5168757**9478487/ HTTP/1.1 SCOD=00
!->14/02 18:51:40 [82.145.210.33:55332>80] (t1 68) >HTTP in:544 out:1243 Time:141
GET /4149497**0456701 / HTTP/1.1 SCOD=00
!->14/02 18:51:46 [82.145.210.33:57345>80] (t1 73) >HTTP in:544 out:1243 Time:125
GET /5168742**0521893/ HTTP/1.1 SCOD=00
выделить:
Дату-время — фиолетовым курсивом;
Номер карты — желтым курсивом, если не в черном списке или красным, если иначе;
ip-адрес — темно-зеленым, если не в черном списке или красным, если иначе;
scod=хх — темно-зеленым если 00 или красным, если иначе.
В нашу цветовую схему нужно добавить стили, которыми мы собираемся подсвечивать текст. Насколько я понял, все цветовые схемы аккуратно собраны в файле c:\Program Files\Sublime Text 3\Packages\Color Scheme — Default.sublime-package.
Файл представляет собой zip архив без сжатия. Распаковываем, выбираем любимую схему (по умолчанию Monokai.tmTheme) и копируем ее в…(запускаем Sublime Text: меню Preferences — Browse Packages) папку User.
Открываем свежескопированный Monokai.tmTheme для редактирования. В самом низу перед закрывающимся
</array>
добавляем блоки стилей. Стиль может содержать три параметра: background, foreground и fontStyle. fontStyle в свою очередь bold, italic и underline.фиолетовый курсив будет выглядеть так:
<dict>
<key>scope</key>
<string>violet</string> <!-- По этому имени будем обращаться к стилю -->
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EE82EE</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
жирный желтый(ЖЖ):
<dict>
<key>scope</key>
<string>yellow</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFD700</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
темно-зеленый:
<dict>
<key>scope</key>
<string>green</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#006400</string>
</dict>
</dict>
красный:
<dict>
<key>scope</key>
<string>red</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF0000</string>
</dict>
</dict>
2. В той же папке User создаем файл синтаксиса: wonderLog.tmLanguage с содержимым:
<?xml version="1.0" encoding="UTF-8" ?>
<plist version="1.0">
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>red</string> <!-- Имя стиля -->
<key>match</key>
<string>\b(?i)(?:5168742**0521893|414943**01562173|4149497**5750155)\b</string> <!-- Регулярное выражение к-рое надо выделить (номера из черного списка) -->
</dict>
<dict>
<key>name</key>
<string>red</string>
<key>match</key>
<string>\b(?i)(?:134\.249\.51\.251|82\.145\.208\.174)\b</string> <!-- ip из черного списка (точки экранируем) -->
</dict>
<dict>
<key>name</key>
<string>green</string>
<key>match</key>
<string>\b(?i)scod=00\b</string> <!-- scod=00 -->
</dict>
<dict>
<key>name</key>
<string>red</string>
<key>match</key>
<string>\b(?i)scod=\d+\b</string> <!-- scod!=00 -->
</dict>
<dict>
<key>name</key>
<string>green</string>
<key>match</key>
<string>\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b</string> <!-- остальные ip (конечно, надо не так, но...) -->
</dict>
<dict>
<key>name</key>
<string>yellow</string>
<key>match</key>
<string>\b\d{16}\b</string> <!-- остальные номера -->
</dict>
<dict>
<key>name</key>
<string>violet</string>
<key>match</key>
<string>\d{1,2}/\d{1,2}\s\d{2}:\d{2}:\d{2}</string> <!-- дата, время -->
</dict>
</array>
<key>name</key>
<string>wonderLog</string>
<key>scopeName</key>
<string>wonderLog</string>
<key>fileTypes</key>
<array>
<string>log</string> <!-- К этому расширению файла будет автоматически применяться данный синтаксис -->
</array>
</dict>
</plist>
На примере видно, что если несколько регулярных выражений претендуют закрасить цвет по-разному, то приоритет будет у того, которое описано выше (первее).
Сохраняем все.
Выбираем пользовательскую цветовую схему: Preferences — Color Scheme — User — Monokai.
Открываем наш чудо-лог (если расширение файла не совпадает с шаблонным, делаем View — Syntax — wonderLog) и наслаждаемся результатом:
Комментарии (19)
KaneUA
16.05.2015 00:19+4Не знаю, кому как, а мне не нравится курсив в текстовых редакторах. Никогда не видел, чтобы он отлично смотрелся. Первым делом, как устанавливаю, выставляю опцию «no_italic».
MTonly
16.05.2015 18:32-1мне не нравится курсив в текстовых редакторах. Никогда не видел, чтобы он отлично смотрелся.
На 4K-мониторе (например, Dell P2415Q) курсив смотрится отлично. ;-)
mihmig
16.05.2015 11:17+1Как-то печально задавать подсветку чёрно/белых списков регулярками…
Архитектура модуля подсветки не позволяет задавать списки в тегах XML?CJay
16.05.2015 14:19Насколько я разобрался с данным вопросом, саблайм разбивает свой текст на блоки регулярками, давая блоку некоторый стиль. Ч/Б список не является частью языка, поэтому закидывать его в регулярку в конфиге языка — неверный подход. Решить данную задачу можно не расширением языка(.tmLanguage), а написанием своего расширения (plugin), которое по событиям (нажатие комбинации клавиш, изменение текста), пробежится по тексту (или по нужным блокам), сверит введённую информацию с какими-то внешними списками, и потом уже задаст необходимым кускам текста (блокам) дополнительную маркировку (метод
add_regions
объектаview
). Хорошим примером служит расширение, подсвечивающее введённые hex цвета в css цветом (ColorHighlighter).
Так что, повторюсь, архитектура это позволяет, но не так, как указано в статье.
zhovner
16.05.2015 12:22Как в саблайме 2 отобразить переносы строк? Показ непечатных символов включен, но переносы строк он не показывает. Невозможно понять виндовые или юниксовые переносы в конкретном файле, приходится открывать в mcedit.
Lord_D
16.05.2015 12:57+3Всем интересующимся советую обратить внимание на официальную документацию и пакет разработчика, позволяющий создавать файлы синтаксиса в формате YAML с подсветкой операторов.
XlebNick
Спасибо, нужная фича. Sublime text просто палочка-выручалочка!
Apathetic
Это вы еще Brackets не пробовали, например. Или Atom. Или еще какой-нибудь другой редактор.
norlin
Пробовал Атом, вернулся на Саблайм. Атом более кастомизируемый, но менее удобный по-дефолту, ИМХО.
Apathetic
Интересно, что почти все прокомментировавшие именно про Атом говорили. Но первым я назвал Brackets, между прочим.
Я с саблаймом три года душа в душу прожил, просто в какой-то момент захотелось новенького. Атом мне и самом не очень-то подошел, а вот Brackets — в самый раз. А кому-то Emacs больше нравится. А кому-то — WebStorm.
Короче говоря, я комментарий свой оставил не холивара ради, а токмо
во исполнение воли пославшей мя женычтобы показать, что редакторов много, и вот лично меня от таких вот "%имя_редактора% просто палочка-выручалочка" слегка коробит.resetnow
Текстовый редактор весом под сотню мегабайт, который работает на JS, жрет память, не открывает большие файлы и в котором каждая строка — это отдельный <div> в эмулируемом поле редактирования? Нет, спасибо.
Bagobor
У меня ощущение что только меня одного бесят лаги (особенно на выделение, копирование\вставка кусков) не-нативных редакторов кода. :(
Надо было меньше в Quake 1 играть…
norlin
В саблайме, например, нет таких лагов. Разве что, при вставке ОЧЕНЬ больших кусков кода. Но бывают лаги на проверку вставленного кода (lint-плагины)…
p.s. пропустил уточнение «нативных», сорри.
khim
Тут как бы некоторый вопрос что такое «не-нативный редактор». Emacs — он как бы на lisp'е написан и когда-то считался тормозом изрядным. Когда процессоры были в 100 медленнее, чем сейчас. Может и Atom лет через 20 будет «летать»… хотя сегодня я им пользоваться не могу именно из-за лагов.
Bagobor
«не нативный» — значит используется толстая прослойка для отобраения данных на экране. по сути в нашем слушем случае это «движок» браузера.
видимо это и дает минимальное отставание на один кадр обновление монитора. что в случае стандарного LCD = 1/60 ~ 16ms
Это конечно гипотеза и ее легко проверить, поставив частоту обновления в 30hz — если лаг будет сильнней — значит я прав.
И тогда получается что просто увеличением скорости проессора не обойтись.
Apathetic
Нет, такие вещи бесят всех. Не понимаю, с чего вы вдруг обратное подумали.
Bagobor
Потому несколько человек мне активно рекламировали Атом. И всячески пищали от восторга, говоря что никаких лагов нет воообще.
Apathetic
Лично я его даже устанавливать не стал, когда узнал, что его планируют сделать не менее проприетарным (ну или по крайней мере платным), чем саблайм.
XlebNick
Атом пробовал, Dreamweaver пробовал, но сублайм более удобен как по мне