Настройка zsh-приглашения в macOS Terminal

Что вы получите из этой статьи
- Понимание базовых переменных zsh-приглашения (PS1/PROMPT, RPROMPT)
- Пошаговые инструкции по созданию и редактированию ~/.zshrc
- Полезные шаблоны (минимальное, информативное, цветное, с датой/временем, с веткой Git)
- Чеклисты и критерии приёмки для разработчиков и администраторов
- Как быстро откатиться и что делать при ошибках
- Ментальные модели, лучшие практики и заметки по безопасности
Основы zsh-приглашения
Когда вы открываете Terminal на Mac, по умолчанию zsh отображает строку с именем пользователя, названием машины и текущей директорией. Пример стандартного вида:
Last login: Wed Feb 3 22:00:40 on console
alvin@MacBook-Air ~ %В zsh приглашение задаётся переменной PROMPT или PS1 (аналогично в других оболочках). В системном файле /etc/zshrc часто можно найти строку вида:
PS1="%n@%m %1~ %#"Короткая расшифровка основных переменных (одна строка каждая):
- %n — имя пользователя.
- %m — имя хоста (короткое имя машины, например MacBook-Air).
- %1~ — текущая директория; ~ заменяет $HOME.
- %# — отображает # для root и % для обычного пользователя.
- %D, %W — варианты отображения даты (см. ниже).
- %T, %t, %* — варианты отображения времени.
- %F{color} … %f — цвета; %B/%b — жирный текст; %U/%u — подчеркивание; %S/%s — выделение.
Важно: %F{51} — это обращение к 8-битной палитре (0–255). Терминал macOS поддерживает 256 цветов, но точный вид зависит от используемой цветовой схемы Terminal.app.
Создание профиля Z Shell (.zshrc) для хранения настроек
По умолчанию файл ~/.zshrc может отсутствовать. Чтобы создавать и хранить ваши персональные настройки, выполните:
- Откройте Terminal.
- Создайте файл (если его нет):
touch ~/.zshrc- Откройте его в текстовом редакторе (например, nano):
nano ~/.zshrcФайл ~/.zshrc используется для интерактивных (non-login) оболочек; для login-оболочек служат .zprofile и .zlogin. Если хотите, чтобы настройки применялись и там, дублируйте критичные строки или подключайте ~/.zshrc из этих файлов.
Совет: храните резервную копию ~/.zshrc в dotfiles-репозитории (например, git) для лёгкой синхронизации между машинами.
Как изменить приглашение: базовый пример
Откройте ~/.zshrc и добавьте строку с PROMPT или PS1. Примеры ниже можно вставлять и тестировать, открывая новую вкладку Terminal (Cmd+T).
Минимальный пример — только имя пользователя и символ $:
PROMPT='%n:~$ 'Если хотите статическое имя пользователя (например, красивый кастомный префикс):
PROMPT='customusername~$ 'После сохранения файла в nano: Ctrl+O (сохранить) и Ctrl+X (выйти).
Добавление даты и времени
Чтобы не отрывать взгляд от терминала, можно поместить дату и/или время прямо в приглашение.
Примеры форматов:
- %D — дата в формате yy-mm-dd.
- %W — дата в формате mm/dd/yy.
- %T — время в 24-часовом формате HH:MM.
- %t — время в 12-часовом формате.
- %* — время в 24-часовом формате с секундами.
Пример с датой в PROMPT:
PROMPT='%n:%W:~$ 'Пример с временем:
PROMPT='%n@%T>~$ 'Если нужно разместить дату/время справа, используйте RPROMPT:
RPROMPT='%D @ %T'RPROMPT автоматически рисуется справа и хорошо работает в широких терминалах; при узком окне оно может перехлёстываться с основной строкой.
Цвет, выделение и визуальные эффекты
Z shell поддерживает набор эффектов и цветов. Цвета задаются через %F{color} … %f. Примеры:
Текст циана:
PROMPT='%F{cyan}%n%f:~$ 'Использование 8-битной палитры (число 0–255):
PROMPT='%F{51}%n%f:~$ 'Жирный, выделенный и подчёркнутый текст:
PROMPT='%B%F{51}%n%f%b:~$ '
PROMPT='%S%F{51}%n%f%s:~$ '
PROMPT='%U%F{51}%n%f%u:~$ 'Сочетайте эффекты аккуратно: слишком много цветов и эффектов мешают читаемости. Придерживайтесь 1–2 цветовых акцентов и одного эффекта (жирный или подчёркнутый).
Примеры полезных шаблонов .zshrc
Ниже — набор готовых шаблонов, которые можно скопировать в ~/.zshrc и адаптировать.
Шаблон 1 — минималистичный:
# Минимальное приглашение
PROMPT='%n:%1~$ '
RPROMPT=''Шаблон 2 — информативный (имя, хост, путь):
PROMPT='%F{33}%n%f@%F{27}%m%f %1~ %# '
RPROMPT='╱ %T 'Шаблон 3 — с датой/временем справа и цветом:
PROMPT='%F{51}%n%f:%F{244}%1~%f %# '
RPROMPT='%F{240}%D @ %T%f'Шаблон 4 — с веткой Git (подключает функцию vcs_info):
autoload -Uz vcs_info
precmd() { vcs_info }
setopt prompt_subst
PROMPT='%F{39}%n%f %1~ %F{166}${vcs_info_msg_0_}%f %# '
RPROMPT='%F{240}%T%f'
# Настройка формата для vcs_info
zstyle ':vcs_info:git:*' formats '(%b)'Шаблон 5 — красочное приглашение с 256-цветами:
PROMPT='%F{220}%B %n %b%f %F{111}%1~%f %F{244}%#%f '
RPROMPT='%F{245}%D %T%f'Пояснение: setopt prompt_subst позволяет интерпретировать вложенные команды и переменные в PROMPT. precmd() — функция, выполняющаяся перед каждой командой приглашения; удобно для обновления информации (например, с git).
Когда не стоит перегружать приглашение (контрпример)
- Если вы используете tmux или iTerm с собственным статус-баром — не дублируйте всю информацию в PROMPT.
- В сценариях автоматизации (скрипты, запускаемые non-interactively) лишние escape-последовательности могут ломать парсинг вывода.
- Не выводите в приглашении конфиденциальные данные (ключи API, секреты, токены).
Ментальные модели и правила проектирования приглашения
- Правило 1: Принцип «информационной ёмкости» — показывайте максимум полезного при минимуме визуального шума.
- Правило 2: Разделяй и подчёркивай — используйте цвет или символы для группировки (пользователь | путь | git).
- Правило 3: Контекст важнее украшений — при частой смене директорий ставьте путь компактно (%1~).
Чеклисты по ролям
Разработчик:
- Видна текущая ветка Git.
- Есть визуальный индикатор статуса (чистая/грязная ветка).
- Путь короче, чтобы сохранить место.
Системный администратор / DevOps:
- Отображается имя хоста и признак root.
- Время или дата доступны справа.
- Цвета контрастные и видны в SSH-сессиях.
Data Scientist / ML инженер:
- Видна активная виртуальная среда (venv/conda).
- Путь к проекту краткий.
- Никаких секретов в приглашении.
Критерии приёмки
- При открытии новой вкладки Terminal PROMPT соответствует ожидаемому шаблону.
- RPROMPT не накладывается на длинный путь при стандартной ширине окна (80+ колонок).
- При переключении ветки Git отображение обновляется (если используется vcs_info).
- Ввод команд и автодополнение работают без задержек.
Тестирование и случаи приёмки
Тестовые сценарии:
- Открыть новую вкладку — проверить PROMPT.
- Перейти в домашнюю директорию — проверить, что отображается ~.
- Перейти в глубокую вложенную директорию — проверить обрезку %1~.
- В репозитории Git сменить ветку — проверить отображение ветки.
- Сменить ширину окна на узкую — проверить поведение RPROMPT.
Критерии успеха: все сценарии выполняются без артефактов в выводе и без задержек >250 ms на обновление приглашения.
Как быстро скрыть строку Last login
Чтобы убрать верхнюю строку с “Last login” и сделать вывод чище, создайте файл .hushlogin в домашней директории:
touch ~/.hushloginПосле этого при следующем запуске Terminal строка последнего входа не будет показываться.
Сброс настроек и откат изменений
Чтобы вернуться к системному виду по умолчанию, можно задать PROMPT в ~/.zshrc так:
PROMPT="%n@%m %1~ %#"Или удалить/закомментировать строки PROMPT/PS1 и RPROMPT в ~/.zshrc; тогда будет использоваться /etc/zshrc. Если вы вносили конфигурацию в другие dotfiles, восстановите их из резервной копии (git).
Инцидентный план отката:
- Откройте новую вкладку Terminal с опцией “New Command” → /bin/zsh –no-rcs чтобы запустить чистую оболочку.
- Проверьте системный /etc/zshrc.
- Восстановите ~/.zshrc из копии: cp ~/.zshrc.backup ~/.zshrc или git checkout.
Безопасность и приватность
- Не сохраняйте секреты в приглашении (пароли, токены, пути к приватным ключам).
- Если приглашение вызывает внешние команды (например, вызов git через $(…)), убедитесь, что операции быстрые и безопасные.
- В SSH-сессиях проверьте цветовую палитру: некоторые цвета могут быть не поддержаны удалённой терминальной программой.
Советы по производительности
- Не выполняйте тяжёлых команд в PROMPT или precmd — это замедлит ввод.
- Используйте vcs_info вместо сложных оболочечных обёрток для получения информации о VCS: он оптимизирован.
- Кэшируйте результаты тяжёлых вычислений, если они нужны в PROMPT.
Таблица популярных escape-последовательностей (шпаргалка)
- %n — имя пользователя
- %m — имя хоста (до первого .)
- %M — полное имя хоста
- %~ — путь с заменой $HOME на ~
- %1~ — последний сегмент пути с заменой $HOME
- %# — # для root, % для обычного пользователя
- %D — дата yy-mm-dd
- %W — дата mm/dd/yy
- %T — время HH:MM
- %t — время в 12-часовом формате
- %* — время c секундами
- %F{color} … %f — цвет текста
- %B/%b — включить/выключить жирный шрифт
- %U/%u — включить/выключить подчёркивание
Примеры расширенных сценариев
Пример: подсветка в зависимости от статуса последней команды (зеленый — успех, красный — ошибка):
setopt PROMPT_SUBST
precmd() {
if [[ $? -eq 0 ]]; then
STATUS="%F{82}✔%f"
else
STATUS="%F{160}✖%f"
fi
}
PROMPT='%B%F{51}%n%f%b %1~ ${STATUS} %# 'Пример: отображение активной Python venv (если есть):
function prompt_venv() {
if [[ -n "$VIRTUAL_ENV" ]]; then
echo "(`basename $VIRTUAL_ENV`) "
fi
}
PROMPT='$(prompt_venv)%F{33}%n%f %1~ %# 'Замечание: для этих примеров важно включить setopt prompt_subst, чтобы подстановка команд работала корректно.
Decision flow — какой тип приглашения выбрать
flowchart TD
A[Что вам важнее?] -->|Максимум информации| B[Информативное: host, git, time]
A -->|Минимализм| C[Минимальное: user, path]
B --> D{Используете git?}
D -->|Да| E[Добавьте vcs_info и git-ветку]
D -->|Нет| F[Уберите git-блок]
C --> G{Нужны ли цвета?}
G -->|Да| H[1–2 цвета + один эффект]
G -->|Нет| I[Статический текст]Совместимость и миграция
- При переносе настроек между Mac и Linux проверьте поддержку 256 цветов и кодировку терминала.
- Если используете iTerm2 — проверьте дополнительные escape-последовательности (например, для семантического статуса).
- В SSH-сессиях убедитесь, что переменная TERM установлена корректно (xterm-256color для поддержки 256 цветов).
Шпаргалка для быстрого внедрения (SOP)
- Создать резервную копию: cp ~/.zshrc ~/.zshrc.backup
- Открыть nano ~/.zshrc
- Вставить выбранный шаблон и сохранить
- Открыть новую вкладку Terminal и проверить
- При ошибках запустить zsh с –no-rcs и откатить изменения
Рекомендации по локализации и читаемости
- Используйте однотипные символы-разделители (например, пробел, двоеточие, стрелка >) для консистентности.
- Контрастные цвета повышают читабельность; избегайте светлых оттенков на светлом фоне.
Короткое объявление (для рассылки, 100–200 слов)
Хотите сделать Terminal удобнее и информативнее? Настройте zsh-приглашение через ~/.zshrc: добавьте имя пользователя, путь, дату/время, цветовые акценты и отображение ветки Git. В статье — готовые шаблоны, чеклисты для разных ролей, советы по безопасности и откату. Всего несколько строк в .zshrc — и приглашение работает именно так, как вам нужно.
Краткое резюме
- PROMPT / PS1 задают основную строку приглашения.
- RPROMPT позволяет выводить правую полезную информацию (время, дата).
- Для веток Git используйте vcs_info или быстрые функции с кэшированием.
- Не добавляйте секреты в приглашение; избегайте тяжёлых операций в PROMPT.
Резюме: эксперименты с PROMPT и RPROMPT дают быстрый выигрыш в удобстве работы в Terminal. Начните с простого шаблона и постепенно добавляйте элементы, проверяя производительность и читаемость.
Важно: если вы используете dotfiles в git, держите ~/.zshrc в репозитории с приватным доступом или в публичном — но без чувствительной информации.
Похожие материалы
Как печатать PDF и письма в Windows 8
Резиновая анимация: стиль и приёмы
Сделайте старую Wii медиаплеером — WiiMC
Клавиатура и мышь на PS5: подключение и совместимость
Как изменить аватар и фото профиля Reddit