Гид по технологиям

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

8 min read macOS Обновлено 24 Dec 2025
Настройка zsh-приглашения в macOS
Настройка zsh-приглашения в macOS

Человек, использующий Terminal на MacBook Pro

Что вы получите из этой статьи

  • Понимание базовых переменных 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.

Обычное приглашение zsh по умолчанию

Создание профиля Z Shell (.zshrc) для хранения настроек

По умолчанию файл ~/.zshrc может отсутствовать. Чтобы создавать и хранить ваши персональные настройки, выполните:

  1. Откройте Terminal.
  2. Создайте файл (если его нет):
touch ~/.zshrc
  1. Откройте его в текстовом редакторе (например, 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 (выйти).

Использовать только имя пользователя в приглашении zsh

Добавление даты и времени

Чтобы не отрывать взгляд от терминала, можно поместить дату и/или время прямо в приглашение.

Примеры форматов:

  • %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 автоматически рисуется справа и хорошо работает в широких терминалах; при узком окне оно может перехлёстываться с основной строкой.

Отображение даты и времени справа в приглашении zsh

Цвет, выделение и визуальные эффекты

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 цветовых акцентов и одного эффекта (жирный или подчёркнутый).

Примеры цветного и выделенного приглашения

Пример жирного текста в приглашении zsh

Пример выделения и подчёркивания

Пример подчёркнутого приглашения zsh

Примеры полезных шаблонов .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).
  • Ввод команд и автодополнение работают без задержек.

Тестирование и случаи приёмки

Тестовые сценарии:

  1. Открыть новую вкладку — проверить PROMPT.
  2. Перейти в домашнюю директорию — проверить, что отображается ~.
  3. Перейти в глубокую вложенную директорию — проверить обрезку %1~.
  4. В репозитории Git сменить ветку — проверить отображение ветки.
  5. Сменить ширину окна на узкую — проверить поведение 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).

Инцидентный план отката:

  1. Откройте новую вкладку Terminal с опцией “New Command” → /bin/zsh –no-rcs чтобы запустить чистую оболочку.
  2. Проверьте системный /etc/zshrc.
  3. Восстановите ~/.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)

  1. Создать резервную копию: cp ~/.zshrc ~/.zshrc.backup
  2. Открыть nano ~/.zshrc
  3. Вставить выбранный шаблон и сохранить
  4. Открыть новую вкладку Terminal и проверить
  5. При ошибках запустить zsh с –no-rcs и откатить изменения

Рекомендации по локализации и читаемости

  • Используйте однотипные символы-разделители (например, пробел, двоеточие, стрелка >) для консистентности.
  • Контрастные цвета повышают читабельность; избегайте светлых оттенков на светлом фоне.

Короткое объявление (для рассылки, 100–200 слов)

Хотите сделать Terminal удобнее и информативнее? Настройте zsh-приглашение через ~/.zshrc: добавьте имя пользователя, путь, дату/время, цветовые акценты и отображение ветки Git. В статье — готовые шаблоны, чеклисты для разных ролей, советы по безопасности и откату. Всего несколько строк в .zshrc — и приглашение работает именно так, как вам нужно.

Краткое резюме

  • PROMPT / PS1 задают основную строку приглашения.
  • RPROMPT позволяет выводить правую полезную информацию (время, дата).
  • Для веток Git используйте vcs_info или быстрые функции с кэшированием.
  • Не добавляйте секреты в приглашение; избегайте тяжёлых операций в PROMPT.

Резюме: эксперименты с PROMPT и RPROMPT дают быстрый выигрыш в удобстве работы в Terminal. Начните с простого шаблона и постепенно добавляйте элементы, проверяя производительность и читаемость.


Важно: если вы используете dotfiles в git, держите ~/.zshrc в репозитории с приватным доступом или в публичном — но без чувствительной информации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как печатать PDF и письма в Windows 8
Windows

Как печатать PDF и письма в Windows 8

Резиновая анимация: стиль и приёмы
Анимация

Резиновая анимация: стиль и приёмы

Сделайте старую Wii медиаплеером — WiiMC
Гайды

Сделайте старую Wii медиаплеером — WiiMC

Клавиатура и мышь на PS5: подключение и совместимость
Гайды

Клавиатура и мышь на PS5: подключение и совместимость

Как изменить аватар и фото профиля Reddit
Социальные сети

Как изменить аватар и фото профиля Reddit

Как вести живой видеоподкаст каждую неделю
Подкастинг

Как вести живой видеоподкаст каждую неделю