Давно работаю со сниппетами: с помощью них создаю скелеты модулей, функций и конструкций (for, if, given). Становится реально запилить даже средние проекты в одиночку. Сниппеты – незаменимая вещь при поиске ошибки в программе методом дихотомии: приходится вставлять вывод информации десятки раз, меняя в ней только текущие переменные.
Однако можно использовать сниппеты только в одном редакторе. В другой редактор их придётся переносить вручную.
Было бы неплохо иметь программу, которая могла бы вставлять сниппеты во все приложения.
Когда я захожу на удалённый сервер по ssh, то странно ожидать сниппеты в mcedit-е (Рис.1.1).
На удалённом сервере обязательно нужно зайти в докер – а там обычно тебя ожидает ed или vi (Рис.1.2) в котором сниппеты не запишешь – они пропадут при перезапуске контейнера.
Я пользуюсь несколькими редакторами одновременно: 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
Конфигуратор 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
Как следует из описания процесса вставки сниппета erswitcher обладает следующими ограничениями:
Для работы erswitcher нужны иксы. Под wayland-ом и в голой консоли он работать не будет.
В приложениях, куда планируется вставлять сниппеты, должна быть настроена комбинация Ctrl+v, если нет – нужно будет настроить.
В окне виртуальной машины (virtualbox или vmware) erswitcher с хостовой машины работать не сможет по двум причинам: там не работает буфер обмена хостовой машины и переключение раскладки клавиатуры. Поэтому рекомендуется заходить на виртуальные машины по ssh.
erswitcher вставляет текст сниппета через буфер обмена для того, чтобы можно было вставлять любые символы, а не только те, которые есть на клавиатуре.
Как известно, иксы позволяют эмулировать ввод с клавиатуры только тех клавиш, которые есть в текущей раскладке клавиатуры.
Конечно можно было бы держать раскладки клавиатуры на все случаи жизни и инсталлировать новую раскладку для ввода очередного символа. Если инсталляция раскладки клавиатуры занимает немного времени, то отказаться от буфера обмена вполне реально. Однако опять же, менять в виртуальных машинах раскладки клавиатуры не получится. Проще поставить erswitcher и в виртуальную машину.
Есть ли альтернатива?
erswitcher сделан для unix-а. PuntoSwitcher вроде как кто-то когда-то сумел запустить под wine, но без бубна можно получить только ошибку отсутствия локализации. Кроме того вставки текста у PuntoSwitcher сделаны в виде списка, куда нельзя вставить перевод строки или табуляцию. Так же нельзя позиционировать курсор.
Развитие идеи
На самом деле хотелось бы указывать несколько "пробелов" в сниппете erswitcher-а, куда позиционировать курсор после заполнения первого (например при нажатии некоей комбинации клавиш). Так же текст сниппета в редакторе конфигуратора записывается в одну строку и, хотя можно использовать \n для символа перевода строки, то было бы неплохо добавить многострочные определения сниппетов.
Всё это будет реализовано в будущих версиях erswitcher-а.
Список использованной литаратуры
Комментарии (5)
ritorichesky_echpochmak
15.12.2023 12:14Прочитал про ed и vi (и соответственно весь остальной базовый софт) в докере, взгрустнул.
heidisql - а зачем? У вас IntellijIDEA к ней как и к половину от JB должен быть DataGrip после которого любой другой клиент к БД вызывает уныние и непреодолимую тоску. И в нём можно прям норм с файлами работать для того чтобы пресеты на разных серверах гонять
darviarush Автор
15.12.2023 12:14Тормознутость и прожорливость к памяти IntellijIDEA - вот что должно вызывать тоску )
Для меня heidisql более удобен (по комбинациям клавиш, например), чем DataGrip, ведь это и отдельное приложение и интерфейс у него приятнее. Опять же, функциональность вся нужная мне, у heidisql в наличии )
С файлами heidisql тоже справляется - не жалуюсь )
leha_gorbunov
Copy/Paste не будет работать в терминальных окнах и внутри виртуальных машин. Не везде есть общий буфер обмена. Надо было использовать эмулятор ввода. Что-то вроде xdotool для linux.
darviarush Автор
Для работы erswitcher нужны иксы. В открытом в них терминале обычно уже настроена комбинация Ctrl+v, если нет - нужно будет настроить
В статье предлагается заходить на виртуальные машины по ssh
В разделе статьи "Как erswitcher вставляет текст" указывается, что он эмулирует нажатие клавишь. Но символы юникода через клавиатуру не вставишь и поэтому пришлось использовать буфер обмена