Настройка красивого терминала Unix с оболочкой Zsh
Перевод статьи «Configure a beautiful terminal on Unix with Zsh», автор – Deepu K Sasidharan. Перевод опубликован на сайте hexx.in.ua.
На протяжении довольного долгого времени я был пользователем Windows, причем совершенно довольным. Но я – разработчик, и в Windows мне не хватало многих вещей. Основная из них – приятная работа с терминалом. Я не фанат закрытой экосистемы Apple, поэтому для меня логичным выбором стал Linux, на который я и перешел почти 3 года назад. Начал я с Ubuntu, а потом выбрал Fedora, и теперь это моя основная операционная система. О моих настройках машины и системы можно почитать здесь.
Я разработчик-senior и лидер open source сообщества, я провожу много времени, работая с терминалом. А если работа с терминалом приятная, это сразу делает вас счастливее и продуктивнее. Дефолтный bash-терминал годится для новичков, но если вы хотите по-настоящему мощный терминал, вам нужно что-то большее, чем bash.
Давайте посмотрим, как можно настроить терминал для продуктивной работы. Я расскажу о настройках, который у меня стоят на моей машине с Fedora. Но то же самое можно воспроизвести в любом дистрибутиве Linux, BSD или на Mac. Надо только найти соответствующие инструкции по установке инструментов.
Итак, список инструментов.
Zsh – одна из наиболее полнофункциональных командных оболочек для Unix. Она работает в Linux, Mac, WSL и BSD. Есть альтернативные варианты с похожим функционалом, например Fish, но лично мне нравится Zsh.
1. Проверьте, не установлена ли у вас Zsh. Для этого запустите в терминале команду zsh –version. Если ничего не найдено, установите оболочку, используя свой менеджер пакетов.
3. Выйдите из системы и войдите заново (log out / log in), чтобы в дальнейшем использовать вашу новую дефолтную оболочку.
Oh-My-Zsh
Oh-My-Zsh дает оболочке Zsh суперсилу. Это фреймворк для управления настройками Zsh. В нем есть плагины и темы для Zsh (много).
С Github-страницы Oh-My-Zsh:
«После установки ваша оболочка терминала станет главным поводом для разговоров в вашем окружении, или мы вернем деньги! При каждом нажатии на клавишу вы будете получать все преимущества сотен плагинов и прекрасных тем. Незнакомцы станут подходить к вам в кафе и спрашивать, не гений ли вы».
Просто установите этот фреймворк. Поверьте, он вам нужен 🙂
Эмулятор терминала
При желании вы можете использовать эмулятор терминала с управлением окнами и панелями.
Для Linux я бы посоветовал Tilix. Я пользуюсь им три года, и могу сказать, что он просто великолепен.
Для Mac можно выбрать iTerm2, он очень популярен.
Если хотите что-то более легкое для своего терминала на Linux, BSD и Mac, можно остановиться на tmux.
Настройка Zsh
Переходим к наиболее интересной части. Давайте сделаем наш терминал звездой.
Установите плагины
Сначала давайте установим несколько дополнительных плагинов, которые не входят в Oh-My-Zsh.
zsh-autosuggestions
Добавляет автозаполнения для shell-команд.
Для установки запустите
zsh-syntax-highlighting
Подсветка синтаксиса в оболочке.
Для установки запустите
autojump
Умнее система навигации по директориям. Инструкции по установке для вашей операционной системы можно найти здесь.
Теперь давайте внесем определенные настройки в конфигурационный файл
Добавьте экспорты
Начнем с нескольких.
Настройка Zsh
Теперь давайте внесем некоторые настройки, специфичные для Zsh.
Тема Zsh
Давайте выберем хорошую тему. Я пользуюсь powerlevel10k, она быстрая и хорошо выглядит. Вы можете оставить дефолтную тему или любую из списка. Если вам нравится моя тема, обратите внимание на советы Романа Перепелицы.
Для установления темы запустите
Добавьте следующие конфигурации в файл
Включите плагины
Мы можем завершить настройку, включив плагины и некоторые опции.
Все готово. Открывайте новую сессию терминала и наслаждайтесь.
Возможные проблемы и их решение
Если вы используете эмулятор терминала Tilix, вам может понадобиться еще кое-что. Добавьте это в файл
Если вы получаете сообщения об ошибках от плагина zsh-completion, можно добавить вот это в начале вашего файла
Докеризованная игровая площадка
Если у вас установлен Docker, вы можете использовать этот сниппет, чтобы попробовать настройки в песочнице, ничего не устанавливая и не касаясь текущих настроек.
Совет для пользователей VSCode
Если вы, как и я, пользуетесь VSCode, можно кое-что сделать, чтобы интегрированный терминал в редакторе был таким же, как в системе.
Цвета терминала Linux
Одно из главных преимуществ Linux заключается в том, что при желании в нём можно настроить всё, что угодно. В этом и выражается преимущество проективных систем, над процедурными. Фактически, это конструктор, состоящий из отдельных блоков, каждый из которых можно настроить по своему желанию.
Особенно интересно, если не просто копируешь чужой «рецепт», а пытаешься разобраться, что и как устроено. И даже решая несерьезную задачу, узнаешь что-то новое.
Раскрашиваем цвета вывода ls
Как-то захотелось мне настроить цвета терминала linux в выводе команды ls. Ну не нравился блекло-фиолетовый цвет для каталогов в Linux Mint. Начал разбираться.
Из документации к ls, выяснил, что установка цветов для вывода осуществляется при помощи утилиты dircolors, которая либо устанавливает параметры цвета из своей собственной базы, либо берет их из файла
/.dircolors. Такого файла в моем домашнем каталоге не было. Также упоминалось, что инициализация использования цветов происходит через
/.bashrc, файл с настройками командной оболочки, а сами параметры определяются через переменную LC_COLORS.
Если запустить утилиту dircolors, она выводит значение переменной LC_COLOR.
Также возможен вывод значения переменной LC_COLORS в структурированном виде, указанием ключа:
Поскольку вывод получается длинный, приводить его не буду.
/.dircolors, то будет создан структурированный файл, из которого и будут браться настройки цветов. Редактируя данный файл и устанавливаются настройки цвета для вывода ls.
Устанавливая последовательность через точку с запятой и получаем нужный нам цвет в консоли linux, согласно перечисленным. Цвета терминала linux от 30 до 37 для цвета шрифта, а с 40 до 47 для фона. К примеру:
DIR 01;34 подразумевает, что имена директорий будут выделяться жирным шрифтом и синим цветом.
Чтобы не перебирать цвета linux вручную, есть уже готовая таблица цветов:
Раскрашиваем и изменяем строку приглашения:
Разобравшись, как устанавливать цвета linux через esc-коды, не составит труда переделать и раскрасить строку приглашения. За ее вывод отвечает переменная PS1, которая определена в файле
В Linux Mint скрипт ее инициализации имеет следующий вид:
То-есть сперва определяется, запустил ли скрипт root или обычный пользователь. Поскольку в подавляющем большинстве случаев имеет место именно второй вариант, то и редактировать нужно строку, следующую после первого ‘else’. Формат строки расшифрован в документации по баш, в разделе «Promting». Из него следует, что esc-последовательность должна начинаться с «\[» и заканчиваться «\]». Таким образом:
Что ещё можно вывести в строке приглашения:
Введем что нибудь поинтереснее:
И строка приглашения примет вид:
Так, не понял, а откуда взялась ёлка-то?
Как сделать красивую консоль в Mac и Linux
Если у вас OS X, поставьте iTerm2, он лучше стандартного Terminal.app. Если у вас Linux, то у вас наверняка уже есть неплохой терминал, или вы можете самостоятельно поставить любой, который вам нравится. Я вот люблю Sakura. Ещё я обычно меняю цветовую схему. Стандартные чёрные мне не очень нравятся, есть крутая схема Solarized. Как её устанавливать тоже зависит от вашего терминала.
Теперь настроим непосредственно шелл. Шелл — это оболочка, в которой выполняются команды. Он показывает вам так называемое приглашение, оно обычно состоит из имени пользователя, имени компьютера и пути к тому месту, где вы сейчас находитесь. И выполняет команды, которые вы в него вводите. Стандартный шелл выглядит так:

