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

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


Snippets example

При работе с личной базой знаний быстро становится ясно, что данные бывают разного характера.

Статьи и заметки подходят для описания концепций и решений, скрипты — для автоматизации повторяющихся действий.

Однако на практике часто встречаются небольшие фрагменты кода или конфигураций, которые не оправдывают написание отдельного скрипта и при этом плохо живут в виде текста.

Для хранения и быстрого использования таких фрагментов лучше всего подходит концепт сниппетов.

Для работы с ними я использую две функции импортированные в 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

  1. Сначала выберите и создайте директорию, где будут храниться файлы сниппетов (например, ~/snippets).
  2. Затем добавьте в ваш .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).
  1. В терминале выполните команду nsnp – появится интерактивный промпт для ввода имени.
  2. Введите понятное имя файла сниппета с нужным расширением. Я использую формат <тема>.<подтема>.<описание>.<расширение> для группировки по категории, например: k8s.authz.deny.yaml или postgres.pooler.connlimit.sql, так их легче будет искать.
  3. После ввода имени откроется редактор (Helix или ваш $EDITOR), куда можно сразу вставить или написать нужный код/конфиг.
  4. Сохраните файл и закройте редактор – сниппет сохранён.
  • Поиск и открытие сниппета (snp).
  1. Выполните команду snp – откроется интерактивное меню fzf со списком всех ваших сниппетов (файлы из $SNIPPETS_DIR).
  2. Начните набирать часть имени, чтобы отфильтровать список. Для удобства рядом сразу показывается предпросмотр содержимого выбранного сниппета.
  3. Найдя нужный файл, нажмите Enter – сниппет через bat откроется в терминале

Обе функции задуманы для максимальной скорости работы: никаких шаблонов и лишних подтверждений – только нужный вам минимум действий для создания или поиска сниппета.

Report Page