Pull to refresh

Приручение Notepad++

Reading time 5 min
Views 6.3K
Уже пару лет использую Notepad++ в качестве основного текстового редактора. До него была ColdFusion Studio 4.5.2, которая очень даже устраивала. Вот только она небесплатная и несколько тяжеловесная. Лицензионнной Студии нынче у меня нет, а пользоваться варезом при наличии фришных альтернатив давно кажется мне неправильным. Кроме того, ломалка к Студии (loader) определяется антивирусами как малварь (разбираться желания не было, к тому же антивирусы вечно норовят этот лоадер снести, что не добавляет комфорта в работе). Переходить на всякие варианты на базе Eclipse желания не было и нет: терпеть не могу тяжеловесный софт. По совету друзей попробовал Notepad++ aka NPP, понравилось. Особенно порадовало, что несколькими движениями NPP превращается в близкое подобие любимой CFStudio. Время от времени пробовал ряд других редакторов (например, несколько из этого списка: http://en.wikipedia.org/wiki/Comparison_of_text_editors), ничто не приглянулось. Вернулся к уже привычному Notepad Plus Plus.

В качестве инструмента для веб-разработки NPP был хорош, но того удобства и производительности труда, которую давала CFStudio, достичь не получалось, пока не подобрался удачный комплект плагинов.

Решил поделиться опытом в надежде, что сэкономлю кому-нибудь немного времени.

Итак, что нам нужно, чтобы обустроить NPP и сделать его местом, пригодным для жизни
  1. Плагин Explorer, чтобы ходить по файловой системе, не вылезая из NPP (привык в CFStudio, удобно)
  2. Клавиатурные шорткаты для часто используемых конструкций вроде   и HTML-тегов.
  3. Подсветка синтаксиса (мне нужен синтаксис CFML, помимо прочих).
  4. Контекстная справка (по тому же CFML).
  5. Автоматическое закрытие тегов.

С п.1 (Explorer) проблем не было с самого начала, плагин — вот он, бери и пользуйся.

Для шорткатов со временем обнаружился чудесный плагин WebEdit. Шорткаты, правда, не сразу заработали, пришлось разбираться. Оказалось, что милые моему сердцу сочетания клавиш вроде Ctrl+Shift+Space (используется в Студии для  ) экранируются, потому что уже назначены на другие команды. После того, как причина ясна, лечится просто: заходишь в Shortcut Manager (Опции/Горячие клавиши), находишь экранирующее определение, скорее всего в закладке Main menu и очищаешь его (а в закладке Plugin Commands прописываешь нужные шорткаты для плагина WebEdit).

Подсветка синтаксиса для HTML имеется out-of-the-box. Мне нужна еще подсветка для CFML, решение предложил Howard Scholz: http://howardscholz.wordpress.com/2007/10/13/cf8-in-notepad-continued/, заодно с контекстной справкой. Правда, по приведенному автором адресу ссылка на архив не работает :)(хорошо, что у меня копия сохранилась с незапамятных времен), да и контекстная справка не живет на современных системах, что явно связано с усовершенствованием системы безопасности Windows (без комментариев).

Пришлось поковыряться и собрать свой вариант. По дороге возникла необходимость перекомпилить chm справку по CF8, что и сделал, руководствуясь http://www.oszone.net/3789. Заодно мне показалось правильным перевести в chm-формат справку по CF9, раз уж взялся. Заставить работать chm-справку удалось только с помощью LanguageHelp плагина от Franco Stellari. Плагин, помимо прочего, хорош тем, что может подключать нужную справку в зависимости от расширения редактируемого файла. Кстати, был вариант не заморачиваться с chm, а подключить pdf-справку, LanguageHelp умеет в ней искать, только поиск в pdf занимает изрядное время, что неправильно, не наш путь. Ну и, конечно, надо контекстную справку перевесить с Ctrl+F1 на F1, на котором по умолчанию висит Help/About. Не могу представить, зачем кому-то вызывать Help/About горячими клавишами. Идем в Опции/Горячие клавиши, в закладке Main находим F1 в правой колонке, открываем двойным кликом, в комбо-боксе выбираем None (первый сверху). В закладке Plugin Commands вешаем вызов LanguageHelp на F1 (можно также взять переточенный shortcuts.xml, см. ниже). К сожалению, пока не нашел исходников LanguageHelp, так, для спокойствия души, ну и вообще, мы же говорим про OpenSource.

Автоматическое закрытие тегов — фича очень полезная, без нее столько лишних букв приходится вбивать ручками. К тому же автозакрытие уменьшает количество ошибок разметки. Вообще-то, если редактировать только файлы с расширением htm, html, xml, то можно не беспокоиться: сразу несколько плагинов (начиная с Insertion и TextFX) поддерживают автоматическое закрытие тегов (Automatically close Html/Xml tags), но вот беда: они крепко стоят на страже законности и закрывают теги только в файлах, которые сами считают за html/xml. Местами в компанию берут php, но cfm, asp, aspx остаются за бортом. Авторов можно понять, вряд ли c++-разработчика порадует конструкция #include <windows.h></windows.h>, но куда деваться простым веб-девелоперам? Поначалу я решал проблему просто: брал файл определения языков langs.xml и запихивал все ключевые слова и прочие реквизиты из определения CFM, ASP и т.д. в определение HTML, но это путь кривой.

Долго искал решение проблемы и не находил его. Закончилось тем, что я решился-таки написать соответствующий плагин. Удивительное дело, простота задачи иногда является препятствием к ее решению. Ну не может быть, что этого уже кто-то не сделал! Оказывается — может. В который раз оказалось, что быстрее написать самому, чем найти готовое решение (не факт еще, что готовое не окажется вусмерть кривым). В данном случае искал 2 года, а сам делал с неделю (урывками). Взял Insertion Plugin, скомпилил под Unicode (спасибо http://www.mailinglistarchive.com/html/notepad-plus-plus@lists.sourceforge.net/2009-03/msg00677.html и Апрелю), отрезал лишнее, в том числе враждебную проверку на тип файла. Основное время потрачено на: скомпилировать под Unicode; переписать сохранение настроек; перекомпоновать сорцы так, чтобы была надежда разобраться в них через месяц. Наверное, результат получился с кучей ошибок (лет 10 не брал в руки компилятор C++), но теги закрывает. Выложил сорцы и бинарник под Юникод.

Ну вот. Теперь, после доработки напильником, все выглядит и работает вполне прилично. Кое в чем NPP даже лучше (универсальнее) ColdFusion Studio: есть, например, HexEditor, можно запускать внешние программы, не отходя от кассы. Кое в чем, пожалуй, слабее: нет отладки в том же окне. Подсветка CFML-синтаксиса имеет один косяк: текст после символа # до следующего # подсвечивается, как для #my_variable#, даже если имелось в виду всего лишь {color:#dddd00;} (это не доставляет мне больших неудобств, так что чинить не пытался).
Но в целом обе среды делают примерно одно и то же (а именно то, что надо мне для работы) и оставляют схожее впечатление.

image

Упомянутые выше плагины для удобства включил в обновленную сборку CF8NPP, тем более, что по сравнению со справкой объем у плагинов совсем маленький. К WebEdit приложил набор клавиатурных шорткатов (shortcuts.xml), позаимствованных, в основном, у ColdFusion Studio и HomeSite.

Напоследок несколько хинтов. 
  • Лучше ставить Unicode версию NPP. У ANSI версии были проблемы с печатью кириллицы на принтере (свежие версии не проверял).
  • По умолчанию с NPP ставится несколько плагинов, из них непременно нужен TextFX, без него с подсветкой синтаксиса все плохо.
  • На CFML свет клином не сошелся, нет большой проблемы приделать к NPP контекстную справку для произвольного языка программирования.


P.S. Большое спасибо DenisO за инвайт
Tags:
Hubs:
+18
Comments 54
Comments Comments 54

Articles