Сниппеты вне зависимости от редактора
Давно работаю со сниппетами: с помощью них создаю скелеты модулей, функций и конструкций (for, if, given). Становится реально запилить даже средние проекты в одиночку. Сниппеты — незаменимая вещь при поиске ошибки в программе методом дихотомии: приходится вставлять вывод информации десятки раз, меняя в ней только текущие переменные.
Однако можно использовать сниппеты только в одном редакторе. В другой редактор их придётся переносить вручную.
Было бы неплохо иметь программу, которая могла бы вставлять сниппеты во все приложения.
Рис. 1.1 mcedit-ор
На удалённом сервере обязательно нужно зайти в докер –, а там обычно тебя ожидает ed или vi (Рис. 1.2) в котором сниппеты не запишешь — они пропадут при перезапуске контейнера.
Рис. 1.2 Редактор vi
Я пользуюсь несколькими редакторами одновременно: vscodium, kate, notepad++ (под wine, конечно-же), kwrite, pycharm, Intellij Idea (в которых актуальны сниппеты для html, css/sass и js), atom и subl.
sql-сниппеты понадобятся в heidisql, Database Intelliji Idea, в консольных mysql и pgsql.
Для проверки кода (если есть сомнения как он работает) я запускаю в консоли однострочники в которых сниппеты очень даже пригодились бы.
Если нужно привести пример кода при переписке, то сниппеты будут незаменимы в мессенджерах и почтовых клиентах.
Ну и наконец, я часто пишу статьи на Хабре и, в некоторых случаях, было бы идеально вставлять сниппеты в фрагменты кода прямо в статье не переключаясь для этого в редактор.
Тем временем вышел En-Ru Switcher 7, который всё это поддерживает (Рис. 2.1).
En-Ru Switcher
Рис. 2.1 Конфигуратор erswitcher-а открыт на сниппетах perl
Конфигуратор erswitcher-а [1] открывается по щелчку на красном квадрате у часов. Он разделён на список секций конфига и редактор. По списку легко переместиться к нужной секции или разделу (разделы начинаются на ##, в то время как # — обычный комментарий).
До знака = идёт мнемоника в секции [compose], которая будет заменяться на текст справа при нажатии на клавишу menu (центральная клавиша на дополнительной цифровой клавиатуре), или комбинация клавиш в других секциях.
Для обозначения символа табуляции используется \t, а для перевода строки \n. \^ используется для указания позиции в которую поместить курсор после вставки текста (имеется ввиду текстовый курсор, конечно же).
Как только вы введёте текст он тут же сохранится в конфиг и конфиг будет перечитан erswitcher-ом.
Чтобы использовать один и тот же конфиг на разных компьютерах, просто выделите его весь и скопируйте (Ctrl+a, Ctrl+c), после чего его можно сохранить на docs.google.com, например.
Что такое сниппет?
Сниппет это такой «скелет» часто повторяемого кода [4]. После вставки текста сниппета в нём заполняют «пробелы», как это показано на видео [2].
У слова «сниппет» есть и другие значения. Так SEO-оптимизаторы называют сниппетом «небольшой фрагмент текста, который мы видим на странице выдачи поисковика (гугл, яндекс, яху, рамблер, дак-дак-гоу) вместе со ссылкой на сайт» [5].
Как erswitcher вставляет текст?
Ввод тела сниппета осуществляется по ICCCM: erswitcher отслеживает нажатия клавишь и запоминает последние введённые программистом символы. При нажатии клавиши menu он распознаёт введённую только что мнемонику, например, «if» и эмулирует двойное нажатие backspace, чтобы их удалить. Затем объявляет себя буфером обмена и нажимает Ctrl+v. Программа, в которой был написан «if», запрашивает у сервера обмена текст и получает тело сниппета «if () {\n\t\n}», который и вставляет в позицию курсора. erswitcher тем временем ожидает пока вставка закончится 10 микросекунд и нажимает на клавишу «стрелка влево» столько раз, сколько символов между \^ и концом текста сниппета, чтобы добраться до указанной в сниппете позиции курсора («if=if (\^) {\n\t\n}»).
Есть ли альтернатива?
erswitcher сделан для unix-а. PuntoSwitcher вроде как кто-то когда-то сумел запустить под wine, но без бубна можно получить только ошибку отсутствия локализации. Кроме того вставки текста у PuntoSwitcher сделаны в виде списка, куда нельзя вставить перевод строки или табуляцию. Так же нельзя позиционировать курсор.
Развитие идеи
На самом деле хотелось бы указывать несколько «пробелов» в сниппете erswitcher-а, куда позиционировать курсор после заполнения первого (например при нажатии некоей комбинации клавишь). Так же текст сниппета в редакторе конфигуратора записывается в одну строку и, хотя можно использовать \n для символа перевода строки, то было бы неплохо добавить многострочные определения сниппетов.
Всё это будет реализовано в будущих версиях erswitcher-а.
Список использованной литаратуры
Ярослав О. Косьмина «Конфиг EN-RU Switcher» / https://github.com/darviarush/erswitcher#config
Ярослав О. Косьмина «Сниппеты из erswitcher» / https://youtu.be/PP78TBYIOH8
«Программы, поддерживающие сниппеты» под ред. Vbif-routine / https://ru.wikipedia.org/wiki/Сниппет#Программы,_поддерживающие_сниппеты
Yaoguai «Сниппеты. Как сделать процесс работы с документацией проще» / https://habr.com/ru/articles/487096/
MPalma »25 способов скомпоновать исчерпывающий сниппет», 2014 / https://habr.com/ru/companies/altweb/articles/241618/
alspirichev «На пути к ‹10x инженеру›: шорткаты, сниппеты, шаблоны», 2020 / https://habr.com/ru/companies/dododev/articles/527740/
Kapodastr «Sublime Text 2: Как создать сниппет?», 2012 / https://habr.com/ru/articles/148324/