Скучновато, правда? Первое, что мы сделаем — сменим оболочку с bash на zsh. Bash — это стандартная оболочка, которая поставляется в комплекте большинства систем. Zsh — это более современная оболочка со множеством плюшек. По сравнению с bash улучшены автодополнение, алиасы, хоткеи. Всё, что может bash, zsh может тоже, так что не вижу причин не переходить. У пользователей OS X zsh уже есть на компьютере, а пользователям Linux, скорее всего, нужно его установить. В Ubuntu и Debian это делается просто:

Пользователи остальных систем наверняка справятся с установкой. Теперь нужно сделать, чтобы zsh был вашей оболочкой по умолчанию, то есть использовался каждый раз, когда вы открываете терминал. Для этого есть команда chsh (change shell):


Теперь нужно выйти из системы и снова зайти. Когда вы откроете терминал, увидите приветственное сообщение zsh. Он предлагает вам ничего не делать, записать в свои настройки только комментарии, чтобы это сообщение не появлялось в следующий раз или пойти в меню настройки:

Мы, ничего не делая, выйдем (нажмём q ), потому что знаем секрет. Секрет в том, что не нужно писать длинный конфиг, если вы новый пользователь: частые проблемы и хотелки уже решили другие, и родилась такая замечательная штука — Oh My ZSH. Это набор плагинов и настроек, которые решают самые популярные задачи и делают ваш шелл просто офигенным. Установим его, следуя инструкциям с официального сайта:
Установка прошла, но ничего не поменялось? Надо закрыть терминал и снова открыть его, чтобы настройки, которые приехали к нам из oh-my-zsh, прочитались и применились. Закрыли-открыли, теперь видим новое приветствие:


