В этой статье я расскажу о том, как я выстроил работу с терминалом в Linux под себя и какие инструменты использовал для этого.
Дистрибутивы на базе ядра Linux я использую в качестве основной ОС последние года два. Начинал с Mint + Cinnamon, работал на Ubuntu, Manjaro + Gnome, Manjaro + Cinnamon, но в итоге на данный момент пришёл к Manjaro Linux с окружением рабочего стола KDE. Данное сочетание имеет достаточно широкие возможности для кастомизации и при этом вполне приятный графический интерфейс "из коробки". Я считаю его одним из лучших решений как для начинающих, так и для тех, кто просто не хочет заниматься длительной настройкой всей системы под себя.
Эмулятор терминала
Эмулятор терминала — это инструмент, который дает доступ к командной оболочке операционной системы. То, с чего начинается ваше взаимодействие с терминалом, если вы используете ОС с графической оболочкой.
Краткий обзор эмуляторов терминала, которые я использовал:
Дефолтный Gnome Terminal в Ubuntu
Тема, используемая в Ubuntu по умолчанию, на мой взгляд, ужасна. Я не понимаю, как в принципе можно пользоваться темой с белыми (и тем более - тёмно-синими) буквами на тёмно-фиолетовом фоне. Очевидно, тему можно поменять; я говорю именно про дефолтную. По функциональности - вполне обычный эмулятор терминала.
Terminator
Позволяет расположить несколько терминалов в сетке, а так же работать несколькими с вкладками при помощи горячих клавиш. В целом - хороший вариант, сам длительное время пользовался им. Из минусов - раздражающий tilebar у каждого терминала и обилие настроек, управление которыми происходит из графического интерфейса.
Дефолтный Konsole в Manjaro KDE
Для новичков - очень неплохой вариант. По умолчанию в качестве командной оболочки установлен zsh и несколько плагинов (в частности - автодополнение команд и подсветка их синтаксиса)
На мой взгляд, сильно перегружен. Имеет огромное количество меню и настроек, управление которыми происходит из графического интерфейса. При должном усилии их можно отключить, но для меня данный инструмент всё равно остаётся антиминималистичным.
Alacritty
Мой выбор! Alacritty - очень быстрый, стабильный и минималистичный эмулятор терминала. Все его настройки задаются в одном простом конфигурационном файле ~/.config/alacritty/alacritty.yml
.
Некоторые из настроек:
Темы. Можно прописать каждый цвет палитры вручную, а можно установить тему из репозитория парой команд
Шрифт, размер текста
Отступы от краёв окна
Прозрачность фона
Дополнительные биндинги клавиш
Мой конфигурационный файл - тут.
В терминале я обычно использую тему onedark (darker), поэтому прописал в конфиге все цвета вручную.
Минусы:
Не очень подробная и понятная документация. Однако, если уметь искать информацию, любой вопрос можно решить.
Отсутствие вкладок и окон. Этот недостаток я решил при помощи терминального мультиплексора
tmux
.Отсутствие возможности настроить размытие заднего фона при включении прозрачности терминала, в отличие от того же Konsole. Для меня этот недостаток не является критичным, поскольку 99% времени прозрачность терминала у меня выключена.
Отсутствие поддержки sixel. Для меня это также не является критичным, но если вам она необходима, существует сборка Alacritty с поддержкой sixel.
Для того чтобы всегда иметь терминал "под рукой", я забиндил запуск Alacritty на сочетание клавиш Meta
(Win
) + Enter
.
Командная оболочка
bash
Используется в большинстве дистрибутивов по умолчанию.
Обычно приглашение ко вводу имеет следующий вид: username@hostname:current-directory$
Его можно настроить в переменной $PS1
, однако можно столкнуться со сломавшейся историей команд.
Новичкам и тем, кто редко работает с терминалом, подойдёт, но для частого и профессионального использования лучше присмотреться к более продвинутым аналогам.
zsh
Мой выбор! Гораздо более кастомизируемая и функциональная, по сравнению с bash, оболочка. Особенно при использовании фреймворка oh-my-zsh.
Мой конфигурационный файл - тут.
Установить в качестве оболочки по умолчанию:
chsh -s /bin/zsh
Темы
Расширение oh-my-zsh позволяет выбрать одну из готовых тем или создать свою. Под темой подразумеваются настройки приглашения ко вводу.
По умолчанию используется тема robbyrussell
:
Я предпочитаю gozilla
, поскольку она более минималистичная.
Плагины
Расширение oh-my-zsh позволяет добавлять множество плагинов, которые упрощают и ускоряют работу с терминалом. Список подключаемых плагинов задаётся в следующей строчке в файле конфигурации (~/.zshrc
):
plugins=(...) # Названия плагинов перечисляются через пробел
Я использую:
git - алиасы и функции для работы с git
tmux - алиасы и настройки для работы с tmux
history - 3 алиаса для быстрой работы с историей команд
sudo - двойное нажатие
esc
добавляетsudo
в начало набранной командыzsh-syntax-highlighting - подсветка синтаксиса команд. Устанавливается отдельно
Кастомные алиасы
Помимо алиасов, предоставляемых oh-my-zsh и плагинами, я задал собственные алиасы:
alias i="sudo pacman -S"
alias m="make"
alias n="nvim"
alias v="vim"
alias c="clear"
Вместо стандартной команды ls использую её современный аналог exa.
if [ -x "$(command -v exa)" ]; then
alias l="exa --long --all --group"
fi
Разница в выводах данных команд видна на скриншоте:
"Шаблонный" алиас для ускорения открытия рабочего проекта:
alias gptd="cd <path-to-dir> && nvim"
Мнемоническое правило:
g
- go (идти, перейти)ptd
- одна или несколько букв, обозначающих рабочую директорию
Посмотреть все заданные алиасы можно при помощи команды alias
.
Лайфхаки
Перемещение по директориям
pushd <path-to-dir>
- перейти в директориюpopd
- вернуться
Горячие клавиши
Ctrl + u
- вырезать введённую командуCtrl + y
- вставить вырезанную командуCtrl + a/e
- перейти в начало/конецCtrl + d
- удалить символ под курсоромCtrl + f/b
- двигать курсор вправо/влево по символамAlt + f/b
- двигать курсор вправо/влево по словамCtrl + r
- поиск по истории команд
Разное
reset
- перезапуск сессии командной строкиsudo !!
- повторить предыдущую команду сsudo
history
- история команд!n
(гдеn
- номер команды) - запустить команду из истории!*
- подставить все аргументы предыдущей команды!^
,!$
- подставить первый/последний аргумент предыдущей команды
tmux
tmux - утилита-мультиплексор, предоставляющая доступ к нескольким терминалам одновременно.
Возможности:
Открывать несколько сессий
Открывать несколько вкладок в сессии
Открывать несколько окон в вкладке
Сохранять сессии
Выводить toolbar c открытыми вкладками, а так же другой информацией
Управление происходит преимущественно при помощи горячих клавиш, что позволяет ускорить работу.
Каждое сочетание горячих клавиш в tmux начинается с префикса. По умолчанию это сочетание клавиш Ctrl+b
. Однако для удобства я изменил его на Ctrl+a
и переназначил в системе редкоиспользуемую мною клавишу Caps Lock
на Ctrl
. Таким образом, управление tmux ускоряется ещё сильнее.
Моя конфигурация и её описание - тут.
Сценарии использования
При работе на локальной машине. Как я писал выше, Alacritty не поддерживает работу с несколькими вкладками и окнами. Что ж, не беда, - tmux прекрасно справляется с этой задачей! Он позволяет управлять множеством окон терминалов даже гибче и быстрее, чем иные эмуляторы терминала, поддерживающие работу с несколькими вкладками и окнами.
При работе на сервере. При подключении к удалённому серверу по ssh крайне удобно сразу запустить на нём tmux-сессию, которая позволит открыть несколько окон с терминалами и работать в них параллельно. Помимо этого преимущества использование tmux даёт как минимум ещё одно. При отключении от сервера (намеренном или случайном) сессия tmux по-прежнему остаётся запущенной, а значит все открытые вкладки и окна при последующем подключении останутся в том состоянии, в котором они находились на момент отключения.
Быстрый запуск
Согласитесь, каждый раз запускать эмулятор терминала (пусть даже при помощи горячей клавиши), затем создавать новую сессию tmux (путь даже при помощи алиаса), а после окончания работы не забывать её удалить - сложно и долго. Нельзя ли это как-то автоматизировать? Мы же в Linux - конечно, можно!
Я написал пару простых bash-скриптов, которые позволяют запускать Alacritty, создавать новую tmux-сессию, имеющую уникальное имя (количество секунд, прошедших с 00:00 01.01.1970), и после закрытия автоматически удалять созданную сессию.
alacritty-with-tmux.sh
#!/bin/sh
cur_time=$(date +%s)
alacritty --command=tmux-new-session.sh && tmux kill-session -t $cur_time
tmux-new-session.sh
#!/bin/sh
tmux new-session -s $(date +%s)
exit $?
Остаётся только дать этим скриптам права на запуск, положить их в ~/.local/bin/
и в настройках окружения рабочего стола забиндить какую-либо горячую клавишу (в моём случае - Meta
+Ctrl
+Enter
) на запуск скрипта alacritty-with-tmux.sh
. Всё! Теперь вы можете запускать Alacritty сразу с tmux'ом всего одной горячей клавишей.
nvim
Про vim можно говорить бесконечно (как и шутить про выход из него). Сейчас я расскажу лишь малую часть, а более подробный обзор возможностей vim и моей конфигурации выйдет в отдельной статье.
Я использую форк vim'а - neovim (nvim). Одно из наиболее важных его преимуществ - удобство настройки и кастомизации. Все параметры, подключение плагинов и даже собственные плагины можно описать при помощи lua, в отличие от оригинального vim, в котором используется собственный язык - VimScript.
Для разработки
"Из коробки" neovim проигрывает по функциональности современным IDE в ряде аспектов. Суть использования подобных инструментов отчасти заключается в том, что каждый пользователь может и должен сам понять, какая функциональность ему необходима, и добавить её в свою конфигурацию при помощи задания собственных параметров в настройках и подключения плагинов.
Если вы ещё не определились, какая именно функциональность вам нужна, а попробовать использовать neovim для работы над полноценными проектами хочется, рекомендую начать с популярной сборки AstroNvim, имеющей в своём составе множество плагинов, превращающих данный текстовый редактор в полноценную IDE.
Я нахожу крайне удобной связку tmux+nvim. Один из моих сценариев её использования: в одной вкладке tmux'а открыт nvim с кодом проекта, в другой - запускается сервер, в третьей - тесты, и т. д.
Вывод
Некоторые считают, что использование терминала - устаревший способ взаимодействия с компьютером и гораздо проще делать всё из приложений с графическим интерфейсом при помощи манипулятора типа "мышь". На мой взгляд, это не так. Множество действий можно гораздо быстрее выполнять при помощи терминала. Безусловно, понадобится некоторое время, чтобы запомнить все необходимые хоткеи, наработать мышечную память, и, что немаловажно - понять именно свои потребности, после чего подобрать и настроить каждый инструмент под себя. Однако после этого вы получите колоссальный прирост производительности при меньших трудозатратах.
Материалы
Комментарии (24)
Hokum
08.07.2023 10:06Отдельное спасибо за спикок хоткеев к терминалу, очень удобно. Я бы еще добавил к ним
Ctrl + W
- вырезать слово слева от курсора, его потом можно так же вставить. И минутка занудства: Ctrl + U вырезает всё слева от курсора. Т.е. если курсор стоял в конце строки, то да, всю команду, а если в середине, то "хвост" останется. В противовес ему есть Ctrl + K, который вырезает всё справа от курсора.И главное, что эти хоткеи работают и на маке, да и в большинстве эмуляторов терминала. Где не работают, так это терминалы встроенные в IDE. :)
P.S.
Если кому-то зайдет идея использовать хоткеи в терминале, то их можно нагуглить по emacs hotkeys.aik
08.07.2023 10:06+1Я бы еще добавил к ним Ctrl + W
Это в большинстве программ закрытие текущей вкладки/окна.
Может временами сыграть злую шутку.Hokum
08.07.2023 10:06Да, хорошее замечание. Но в эмуляторах не встречал такого. Вкладка закрывается по Ctrl + Shift + W, а на маке по Cmd + W. В Windows Terminal тоже закрывается по Ctrl + Shift + W.
Да и момент, что для мака в этих хоткеях именно ctrl, а не cmd как часто бывает, что сочетанияctrl +
в маке превращается вcmd +
, но не в этом случае.aik
08.07.2023 10:06в эмуляторах не встречал такого
Я, скорее, про мышечную память.
Всё же хоткеи работы с текстом более-менее универсальные, потому запросто можете захотеть в браузере слово слева от курсора вырезать.
Yu-Leo Автор
08.07.2023 10:06+1Спасибо за замечания!
По поводу комбинации
Ctrl + U
. В bash она действительно стирает всё от курсора до начала строки. В zsh по-умолчанию стирает всю строку. Если нужно, данное поведение можно изменить в.zshrc
.Hokum
08.07.2023 10:06Спасибо, думал, что это что-то более унифицированное, наподобие vi-like управления.
colisis
08.07.2023 10:06+3Порекомендую еще kitty, возможно зайдет вместо alacritty. Сам пользуюсь много лет, все устраивает.
grossws
08.07.2023 10:06+4Странно жаловаться на дефолтную тему в gnome terminal и потом настраивать свою в alacritty/omz.
Какое-то время назад переходил с yakuake (использует штатный кедовский konsole) на связку alacritty/tdrop/tmux из-за проблем с поддержкой nerd fonts, сейчас вернулся обратно на yakuake. Использовать tmux это, кагбэ не мешает.
Упомянутые "горячие клавиши" не относятся к эмулятору терминала, а к повальному использованию gnu readline (
man 3 readline
), там есть и стандартные emacs-like комбинации, используемые по умолчанию, и vi-like для желающих.Если не нравится дефолтный prompt могу порекомендовать попробовать starship.
Ещё из крайне полезных утилит с человеческим интерфейсом ripgrep как замена
grep
, fd как заменаfind
. Ну и в дополнение dutree или dust вместоdu -s
, broot для быстрой навигации а-ля nerdtree и подобные, sd вместоsed
.
krozzzis
08.07.2023 10:06+2Можно еще обратить внимание на эмулятор терминала Wezterm: есть поддержка sixel, gpu ускорение, вкладки, lua-скрипты, vim управление, написан на rust, если это важно. Да и жрет памяти сопоставимо с alacritty
Tony-Sol
08.07.2023 10:06Wezterm хорош, пересел на него как раз с Alacritty, т.к. последний не поддерживает некоторые escape-последовательности, мигающий текст например
berez
08.07.2023 10:06+4Очень похоже на то, как работаю я. Только у меня вместо alacritty - шопопало (машины разные, что там есть, то и запускаем), вместо tmux - screen, вместо nvim - шопопало (vim/mcedit/nano).
Обрастать своими удобняшками, конечно, можно, но к ним привыкаешь. А потом попадаешь на машину, настроенную по-другому, и мышечная память тебе начинает мешать. :)
Кстати, единственное, чего я не понял - так это зачем удалять сессию tmux? Создаем сессию и пусть себе висит, пока машина не перезагрузится. Закончили работу - отключаемся от сессии, и пусть там вкладки висят себе спокойненько. В следующий раз приходим на работу, подключаемся к сессии и продолжаем подвиг.
Johan_Palych
08.07.2023 10:06Рекомендую почитать этот док:
https://wiki.archlinux.org/title/Zsh
https://wiki.archlinux.org/title/Zsh_(Русский)Johan_Palych
08.07.2023 10:06Забыл добавить про zsh-completions. Пользуюсь на Debian.
https://github.com/zsh-users/zsh-completions
Бинарники zsh-completions OBS repository: Debian / Ubuntu/ Fedora / CentOS / RHEL / Scientific Linux/ OpenSUSE / SLE
Hokum
Пробовали тайловый оконный менеджер, например i3? Видел у коллег и они были весьма довольны. Я пробовал, мне меньше зашел - мне привычнее gnome. i3 минималистичный и так же управляется хоткеями, мышкой тоже можно.
Yu-Leo Автор
Да, немного экспериментировал с i3, однако тогда не хватило времени, глубины знаний и опыта, чтобы настроить всю систему под свои нужды. Пока пользуюсь KDE c "i3-like" горячими клавишами (переключение рабочих столов, перемещение и закрытие окон, открытие приложений). Сама концепция тайлинговых оконных менеджеров и i3 в частности мне очень нравится. Надеюсь, дойдут руки настроить систему с ним