Сниппеты вне зависимости от редактора

Давно работаю со сниппетами: с помощью них создаю скелеты модулей, функций и конструкций (for, if, given). Становится реально запилить даже средние проекты в одиночку. Сниппеты — незаменимая вещь при поиске ошибки в программе методом дихотомии: приходится вставлять вывод информации десятки раз, меняя в ней только текущие переменные.

Однако можно использовать сниппеты только в одном редакторе. В другой редактор их придётся переносить вручную.

Было бы неплохо иметь программу, которая могла бы вставлять сниппеты во все приложения.

Рис.1.1 mcedit-ор

Рис. 1.1 mcedit-ор

  • На удалённом сервере обязательно нужно зайти в докер –, а там обычно тебя ожидает ed или vi (Рис. 1.2) в котором сниппеты не запишешь — они пропадут при перезапуске контейнера.

Рис.1.2 Редактор vi

Рис. 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

Рис. 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-а.

Список использованной литаратуры

  1. Ярослав О. Косьмина «Конфиг EN-RU Switcher» / https://github.com/darviarush/erswitcher#config

  2. Ярослав О. Косьмина «Сниппеты из erswitcher» / https://youtu.be/PP78TBYIOH8

  3. «Программы, поддерживающие сниппеты» под ред. Vbif-routine / https://ru.wikipedia.org/wiki/Сниппет#Программы,_поддерживающие_сниппеты

  4. Yaoguai «Сниппеты. Как сделать процесс работы с документацией проще» / https://habr.com/ru/articles/487096/

  5. MPalma »25 способов скомпоновать исчерпывающий сниппет», 2014 / https://habr.com/ru/companies/altweb/articles/241618/

  6. alspirichev «На пути к ‹10x инженеру›: шорткаты, сниппеты, шаблоны», 2020 / https://habr.com/ru/companies/dododev/articles/527740/

  7. Kapodastr «Sublime Text 2: Как создать сниппет?», 2012 / https://habr.com/ru/articles/148324/

© Habrahabr.ru