Отображение сниппетов в терминале

При работе с личной базой знаний быстро становится ясно, что данные бывают разного характера.
Статьи и заметки подходят для описания концепций и решений, скрипты — для автоматизации повторяющихся действий.
Однако на практике часто встречаются небольшие фрагменты кода или конфигураций, которые не оправдывают написание отдельного скрипта и при этом плохо живут в виде текста.
Для хранения и быстрого использования таких фрагментов лучше всего подходит концепт сниппетов.
Для работы с ними я использую две функции импортированные в zsh:
- snp - для поиска и вывода в терминал для последующего копи-паста
- nsnp - для создания новых сниппетов
Посмотреть пример того, как это выглядит можно на asciinema: https://asciinema.org/a/Y04rgNWILPFS7sRB
Зависимости
Чтобы всё работало, необходимы следующие программы (mac/linux):
- zsh - оболочка, в конфигурации которой будут подключены функции snp и nsnp.
- fd - find на максималках, быстрая и удобная альтернатива.
- fzf - интерактивный fuzzy-файндер. Предоставляет TUI-меню для выбора нужного сниппета по части имени с возможностью превью.
- bat - cat на стероидах с подсветкой синтаксиса и разметкой. Нужен для красивого просмотра сниппета при открытии (в zsh можно
alias cat=bat). - gum - мастхев утилита для TUI-промптов в shell-скриптах. С её помощью реализован ввод названия нового сниппета через приятный интерфейс.
- Helix (hx) - аналог vim с предустановленными модулями и немного другой логикой. Мне нравится, рекомендую.
Подключение через .zshrc
- Сначала выберите и создайте директорию, где будут храниться файлы сниппетов (например, ~/snippets).
- Затем добавьте в ваш
.zshrcследующие функции:
# Просмотр сниппетов
snp() {
SNIPPETS_DIR="$HOME/Snippets"
SNIPPET="$(
cd "$SNIPPETS_DIR" || exit 1
fd -t f \
| sed 's|^\./||' \
| fzf \
--cycle \
--no-separator \
--header=" Select snippet" \
--info=inline-right
)"
bat "$SNIPPETS_DIR/$SNIPPET" 2>/dev/null
}
#Создание сниппетов
nsnp() {
echo -e "\e[0;32m\e[0m Enter the name of your snippet\e[0m\e[0m"
NAME=$(gum input --placeholder "<domain>.<action>.<context>.<ext>")
OUT_PATH="$HOME/Snippets/$NAME"
echo -e "\e[0A\e[K\e[0;32m\e[0m Your snippet path: \e[0;34m$OUT_PATH\e[0m"
${EDITOR:-vim} "$OUT_PATH"
}
Использование
- Создание нового сниппета (nsnp).
- В терминале выполните команду nsnp – появится интерактивный промпт для ввода имени.
- Введите понятное имя файла сниппета с нужным расширением. Я использую формат <тема>.<подтема>.<описание>.<расширение> для группировки по категории, например: k8s.authz.deny.yaml или postgres.pooler.connlimit.sql, так их легче будет искать.
- После ввода имени откроется редактор (Helix или ваш $EDITOR), куда можно сразу вставить или написать нужный код/конфиг.
- Сохраните файл и закройте редактор – сниппет сохранён.
- Поиск и открытие сниппета (snp).
- Выполните команду snp – откроется интерактивное меню fzf со списком всех ваших сниппетов (файлы из $SNIPPETS_DIR).
- Начните набирать часть имени, чтобы отфильтровать список. Для удобства рядом сразу показывается предпросмотр содержимого выбранного сниппета.
- Найдя нужный файл, нажмите Enter – сниппет через bat откроется в терминале
Обе функции задуманы для максимальной скорости работы: никаких шаблонов и лишних подтверждений – только нужный вам минимум действий для создания или поиска сниппета.