Прежде чем начать, хочу сразу пояснить, что в данной статье я не предлагаю использовать Notepad++ вместо каких-либо IDE. Заточенная под свои цели IDE всегда будет лучше обычного текстового редактора, даже несмотря на то, что большинство из них написаны на Java, отжирают более 2 гигов оперативки, и вообще безумно тормозные. Однако глубокая интеграция IDE с системами контроля версий, дебаггерами, функциями «Go to definition» и прочим делают их незаменимыми.
В данной же статье я хочу рассмотреть случай, когда вам необходимо разработать что-то серьёзное в системе, для которой просто не существует IDE. В моем случае это разработка скриптов для игрового движка FOnline, о котором на хабре уже писали не один раз.
Немного информации о движке FOnline:
Процесс написания скриптов на текущий момент состоит из следующих этапов:
Разумеется, в таких условиях довольно сложно разрабатывать что-либо, нет ни готового фреймворка для проведения тестов (никакого TDD), ни дебаггера.
Но некоторые удобства с некоторыми ограничениями в Notepad++ таки удаётся реализовать:
Конечно, этого недостаточно для удобной разработки, но уже хоть что-то.
Далее в этой статье я хочу подробно рассказать о том, как всё это реализовать в Notepad++, но, чтобы не возникало лишних вопросов, сначала расскажу, какие функции я бы хотел видеть в npp, но которые мне НЕ удалось реализовать:
Теперь по порядку.
Базовая возможность notepad++. Настраивается в том числе и через интерфейс самого npp.
Вообще, возможность гибкой настройки определенного пользователем языка в npp существует очень давно, но не все знают, что данная возможность относительно недавно перешла на качественно новый уровень под названием UDL2.0
Основные возможности: формирование списка ключевых слов, определение синтаксиса блоков, сворачивание этих блоков, определение числовых форматов и, разумеется, настройка стилей оформления для всего этого по отдельности.
Примечание:
Не пробуйте вручную редактировать настройки UDL при запущенном npp, он затрёт все изменения при выходе из программы.
Так же базовая возможность npp, но уже не редактируется в интерфейсе, на этот раз нужно уже вручную править xml.
Основные возможности: автокомплит зарезервированных слов и функций, создание описания для них, подсказки параметров функций и информация о возвращаемых значениях. Кроме того, поддерживаются перегруженные функции.
Подробности о настройке тут.
Примечание:
Для правильной работы автокомплита нужно, чтобы строки в xml были правильно отсортированы в алфавитном порядке (подробности о сортировке, с учётом спецсимволов и чисел, были где-то на официальной вики). Нужно признать, данный момент довольно сильно раздражает, при отсутствии интерфейса xml, приходится действительно править вручную (писать свой велосипед для генерации как-то лениво).
Когда я только начинал реализацию окружения для разработки скриптов FOnline, для синтаксической проверки скриптов я долгое время пользовался обычным вызовом батника с передачей ему пути к скрипту. Однако, потом один из участников нашего сообщества выложил инструкцию по настройке EditPlus для работы с FOnline. Оказалось, что в данном редакторе возможность парсинга вывода компиляторов есть изначально. На тот момент я был уверен, что такие возможности бывают только в IDE и никто не будет возиться с данным функционалом для текстового редактора. Однако, если такой функционал есть в EditPlus, я всё же решил ещё раз пройтись по плагинам N++. К моему удивлению, решение для notepad++ нашлось: плагин NppExec.
Настройки довольно гибкие, не буду описывать процесс, там все довольно просто, просто покажу результат:
Примечание
Плагин не позволяет добавить кнопку для запуска компилятора на тулбар, однако с этой задачей отлично справляется плагин Custom toolbar.
Если говорить коротко, для этой цели подходит плагин SourceCookifier.
Возможности:
Но если говорить более подробно, нельзя не сказать о минусах:
Примечание:
С недавних пор данный модный функционал имеется в n++ прямо из коробки.
Работает.
Плагин Location Navigate.
Работает в пределах одного файла.
Кроме того, подсвечивает сохраненные и несохраненные изменения файла, произошедшие с момента запуска n++.
Примечание:
Стоит заметить, что основная функция данного плагина реализована в описанном выше плагине SourceCookifier.
Расстановка парных кавычек и закрывающих скобок осуществляется плагином XBrackets Lite. Решение далеко не идеальное, но хоть какое-то.
Примечание:
В настройках голого n++ так же можно включить автоматическую подстановку парных символов, но там эта функция реализована совсем топорно и скорее будет раздражать.
На текущий момент это практически всё, что мне удалось выжать из старого доброго Notepad++.
Конечно, можно много жаловаться на то, что Notepad++ существует только под Windows, на то, что sublime во многом превосходит Notepad++. Можно советовать переходить на EditPlus или полноценные IDE (для которых, естественно, придётся своими силами реализовывать большую часть необходимого функционала). Можно вспомнить про Geany с его немалыми возможностями по расширению функционала. Но, исходя из личного опыта, для описанных выше задач notepad++ подходит лучше всего. Возможно, я ошибаюсь, могу даже предположить, что описанное выше уже реализуемо в Sublime без слишком больших затрат. Но, как и в случае с notepad++, весь этот функционал чаще всего разбросан по куче плагинов и по различным документациям. И, если это так, я с удовольствием почитал бы о них подробнее.
Спасибо за внимание, будьте здоровы.
В данной же статье я хочу рассмотреть случай, когда вам необходимо разработать что-то серьёзное в системе, для которой просто не существует IDE. В моем случае это разработка скриптов для игрового движка FOnline, о котором на хабре уже писали не один раз.
Немного информации о движке FOnline:
- для своих скриптов использует известную в узких кругах библиотеку AngelScript
- имеет развитый API
- для предварительной проверки скриптов на синтаксические ошибки имеется отдельный компилятор
Процесс написания скриптов на текущий момент состоит из следующих этапов:
- написать скрипт
- проверить, компилируется ли он вообще
- подключить скрипт к серверу
- проверить скрипт в игре
Разумеется, в таких условиях довольно сложно разрабатывать что-либо, нет ни готового фреймворка для проведения тестов (никакого TDD), ни дебаггера.
Но некоторые удобства с некоторыми ограничениями в Notepad++ таки удаётся реализовать:
- подсветка синтаксиса
- автодополнение
- компиляция с возможностью перейти в место ошибки по двойному клику
- функция «Go to definition»
- отображение классов, переменных и т. п.
- карта документа
- быстрый переход к предыдущему положению курсора
- более или менее удобная реализация двойных разделителей (одинарные кавычки, двойные кавычки и т. п.)
Конечно, этого недостаточно для удобной разработки, но уже хоть что-то.
Далее в этой статье я хочу подробно рассказать о том, как всё это реализовать в Notepad++, но, чтобы не возникало лишних вопросов, сначала расскажу, какие функции я бы хотел видеть в npp, но которые мне НЕ удалось реализовать:
- Интеграция с системами контроля версий
Имеется ввиду не просто пункты в меню, вроде: показать дифф, закоммититься, запулиться и т. д. Мне очень не хватает отображения измененных, добавленных и удаленных строк прямо в редакторе.
Подобный плагин есть, например, для Sublime — github.com/jisaacks/GitGutter. Разумеется, только для git.
К слову, в идеале хотелось бы ещё иметь возможность отката этих изменений по клику, но не в IDE я такого не видел.
Но нечто похожее для notepad++ всё-таки есть: плагин Location Navigate. Который, кроме своей основной функции журналирования позиции курсора (для перехода вперёд-назад), ещё и отображает измененные за сеанс строки, к системе контроля версий не имеет никакого отношения, но хоть что-то. - Автодополнение для реализованных в скрипте сущностей
Автокомплит для зарезервированных слов и аргументов зарезервированных функций есть, а вот автоматического парсинга скрипта для целей автокомплита нет.
- Дебаггер
Но это и не удивительно, у нас и самого дебаггера-то нет…
Если же в вашем случае он каким-то образом имеется, можно посмотреть данный плагин — DBGP. Сам не разбирался, ничего не могу сказать.
Теперь по порядку.
Подсветка синтаксиса
Базовая возможность notepad++. Настраивается в том числе и через интерфейс самого npp.
Вообще, возможность гибкой настройки определенного пользователем языка в npp существует очень давно, но не все знают, что данная возможность относительно недавно перешла на качественно новый уровень под названием UDL2.0
Основные возможности: формирование списка ключевых слов, определение синтаксиса блоков, сворачивание этих блоков, определение числовых форматов и, разумеется, настройка стилей оформления для всего этого по отдельности.
Примечание:
Не пробуйте вручную редактировать настройки UDL при запущенном npp, он затрёт все изменения при выходе из программы.
Автодополнение
Так же базовая возможность npp, но уже не редактируется в интерфейсе, на этот раз нужно уже вручную править xml.
Основные возможности: автокомплит зарезервированных слов и функций, создание описания для них, подсказки параметров функций и информация о возвращаемых значениях. Кроме того, поддерживаются перегруженные функции.
Подробности о настройке тут.
Примечание:
Для правильной работы автокомплита нужно, чтобы строки в xml были правильно отсортированы в алфавитном порядке (подробности о сортировке, с учётом спецсимволов и чисел, были где-то на официальной вики). Нужно признать, данный момент довольно сильно раздражает, при отсутствии интерфейса xml, приходится действительно править вручную (писать свой велосипед для генерации как-то лениво).
Умная обработка вывода компилятора
Когда я только начинал реализацию окружения для разработки скриптов FOnline, для синтаксической проверки скриптов я долгое время пользовался обычным вызовом батника с передачей ему пути к скрипту. Однако, потом один из участников нашего сообщества выложил инструкцию по настройке EditPlus для работы с FOnline. Оказалось, что в данном редакторе возможность парсинга вывода компиляторов есть изначально. На тот момент я был уверен, что такие возможности бывают только в IDE и никто не будет возиться с данным функционалом для текстового редактора. Однако, если такой функционал есть в EditPlus, я всё же решил ещё раз пройтись по плагинам N++. К моему удивлению, решение для notepad++ нашлось: плагин NppExec.
Настройки довольно гибкие, не буду описывать процесс, там все довольно просто, просто покажу результат:
Примечание
Плагин не позволяет добавить кнопку для запуска компилятора на тулбар, однако с этой задачей отлично справляется плагин Custom toolbar.
Функция «Go to definition» и отображение списка сущностей
Если говорить коротко, для этой цели подходит плагин SourceCookifier.
Возможности:
- на основе определенных пользователем регулярных выражений формирует список различных групп сущностей: функции, классы, переменные, да и вообще всё, что угодно
- отображение всего этого в списке
- переход к определению слова по Ctrl+click
Но если говорить более подробно, нельзя не сказать о минусах:
- Ctrl+click в пределах одного файла
- группы сущностей чисто формальные и вообще задаются пользователем, таким образом, по крайней мере для UDL, не получится увидеть древовидную структуру классов, переменных и т. п.
Примечание:
- стоит заметить, что ещё не сильно разбирался с SourceCookifier и не могу гарантировать, что вышеперечисленное верно на 100%. Если кто-то заметит ошибки, буду рад информации
- если вам нужна функция «go to definition» для какого-либо более или менее известного языка, стоит посмотреть плагин TagsJump, там уже есть быстрые переходы между файлами
Карта документа
С недавних пор данный модный функционал имеется в n++ прямо из коробки.
Работает.
Быстрый переход к предыдущему положению курсора
Плагин Location Navigate.
Работает в пределах одного файла.
Кроме того, подсвечивает сохраненные и несохраненные изменения файла, произошедшие с момента запуска n++.
Примечание:
Стоит заметить, что основная функция данного плагина реализована в описанном выше плагине SourceCookifier.
Скобки, кавычки...
Расстановка парных кавычек и закрывающих скобок осуществляется плагином XBrackets Lite. Решение далеко не идеальное, но хоть какое-то.
Примечание:
В настройках голого n++ так же можно включить автоматическую подстановку парных символов, но там эта функция реализована совсем топорно и скорее будет раздражать.
Послесловие
На текущий момент это практически всё, что мне удалось выжать из старого доброго Notepad++.
Конечно, можно много жаловаться на то, что Notepad++ существует только под Windows, на то, что sublime во многом превосходит Notepad++. Можно советовать переходить на EditPlus или полноценные IDE (для которых, естественно, придётся своими силами реализовывать большую часть необходимого функционала). Можно вспомнить про Geany с его немалыми возможностями по расширению функционала. Но, исходя из личного опыта, для описанных выше задач notepad++ подходит лучше всего. Возможно, я ошибаюсь, могу даже предположить, что описанное выше уже реализуемо в Sublime без слишком больших затрат. Но, как и в случае с notepad++, весь этот функционал чаще всего разбросан по куче плагинов и по различным документациям. И, если это так, я с удовольствием почитал бы о них подробнее.
Спасибо за внимание, будьте здоровы.