Как сделать красивый терминал linux

Обновлено: 07.07.2024

Одно из главных преимуществ Linux заключается в том, что при желании в нём можно настроить всё, что угодно. В этом и выражается преимущество проективных систем, над процедурными. Фактически, это конструктор, состоящий из отдельных блоков, каждый из которых можно настроить по своему желанию.

Особенно интересно, если не просто копируешь чужой "рецепт", а пытаешься разобраться, что и как устроено. И даже решая несерьезную задачу, узнаешь что-то новое.

Раскрашиваем цвета вывода ls

Как-то захотелось мне настроить цвета терминала linux в выводе команды ls. Ну не нравился блекло-фиолетовый цвет для каталогов в Linux Mint. Начал разбираться.

Из документации к ls, выяснил, что установка цветов для вывода осуществляется при помощи утилиты dircolors, которая либо устанавливает параметры цвета из своей собственной базы, либо берет их из файла

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

/.bashrc, файл с настройками командной оболочки, а сами параметры определяются через переменную LC_COLORS.

Действительно, в .bashrc обнаружился скрипт следующего содержания:


Его суть сводится к проверке на наличие утилиты dircolors в системе, присваивания значения переменной и, при удачном выполнении, использовании параметра --color=auto при каждом вызове ls.

Если запустить утилиту dircolors, она выводит значение переменной LC_COLOR.


Также возможен вывод значения переменной LC_COLORS в структурированном виде, указанием ключа:

Поскольку вывод получается длинный, приводить его не буду.

/.dircolors, то будет создан структурированный файл, из которого и будут браться настройки цветов. Редактируя данный файл и устанавливаются настройки цвета для вывода ls.

В созданном файле .dircolors есть подсказка:


Устанавливая последовательность через точку с запятой и получаем нужный нам цвет в консоли linux, согласно перечисленным. Цвета терминала linux от 30 до 37 для цвета шрифта, а с 40 до 47 для фона. К примеру:

DIR 01;34 подразумевает, что имена директорий будут выделяться жирным шрифтом и синим цветом.

Но таким способом получается всего восемь цветов, а современные эмуляторы терминала способны выводить как минимум 256! Выяснилось, что существуют и другие способы установки цвета. К примеру, значение EXEC 38;5;208;1 - даёт оранжевый толстый шрифт у исполняемых файлов.

Чтобы не перебирать цвета linux вручную, есть уже готовая таблица цветов:


Подставляя в значение цвета 38;5;x - где x цвет из таблицы, получаем необходимый результат. Получается что-то вроде этого:


