В этой статье я расскажу о том, как я выстроил работу с терминалом в 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)


  1. Hokum
    08.07.2023 10:06
    +1

    Пробовали тайловый оконный менеджер, например i3? Видел у коллег и они были весьма довольны. Я пробовал, мне меньше зашел - мне привычнее gnome. i3 минималистичный и так же управляется хоткеями, мышкой тоже можно.


    1. Yu-Leo Автор
      08.07.2023 10:06
      +2

      Да, немного экспериментировал с i3, однако тогда не хватило времени, глубины знаний и опыта, чтобы настроить всю систему под свои нужды. Пока пользуюсь KDE c "i3-like" горячими клавишами (переключение рабочих столов, перемещение и закрытие окон, открытие приложений). Сама концепция тайлинговых оконных менеджеров и i3 в частности мне очень нравится. Надеюсь, дойдут руки настроить систему с ним


  1. anonymous
    08.07.2023 10:06

    НЛО прилетело и опубликовало эту надпись здесь


    1. Yu-Leo Автор
      08.07.2023 10:06
      +1

      Спасибо за рекомендации!

      По поводу затрат времени на настройку и поддержку - думаю, это личное дело каждого. Я лишь рассказал о том, как всё настроено лично у меня


  1. Hokum
    08.07.2023 10:06

    Отдельное спасибо за спикок хоткеев к терминалу, очень удобно. Я бы еще добавил к ним Ctrl + W - вырезать слово слева от курсора, его потом можно так же вставить. И минутка занудства: Ctrl + U вырезает всё слева от курсора. Т.е. если курсор стоял в конце строки, то да, всю команду, а если в середине, то "хвост" останется. В противовес ему есть Ctrl + K, который вырезает всё справа от курсора.

    И главное, что эти хоткеи работают и на маке, да и в большинстве эмуляторов терминала. Где не работают, так это терминалы встроенные в IDE. :)

    P.S.
    Если кому-то зайдет идея использовать хоткеи в терминале, то их можно нагуглить по emacs hotkeys.


    1. aik
      08.07.2023 10:06
      +1

      Я бы еще добавил к ним Ctrl + W

      Это в большинстве программ закрытие текущей вкладки/окна.
      Может временами сыграть злую шутку.


      1. Hokum
        08.07.2023 10:06

        Да, хорошее замечание. Но в эмуляторах не встречал такого. Вкладка закрывается по Ctrl + Shift + W, а на маке по Cmd + W. В Windows Terminal тоже закрывается по Ctrl + Shift + W.
        Да и момент, что для мака в этих хоткеях именно ctrl, а не cmd как часто бывает, что сочетания ctrl + в маке превращается в cmd +, но не в этом случае.


        1. aik
          08.07.2023 10:06

          в эмуляторах не встречал такого

          Я, скорее, про мышечную память.
          Всё же хоткеи работы с текстом более-менее универсальные, потому запросто можете захотеть в браузере слово слева от курсора вырезать.


    1. Yu-Leo Автор
      08.07.2023 10:06
      +1

      Спасибо за замечания!

      По поводу комбинации Ctrl + U. В bash она действительно стирает всё от курсора до начала строки. В zsh по-умолчанию стирает всю строку. Если нужно, данное поведение можно изменить в .zshrc.


      1. Hokum
        08.07.2023 10:06

        Спасибо, думал, что это что-то более унифицированное, наподобие vi-like управления.


  1. colisis
    08.07.2023 10:06
    +3

    Порекомендую еще kitty, возможно зайдет вместо alacritty. Сам пользуюсь много лет, все устраивает.


  1. Bytamine
    08.07.2023 10:06
    +1

    Я остановился на Tilix - https://gnunn1.github.io/tilix-web/


  1. vtb_k
    08.07.2023 10:06

    Arch Linux + Swaywm с терминалом Wezterm и Емаксом мой выбор


  1. 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.


    1. Yu-Leo Автор
      08.07.2023 10:06

      Большое спасибо за рекомендации!


  1. valaises
    08.07.2023 10:06

    Я пользуюсь Warp - https://www.warp.dev/warp-ai


  1. krozzzis
    08.07.2023 10:06
    +2

    Можно еще обратить внимание на эмулятор терминала Wezterm: есть поддержка sixel, gpu ускорение, вкладки, lua-скрипты, vim управление, написан на rust, если это важно. Да и жрет памяти сопоставимо с alacritty


    1. Tony-Sol
      08.07.2023 10:06

      Wezterm хорош, пересел на него как раз с Alacritty, т.к. последний не поддерживает некоторые escape-последовательности, мигающий текст например


  1. mnnoee
    08.07.2023 10:06

    Думаю zsh это не для новичков, для новичков fish, а если кастомизировать, то прощай bash zsh mksh ash sh и т.п. *sh


    1. MDiMaI666
      08.07.2023 10:06
      +1

      Fish опасен для новичков, из-за не совместимости некоторых конструкций с bash при настройке можно поломать много чего.


  1. berez
    08.07.2023 10:06
    +4

    Очень похоже на то, как работаю я. Только у меня вместо alacritty - шопопало (машины разные, что там есть, то и запускаем), вместо tmux - screen, вместо nvim - шопопало (vim/mcedit/nano).

    Обрастать своими удобняшками, конечно, можно, но к ним привыкаешь. А потом попадаешь на машину, настроенную по-другому, и мышечная память тебе начинает мешать. :)

    Кстати, единственное, чего я не понял - так это зачем удалять сессию tmux? Создаем сессию и пусть себе висит, пока машина не перезагрузится. Закончили работу - отключаемся от сессии, и пусть там вкладки висят себе спокойненько. В следующий раз приходим на работу, подключаемся к сессии и продолжаем подвиг.


  1. Johan_Palych
    08.07.2023 10:06

    1. 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


  1. Ryav
    08.07.2023 10:06
    +2

    Для zsh советую попробовать Powerlevel10k.