Сохраните файл и снова перезапустите терминал (или откройте в нём новую вкладку). Теперь шелл выглядит по-новому:

Это тема Bureau. В верхней строчке сначала имя пользователя, потом имя машины, потом путь к папке, где пользователь сейчас находится. Справа текущее время. В следующей строке просто символы, которые обозначают, что ввод здесь, а справа после шестиугольника текущая версия Node.js, ветка Git (если пользователь сейчас в Git-репозитории), и кружочки, которые обозначают, что есть несохранённые изменения. В этой теме версия Node.js показывается только если вы используете Node Version Manager.

А это тема Лёши, можете её взять из github и сохранить в папке
Да и вообще, полистайте список тем и выберите ту, которая вам по душе. Или склейте свою из кусочков понравившихся тем, или даже напишите с нуля! Все темы лежат в папке
Делаем Linux терминал красивым и удобным
Добавляем функциональность
Командная оболочка
Большинство дистрибутивов поставляется со встроенным Bash. Используя дополнения можно сделать из него все что захотите, но гораздо проще этого добиться с Zsh. Почему?
Настройка Zsh
Для начала, установим Zsh (если он уже установлен, например, как в Manjaro, можете пропустить этот пункт):
Oh-My-Zsh — популярный и активно развивающийся фреймворк Zsh, который позволяет гибко настроить оболочку терминала. Установим его:
Подсветка синтаксиса. Гораздо проще ориентироваться по содержимому терминала, когда разные части команд подсвечены разными цветами. Например, директории будут подчеркиваться, а команды — выделяться цветом, отличным от обычного текста. Установим плагин zsh-syntax-highlighting :
Чтоб плагин заработал, его надо подключить.
/.zshrc меняем строку с plugins= :
Если такой строки нет — добавьте её.
Готово! Получаем удобный и функциональный терминал. Теперь сделаем его визуально приятным.
Настраиваем внешний вид
Скачиваем и добавляем в систему шрифт JetBrains Mono Nerd (c иконками):
Выберитеодин из списка, в папке шрифт/complete выберите шрифт без «Windows Compatible», с окончанием «Mono».
Подключаем шрифт и тему.
Если в файле эти строки уже есть — замените их.
Цвета. Важная часть оформления терминала — цветовая схема. Я перебрал много разных схем, редактировал их, остановился на Monokai Dark. Не режет глаза, но при этом приятная и яркая. Список цветов:
В разных терминалах по-разному меняется цветовая схема (обычно, это делается через настройки терминала), но порядок цветов везде одинаковый. Вы можете импортировать этот шаблон в формате Termite и экспортировать его для вашего терминала через terminal.sexy
Финальный штрих — меняем конфиг темы и заменяем встроенные цвета.
Если в файле эти строки уже есть — замените их. Коды цветов можно получить командой
Делаем Linux терминал удобнее и красивее
Идея статьи возникла только лишь в связи с ленью осваивать Tmux Terminal Multiplexer и ставить дополнительную надстройку к терминалу кали, дабы “сплитить” 1 сессию терминала на “мультиокна”. Не навязываю никому свою идею, но считаю ее более удобной в реализации процесса автоматизации работы с терминалом в довесок с плюшками и красивостями zsh. Кто знает устанавливая tnux нужно еще подключать курсор, делать замыкание активного акна при копировании строки в буфер обмена и много других совершенно не нужных манипуляций.
Итак, устанавливаем Deepin Ternimal который с недавних пор идет в составе репозиториев Кали Линукса
Затем открываем его и смотрим настройки:
Как мы видим управление слитами экрана уже с коробки, так же вкладки, которые можно переименовывать и мн. др, в том числе темы.
Дальше делаем его немного удобнее и красивее с помощью zsh
Делаем его основным окружением шела:
Устанавливаем надстройку Oh My zsh
Ставим шрифты для красивостей
Затем меняем тему оформления и ставим плагины:
в разделе ZSH_THEME= меняем на “agnoster”
Плагин подсветки текста:
Плагин автоподстановки текста:
Дополняем строку конфигуратора в разделе plugins=(git extract web-search yum git-extras docker vagrant zsh-syntax-highlighting zsh-autosuggestions)
Ну и опять же кому что, а я пользуюсь быстрыми ll для листинга директорий и прописываю альяс:
Если хотите убрать хостнейм то в конфигурации прописываете так prompt_context() <>
Для применения внесенных изменений в активной консоли пишем
Ну и в довесок, у кого не прописан путь исплавляем это