Но как это работает? Дело в том, что установка цвета вывода информации в эмуляторе терминала осуществляется при помощи ANSI escape-кодов. Это определенная последовательность символов, которая не выводится на экран, однако влияет на вывод. Называется она так, поскольку начинается с \033[ - кода "Esc". Поскольку терминалов и эмуляторов терминалов существует множество, эти управляющие коды стандартизированы. Управлением цветом через последовательность от 30 до 37 - это стандарт ECMA-48. Информация о нем содержится в разделе console_codes. А управление через 38;5;* - определено стандартом T.416. Более подробная информация есть, конечно же, в Википедии.

Раскрашиваем и изменяем строку приглашения:

Разобравшись, как устанавливать цвета linux через esc-коды, не составит труда переделать и раскрасить строку приглашения. За ее вывод отвечает переменная PS1, которая определена в файле

В Linux Mint скрипт ее инициализации имеет следующий вид:


То-есть сперва определяется, запустил ли скрипт root или обычный пользователь. Поскольку в подавляющем большинстве случаев имеет место именно второй вариант, то и редактировать нужно строку, следующую после первого 'else'. Формат строки расшифрован в документации по баш, в разделе "Promting". Из него следует, что esc-последовательность должна начинаться с "\[" и заканчиваться "\]". Таким образом:

  • [\033[01;32m\] - устанавливает зеленый цвет;
  • \u - выводит имя пользователя;
  • \h - выводит имя хоста;
  • [\033[00m\] - очищает установленные атрибуты;
  • [\033[01;34m\] - устанавливает синий цвет;
  • \w - выводит имя рабочей директории;
  • Привет! - пример того, что может быть выведен любой производный текст.

Что ещё можно вывести в строке приглашения:

  • \d - дату, в формате "Wed Dec 28";
  • \A - время в 24-часовом формате;
  • \! - номер текущей команды в истории;
  • \n - перенос вывода на другую строку;

Введем что нибудь поинтереснее:

И строка приглашения примет вид:


Так, не понял, а откуда взялась ёлка-то?

Ну ладно, на самом деле, если в конец .bashrc вставить echo -e "С Новым годом", то поздравление будет выводиться при каждом запуске терминала перед приглашением ввода. Соответственно, вывод можно раскрашивать каким угодно способом. А там уж и ёлку нарисовать не сложно.

Перевод статьи «Configure a beautiful terminal on Unix with Zsh», автор – Deepu K Sasidharan. Перевод опубликован на сайте hexx.in.ua.

Терминал с оболочкой zsh

На протяжении довольного долгого времени я был пользователем 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. Если ничего не найдено, установите оболочку, используя свой менеджер пакетов.

  • Fedora: sudo dnf install zsh
  • Mac: brew install zsh zsh-completions
  • RHEL / CentOS: sudo yum update && sudo yum -y install zsh
  • Ubuntu / Debian: sudo apt install zsh
  • Инструкции для других платформ можно найти по ссылке.

2. Теперь сделайте Zsh вашей дефолтной оболочкой, запустив chsh -s $(which zsh) .

3. Выйдите из системы и войдите заново (log out / log in), чтобы в дальнейшем использовать вашу новую дефолтную оболочку.

Проверьте, успешно ли прошла смена оболочки, выполнив команду echo $SHELL . Ожидаемый результат – /bin/zsh или что-то подобное.

5. Протестируйте еще раз, проверив версию оболочки: $SHELL --version . Ожидаемый результат – нечто вроде zsh 5.6.2 .

Примечание. Если вы установили Zsh впервые, оболочка предложит сделать определенные настройки. Вы можете проигнорировать это предложение, нажав q , поскольку дальше мы все равно займемся настройками.

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

Умнее система навигации по директориям. Инструкции по установке для вашей операционной системы можно найти здесь.

Теперь давайте внесем определенные настройки в конфигурационный файл

/.zshrc . Здесь вы найдете мой файл .zshrc. Ваш может отличаться.

Добавьте экспорты

Начнем с нескольких.

Настройка Zsh

Теперь давайте внесем некоторые настройки, специфичные для Zsh.

Тема Zsh

Давайте выберем хорошую тему. Я пользуюсь powerlevel10k, она быстрая и хорошо выглядит. Вы можете оставить дефолтную тему или любую из списка. Если вам нравится моя тема, обратите внимание на советы Романа Перепелицы.

Для установления темы запустите

Добавьте следующие конфигурации в файл

Включите плагины

Мы можем завершить настройку, включив плагины и некоторые опции.

Все готово. Открывайте новую сессию терминала и наслаждайтесь.

Возможные проблемы и их решение

Если вы используете эмулятор терминала Tilix, вам может понадобиться еще кое-что. Добавьте это в файл

Если вы получите ошибку от Oh-My-Zsh, где сказано [oh-my-zsh] Insecure completion-dependent directories detected , установите ZSH_DISABLE_COMPFIX=true непосредственно перед строкой source $ZSH/oh-my-zsh.sh в вашем файле

/.zshrc и перезагрузите сессию или запустите exec zsh .

Докеризованная игровая площадка

Если у вас установлен Docker, вы можете использовать этот сниппет, чтобы попробовать настройки в песочнице, ничего не устанавливая и не касаясь текущих настроек.

Совет для пользователей VSCode

Если вы, как и я, пользуетесь VSCode, можно кое-что сделать, чтобы интегрированный терминал в редакторе был таким же, как в системе.

Если у вас OS X, поставьте iTerm2, он лучше стандартного Terminal.app. Если у вас Linux, то у вас наверняка уже есть неплохой терминал, или вы можете самостоятельно поставить любой, который вам нравится. Я вот люблю Sakura. Ещё я обычно меняю цветовую схему. Стандартные чёрные мне не очень нравятся, есть крутая схема Solarized. Как её устанавливать тоже зависит от вашего терминала.

Теперь настроим непосредственно шелл. Шелл — это оболочка, в которой выполняются команды. Он показывает вам так называемое приглашение, оно обычно состоит из имени пользователя, имени компьютера и пути к тому месту, где вы сейчас находитесь. И выполняет команды, которые вы в него вводите. Стандартный шелл выглядит так:

Стандартное приглашение в шелле

Стандартное приглашение в шелле

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

Установка zsh в Ubuntu и Debian

Установка zsh в Ubuntu и Debian

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

Ввод пароля при смене шелла

Ввод пароля при смене шелла

Смена оболочки по умолчанию

Смена оболочки по умолчанию

Приветствие от zsh

Приветствие от zsh

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

Установка прошла, но ничего не поменялось? Надо закрыть терминал и снова открыть его, чтобы настройки, которые приехали к нам из oh-my-zsh, прочитались и применились. Закрыли-открыли, теперь видим новое приветствие:

Приветствие шелла после установки Oh My ZSH!

Приветствие шелла после установки Oh My ZSH!

Это стандартная тема oh-my-zsh под названием robbyrussell (по имени автора). Мы можем поставить любую из тем, которые поставляются с oh-my-zsh. Я, например, использую Bureau, когда-то я её писала, потому что не нашла подходящей. Чтобы поменять тему, напишите её название (маленькими буквами, как на странице со списком тем) в файле .zshrc . Он лежит в вашей домашней папке ( /Users/Ваш_логин или /home/ваш_логин ). Поскольку он начинается с точки, он скрыт. Включите отображение скрытых файлов. Тему нужно прописать в переменную ZSH_THEME , это в районе восьмой строки, вот так:

Меняем тему в конфиге с помощью переменной ZSH_THEME

Меняем тему в конфиге с помощью переменной ZSH_THEME

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

Тема Bureau в шелле

Тема Bureau в шелле

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

Тема Agnoster в шелле

Тема Agnoster в шелле

А это тема Лёши, можете её взять из github и сохранить в папке

/.oh-my-zsh/themes , или установить простой командой:

Не забудьте прописать тему meritt в вашем файле .zshrc .

Да и вообще, полистайте список тем и выберите ту, которая вам по душе. Или склейте свою из кусочков понравившихся тем, или даже напишите с нуля! Все темы лежат в папке

/.oh-my-zsh/themes . Делитесь вашими темами: выкладывайте скриншоты и ссылки на файлы тем.

Terminal

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

И поскольку вы, вероятно, потратили значительное количество времени на настройку своего редактора кода — выбор наилучшего шрифта, установку темы Material Icon, чтобы ваши файлы и папки хорошо выглядели, и выбор лучших расширений — нет никаких причин не дать вашему терминалу тоже немного преобразиться.

При настройке своего я основывалась на нескольких различных статьях в интернете, документах и форумах по устранению неполадок. Мне всегда казалось, что эти статьи слишком глубоко уходят в технические нюансы, в то время как всё, чего я хотела, — это сделать терминал удобнее для быстрого использования. Поэтому я решила написать статью именно в таком духе: чтобы всем было проще.

Добравшись до конца статьи, вы тоже будете искать любую причину использовать командную строку, так что давайте начнем!


Скриншот моего кастомизированного терминала после применения настроек, описанных в этой статье

1. Терминал: настройка Hyper

Существует несколько эмуляторов терминалов, и хотя другие эмуляторы, такие как iTerm2, представляются более быстрыми (на момент написания этой статьи), они только для пользователей Mac. Я хочу сделать этот пост полезным для всех, поэтому остановлюсь на Hyper.

Hyper является кросс-платформенным (для этой цели он поставляется вместе с Electron), и в версии 3 появились значительные улучшения с точки зрения производительности. При создании v3 она была приоритетом разработчиков.

О новой версии Hyper вы можете прочитать в их блоге.

Иконка тоже стала только красивее, так что скачивайте Hyper, и давайте двигаться дальше.

Теперь немного конфигурации. В первую очередь нам нужно перейти к файлу .hyper.js (обратите внимание на точку в начале имени файла!), который расположен в папке /Users/<ваш_юзернейм> . Давайте откроем его:

Файл содержит объект конфигурации, где вы можете выбрать свой шрифт и добавить стили, плагины и многое другое. Когда вы впервые откроете его, он будет выглядеть примерно так:


Настройка Hyper — содержимое файла .hyper.js по умолчанию

В HyperStore есть множество доступных тем, которые можно рассматривать часами. Вы даже можете выбрать тему Пикачу. Я лично выбираю hyper-one-dark — из-за сходства с моей темой в VS Code:


Тема hyper-one-dark для Hyper

Чтобы установить ее, наберите:

Затем включите тему, добавив ее имя в массив plugins за границами объекта config в файле hyper.js :


Шрифт

Давайте внесем несколько изменений. Например, установим размер шрифта 14 и высоту строки 1,2 (если они еще не установлены таким образом).

Также установим наш собственный шрифт, изменив семейство шрифтов на FuraCode Nerd Font. Этот шрифт смотрится отлично, и вы можете скачать его здесь (или выбрать другой из доступных на этом сайте).

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

Лигатуры

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

Чтобы включить их, понадобится плагин hyper-font-ligatures .

Во-первых, установите его:

Во-вторых, нужно включить этот плагин, добавив его имя в массив plugins и отключив рендеринг WebGL внутри объекта config в hyper.js , вот так:


2. Оболочка: настройка Zsh

Начиная с macOS Catalina и далее, Apple заменила Bash (Bourne-again shell) на Zsh (Z shell) в качестве оболочки по умолчанию. Для нас это хорошая новость, так как именно эту оболочку мы и хотим использовать из-за ее более высоких возможностей настройки и поддержкой тем и плагинов.

Если вы еще не пользуетесь MacOS Catalina, давайте устанавливайте Zsh (для этого вам понадобится brew):

И добавьте в объект config в hyper.js .


Установка Zsh в качестве оболочки

Теперь, когда мы все на одной волне, можно начать кастомизацию приглашения командной строки.

3. Приглашение: настройка Spaceship Prompt

Приглашение — это текст, который вы видите перед своими командами, и по умолчанию он довольно беден и дает только основную информацию о файловой системе. Используя Spaceship Prompt, вы получаете гораздо больше информации, такой как:

  • текущая ветка Git и подробный статус репозитория;
  • текущая версия Node.js/Ruby/Python/Swift/Docker/т.д.;
  • версия пакета (если имеется);
  • символ подсказки становится красным, если последняя команда завершается с ненулевым кодом;
  • и многое другое.

На выбор вам предлагается несколько вариантов установки, включая npm:

Как указано в документации Spaceship prompt, данная команда должна связать spaceship.zsh как prompt_spaceship_setup с вашим $fpath и установить приглашение spaceship в .zshrc .

После этого вам потребуется перезагрузить терминал.

Примечание: если у вас не получается установить spaceship через NPM, попробуйте другие способы — мне в свое время пришлось воспользоваться вариантом Oh My Zsh, и всё сработало как по волшебству (в то время как по какой-то дикой причине я изо всех сил пыталась сделать всё через NPM).

Теперь ваше приглашение должно выглядеть так:


Подсветка синтаксиса

Теперь мы установим zsh-syntax-highlighting , который позволяет выделять команды, делая их намного более читабельными, и помогает избежать опечаток.

Эта команда добавит источник в конец файла .zshrc , который должен быть расположен (по крайней мере, в macOS Catalina) в папке /Users/<ваш_юзернейм> .

Откройте новый сеанс терминала, чтобы увидеть команды уже подсвеченными.

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

4. Расцвечиваем с помощью Color LS

Мы подошли к моей любимой части: используя Color LS, можно добавить цвета и красивые иконки для файлов и папок при выводе их списком в командной строке с помощью команды ls . Чтобы установить этот компонент, следуйте инструкциям, описанным здесь:

  1. Установите Ruby.
  2. Установите исправленные шрифты Powerline Nerd font и/или Font Awesome, как мы уже сделали в пункте о шрифтах.
  3. Установите colorls через Ruby gem с помощью команды:

4. Включите заполнение вкладки для флагов, введя приведенную ниже строку в свой файл .zshrc . Для этого откройте /Users/<ваш_юзернейм>/.zshrc в редакторе кода и добавьте:

Готово! Можете пользоваться Color LS. Теперь мы можем настроить цвета по-своему, модифицируя дефолтный файл dark_colors.yaml .

Сначала скопируйте dark_colors.yaml из $(dirname $(gem which colorls))/yaml в

/.config/colorls , выполнив следующую команду:

Затем вы можете открыть файл в редакторе кода и изменить цвета на свое усмотрение. Лично мне очень понравились цвета, выбранные Робертом Купером в его статье, на которую я полагалась, наряду с еще несколькими материалами, для создания своей собственной конфигурации. Поэтому я повторно использовала файл dark_colors.yaml , которым он так любезно делится здесь.

Наконец, давайте создадим три алиаса для вывода списка различной степени детализированности в зависимости от наших потребностей. Откройте файл .zshrc в редакторе кода и добавьте три следующие строки:


Определение алиасов для перечисления файлов и каталогов в терминале

Теперь, если вы наберете команду ls , ваши файлы и каталоги будут окрашены в приятный синий оттенок, как здесь:


5. Добавление функций с помощью плагинов

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

Значок активной вкладки

Вы заметили иконку лисички в заголовке моей вкладки на скриншоте в начале поста? Она появилась там благодаря этому плагину.

2. Добавьте его в массив плагинов в файле .hyper.js :


Добавление имени плагина в массив плагинов

3. Добавьте свойство activeTab с эмодзи по вашему выбору внутри объекта config файла .hyper.js :


Открытие новой вкладки в том же каталоге

Возможно, вам это и не нужно, но в девяти случаях из десяти, я открываю новую вкладку в терминале для выполнения действия над тем же проектом, над которым и работаю в данный момент. Необходимость каждый раз переходить к папке — пустая трата времени, поэтому плагин hypercwd оказывается очень полезным.

2. А затем добавьте в массив плагинов в файле .hyper.js :


Обновление от 30 мая 2020 года: похоже, что hypercwd сильно замедляет открытие новых вкладок! Как видите на приведенном ниже gif-файле, я отсчитала несколько секунд.

Дело в том, что hypercwd , похоже, не обновлялся уже в течение долгого времени. Но выход есть: кто-то добрый создал другой плагин, который делает то же самое (поддерживает тот же рабочий каталог при открытии новой вкладки в Hyper), но быстрее: hypersamewd.

Так что удалите hypercwd посредством hyper uninstall hypercwd и установите hyper-samewd , выполнив hyper i hyper-samewd .

После этого перезапустите Hyper и удостоверьтесь, что массив plugins в вашем файле .hyper.js теперь включает hyper-samewd . Если всё работает по-прежнему слишком медленно, то рекомендую открыть вопрос в репозитории hypersamewd, а пока что на время отключить плагин.

Ctrl-F для вашего терминала

Чтобы осуществлять текстовый поиск по терминалу сделаем следующее:

2. Добавляем его в массив плагинов в .hyper.js :


Я надеюсь, что вам понравится пользоваться этим кастомизированным терминалом точно так же, как и мне.

Читайте также: