- Ты еще не используешь tmux на полную! (Наверное)
- Что такое tmux
- Запуск и начало новой сессии
- Открытие нового окна
- Переходы между окнами
- Разделение окон и создание панелей
- Передвижение между панелями
- Передвижение между сессиями
- [Практическое использование] Переадресация отображаемого содержания в tmux
- [Практическое использование] Отображение названия ветки Git в статус-баре
- [Практическое использование] Отображение пути текущей операции
- [Практическое использование] Вызов сниппета
- Ссылка на настройки .tmux.conf
- Совместимость версий tmux
- Start a New Terminal Session in Bash
- Use the gnome-terminal Command to Start a New Terminal Session in Bash
- Шпаргалка по работе с Tmux (терминальный мультиплексор)
- 1. Установка
- 2. Конфигурационные файлы
- 3. Работа с Tmux
Ты еще не используешь tmux на полную! (Наверное)
Привет, Хабр! Представляю вашему вниманию перевод статьи «(たぶん)君はまだtmuxの真の力を引き出せていない».
Что такое tmux
tmux — терминальный мультиплексор. Когда работаешь на машине, использующей SSH, исполняешь увесистую программу, но хочешь без прекращения исполнения перейти к другой задаче и т.д., то tmux может очень пригодиться.
Но возможности tmux на этом на этом не заканчиваются. Есть различные удобные варианты использования tmux, что я и хочу продемонстрировать на примерах ниже.
Базовая идея похожа на моды в Vim. С помощью prefix’a (зарезервированные key bindings или привязка клавиш) можно изменить мод, по умолчанию используется привязка ctrl + b.
Запуск и начало новой сессии
Если ваша ОС — Ubuntu или Debian, вы можете установить tmux командой `sudo apt-get install tmux`. На MacOS — brew install tmux.
Открытие нового окна
Создав сессию в tmux, вы также можете создавать новые окна. Стандартная связка — «ctrl +b + c». Если вы сохранили свой prefix, можете использовать связку «prefix + c». Скорее всего, значение “c” — create, отсюда и такая связка.
Переходы между окнами
Можно также свободно переключаться между созданными окнами. Стандартные связки для этого — «prefix + p» (p — previous) и «prefix + n» (n — next).
Использовать prefix не всегда удобно, поэтому я для себя кастомизировал связки клавиш для перехода между окнами: shift + rightKey для следующего окна и shift + leftKey для предыдущего.
Разделение окон и создание панелей
Разделение окон в tmux похоже на разделение в vim. Вы делите окно на несколько панелей, тем самым в одном окне можно открыть vim, в другом htop, а в третьем выполнять программу.
Без привязки клавиш, команды для разделения окна — prefix + «split-window -h», prefix + «split-window -v».
Так как прописывать это каждый раз не особо хочется, я сделал для себя хоткеи в виде prefix + «-«, prefix + «|».
Передвижение между панелями
Стандартные команды для передвижения между панелями сложноваты, не очень удобны в обращении, поэтому я и в этом случае назначил свои хоткеи: ctrl + shift + upKey, ctrl + shift + downKey, ctrl + shift + rightKey, ctrl + shift + leftKey.
Передвижение между сессиями
С помощью связки клавиш ctrl + t можно вызвать список сессий, а клавишами ↑ ↓ выбрать нужную сессию.
[Практическое использование] Переадресация отображаемого содержания в tmux
По сути, tmux является своего рода виртуальным терминалом, содержащимся в директории /dev/pts/. Для каждой панели создается директория такого же формата.
Другими словами, если мы определим каждой панели, можно переадресовать потоки stdout и stderr с панели X раздельно — один на панель Y, другой на панель Z.
Таким образом можно выводить на разные панели stderr и stdout программы, которые вы пишете, а также использовать терминал как лог операций.
[Практическое использование] Отображение названия ветки Git в статус-баре
Это лайфхак, который использует возможность чтения Shellscript и Python script из .tmux.conf — файла конфигурации tmux.
Статус-бар можно настроить следующей командой:
set-option -g status-right '# #(tmux run-shell "tmux_hook --default true --git-path #")'
# — это, очевидно, имя хоста, а tmux run-shell запускает настраиваемый скрипт, который возвращает value в настройки статус-бар.
tmux_hook — это файл, который я создал для отображения времени и текущей ветки Git, но он, по сути, может вернуть любую текстовую информацию. Например, если правильно настроить, можно в статус-баре отображать даже таймлайн своего твиттера.
[Практическое использование] Отображение пути текущей операции
Часто, прыгая по терминалу, хочется понять, в какой ты директории, в каком пути она содержится.
Не хочется для этого лишний раз прописывать pwd, поэтому можно отобразить путь текущей операции в том же месте, где отображается путь до текущей панели.
[Практическое использование] Вызов сниппета
Несмотря на то, что tmux является менеджером сессий с функцией разделения терминала, он может выполнять некоторые функции IDE (круто, не правда ли?). Вы можете забиндить свои хоткеи на специальную настройку send-keys и вызвать их в терминале.
Например, если настроить send-keys как на моем примере ниже, можно просто нажать prefix + 1 и вывести команды import, необходимые для работы с python.
bind -T prefix -n 1 send-keys "import os\nimport sys\n"
Ссылка на настройки .tmux.conf
Совместимость версий tmux
Иногда случается, что некоторые настройки tmux не работают — в этом случае, его версия может быть либо слишком новой, либо слишком старой.
Все вышеописанное и конфиг, на который я оставил ссылку, — для tmux версии 2.8 и выше. Если у вас что-либо не работает, проверьте, подходит ли вам данная версия.
Если вы соберетесь самостоятельно что-то отлаживать, то прежде всего стоит обратиться к man tmux — самой надежной документации по tmux на данный момент.
Ссылка на оригинал данной статьи тут
Мы будем очень рады, если вы расскажете нам, понравилась ли вам данная статья, понятен ли перевод, была ли она вам полезна?
Start a New Terminal Session in Bash
- Use the gnome-terminal Command to Start a New Terminal Session in Bash
- Open a New Tab in the Same Terminal in Bash
In various situations, when working with Bash or other shells, a need may arise to run a script or a program in a new terminal instance or maybe another tab in the same terminal. Opening new terminal instances or tabs from within the terminal is simple; we will explain it in detail with sufficient examples.
The article examples are for systems running a GNOME desktop environment which is common in most LINUX distributions.
Use the gnome-terminal Command to Start a New Terminal Session in Bash
You must use the simple command gnome-terminal to start a new terminal from an already running instance. This will start a new terminal instance, and a new window will open.
If you want to open a new terminal and run a program in it from the already running instance, there are a few different ways to accomplish this task.
gnome-terminal -x "complete/path/of/the/program" &
The above command will run the desired program in a new terminal; it’s important to provide the complete path of the program you want to run.
The & at the end of the command moves this task to the background of the original terminal instance; not adding the & at the end of the command might cause errors as the program may try to run before the new terminal has been initialized.
The bash -c option can be used with the gnome-terminal command to execute multiple Bash commands in a new terminal.
The syntax for the gnome-terminal command is as follows.
gnome-terminal --command="bash -c '[cmd1]; [cmd2]; $SHELL'"
Here —command=»bash -c» tells the new terminal that these are Bash commands or scripts, and cmd1 and cmd2 stand for the names of the first and second commands, respectively.
The $SHELL at the end of the command makes the terminal stay open even after completing the commands.
An alternative syntax for the example above is:
gnome-terminal -x bash -c "; exec bash"
The exec bash at the end of this command serves the same purpose as $SHELL (i.e., keep the terminal open after executing the commands).
Шпаргалка по работе с Tmux (терминальный мультиплексор)
На Хабрахабре Tmux (ти-макс) упоминался неоднократно, тем не менее, решил написать еще одну шпаргалку, т.к. в других некоторые важные моменты не показаны.
Tmux (терминальный мультиплексор) позволяет работать с несколькими сессиями в 1 окне. Вместо нескольких окон терминала к серверу — вы можете использовать одно. Позволяет подключаться/отключаться к текущему состоянию сессии. Запущенные программы и процессы продолжают работать. (Можно использовать вместо nohup, dtach).
Например, на работе правим файлы в Vim. Окно терминала с открытыми файлами, процессами. Отключаемся от сессии. Далее подключаемся к этой сессии из дома и получаем те же окна с открытыми файлами в Vim, процессами и т.д. Можно продолжить работу с того же момента, на котором остановились. Также удобно при разрыве связи. Дополнительно можно работать совместно с другими в терминале, если подключены к одной сессии. Каждый видит, что делает другой.
1. Установка
CentOS (нужен подключенный репо EPEL) # yum install tmux Fedora # dnf install tmux Ubuntu/Debian # apt-get install tmux
2. Конфигурационные файлы
С версии 2.1 для включения режима мыши (скролл, изменение размера панели, выбор панели и др.) нужно добавить в tmux.conf:
set -g mouse-resize-pane on set -g mouse-select-pane on set -g mouse-select-window on set -g mode-mouse on
3. Работа с Tmux
Старт
# tmux //без параметров будет создана сессия 0
# tmux new -s session1 //новая сессия session1. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.
Префикс (с него начинаются команды)
(CTRL + b)
Новое окно (нажать CTRL+b, затем нажать с)
Список окон
// переключиться курсором вверх-вниз
Переключение
// следующее окно
// предыдущее окно
// переключиться на номер окна
Окна можно делить на панели (Panes)
Как в тайловых (мозаичных) оконных менеджерах.
Деление окна горизонтально
либо команда
# tmux split-window -h
Деление окна вертикально
либо команда
# tmux split-window -v
Переход между панелей
// либо режим мыши
Изменение размеров панелей
// либо режим мыши
Закрытие окон
// нужно подтвердить y
либо
# exit
Отключение от сессии
либо
# tmux detach
Список сессий
# tmux ls
Подключиться к работающей сессии
# tmux attach //подключение к сессии, либо к единственной, либо последней созданной
# tmux attach -t session1 // подключение к сессии session1
Завершение сессии
# tmux kill-session -t session1
Завершить все сессии
# tmux kill-server
Список поддерживаемых комманд
# tmux list-commands
Дополнительная информация
# man tmux
Буду рад любым дополнениям и замечаниям.