Настройка tmux#

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

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

Файл .tmux.conf#

По умолчанию tmux ищет параметры конфигурации в двух местах. Сначала в /etc/tmux.conf он ищет общесистемную конфигурацию. Затем — файл с именем .tmux.conf в домашнем каталоге текущего пользователя. Если эти файлы не существуют, tmux просто использует настройки по умолчанию. Нам не нужно создавать общесистемный файл конфигурации, поэтому давайте создадим пустой файл конфигурации в нашем домашнем каталоге. Для этого можно использовать следующую команду:

$ touch ~/.tmux.conf

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

Примечание

Файл .tmux.conf является скрытым и не отображается в файловых менеджерах или списках каталогов по умолчанию.

Назначение более простого префикса#

tmux использует Ctrl-b в качестве префикса команд. Многие пользователи tmux начинали с GNUScreen, который использует Ctrl-a для префикса команд. Ctrl — отличный выбор для префикса, потому что легко доступен, особенно если переназначить клавишу Caps Lock на Ctrl, как описано на далее. Это позволит для большинства действий не убирать руки с центрального ряда клавиатуры.

Чтобы установить параметры в файле .tmux.conf, используется команда set-option, которую можно сократить до set. Для переопределения префикса tmux, нужно добавить в файл .tmux.conf следующие строки:

# ~/.tmux.conf

# Setting the prefix from C-b to C-a
set -g prefix C-a

В этом примере используется параметр -g «глобально», который устанавливает параметр для всех создаваемых сеансов tmux. Строка, начинающаяся с #, является комментарием. Рекомендуется оставлять комментарии в конфигурационных файлах, так как они помогут вспомнить значения настроек, когда вы вернетесь и посмотрите на свою конфигурацию через несколько месяцев. Комментарии в файле конфигурации tmux работают так же, как комментарии в исходном коде.

Хотя, в данном случае, в этом нет необходимости, можно использовать unbind-key или команду unbind, чтобы удалить привязку клавиш, которая была определена до этого, чтобы позже назначить другую команду этой клавише. Освободим Ctrl-b вот так:

# ~/.tmux.conf

# Free the original Ctrl-b prefix keybinding
unbind C-b

Примечание

Изменения в файле не считываются tmux автоматически. Поэтому, если редактировать файл .tmux.conf когда tmux запущен, необходимо либо полностью закрыть все сеансы tmux, либо войти в командный режим tmux с помощью PREFIX : и ввести:

: source-file ~/.tmux.conf

Теперь можно использовать Ctrl-a в качестве префикса. Остальные примеры в этом руководстве будут по-прежнему ссылаться на него как на PREFIX.

Примечание

Переназначение клавиши Caps Lock

На многих клавиатурах клавиша Caps Lock находится рядом с клавишей a в центральном ряду клавиатуры. Переназначив эту клавишу на Ctrl, можно сделать запуск команд более удобным. На Mac переназначить клавишу Caps Lock можно в панели настроек клавиатуры в разделе «Системные настройки». Просто нажмите кнопку «Клавиши-модификаторы» и измените действие для Caps Lock на «Control».

Под Linux этот процесс может быть немного сложнее в зависимости от используемого дистрибутива или оконного менеджера, но можете найти несколько способов, в вики Emacs. Это небольшое изменение в конфигурации может сэкономить удивительное количество времени в течение дня.

Изменение задержки по умолчанию#

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

# ~/.tmux.conf

# Setting the delay between prefix and command
set -s escape-time 1

После перезагрузки файла конфигурации, можно будет без задержки нажимать клавиши.

Настройка индексации окон и панелей#

В разделе «Основы tmux» было рассказано об окнах и о том, как при создании нескольких окон в сеансе, можно ссылаться на них по индексу. Индексация начинается с нуля, что немного неудобно, так как приходится использовать PREFIX 0 для доступа к первому окну.

Добавив эту строку в файл конфигурации

# ~/.tmux.conf

# Set the base index for windows to 1 instead of 0
set -g base-index 1

установим индексацию окон с 1. После этого, для доступа к первому окну можно будет использовать PREFIX 1. Это проще и понятнее, так как клавиши на клавиатуре теперь напрямую соответствуют окнам, перечисленным в строке состояния.

Аналогично установим начальный индекс для панелей, используя опцию pane-base-index, чтобы у вас была согласованность между нумерацией панелей и окон.

# ~/.tmux.conf

# Set the base index for panes to 1 instead of 0
setw -g pane-base-index 1

До сих пор использовалась команда set, которая устанавливает параметры для сеанса tmux. Чтобы настроить параметры, которые влияют на взаимодействие с окнами, необходимо использовать другую команду — set-windowoption, или ее сокращенный вариант setw. Сокращенные версии команд удобны тем, что примеры конфигурации помещающимися в одну строку.

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

Назначение сочетания клавиш для перезагрузки конфигурации#

Каждый раз, когда при внесении изменений в файл конфигурации, нужно либо закрыть все сеансы и перезапустить tmux, либо ввести команду

: source

чтобы перезагрузить конфигурацию непосредственно из запущенного сеанса tmux. Давайте создадим клавиатурную команду для перезагрузки файла конфигурации.

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

Давайте определим PREFIX r, чтобы перезагружать файл .tmux.conf в текущем сеансе. Для этого добавьте эту строку в свой конфигурационный файл:

# ~/.tmux.conff

# Reload the configuration file with Prefix r
bind r source-file ~/.tmux.conf

С помощью этой привязки клавиш можно внести изменения в файл конфигурации, а затем немедленно активировать их, нажав PREFIX r. Однако данной командой все еще нельзя будет воспользоваться, пока не будет перезагружен файл конфигурации вручную. Для этого нужно войти в командный режим с помощью PREFIX : и ввести

: source-file # ~/.tmux.conf

При перезагрузке файла конфигурации, не всегда можно понять, что что-то изменилось. Сделать этот процесс более наглядным, можно при помощи команды display, которая добавит сообщение в строку состояния. Измените команду перезагрузки, чтобы отобразить текст «Reloaded!» при загрузке файла конфигурации:

# ~/.tmux.conf

# Reload the configuration file with Prefix r
bind r source-file # ~/.tmux.conf \; display "Reloaded!"

Как видите, можно привязать клавишу к последовательности команд, разделив команды комбинацией \;.

Определение сочетаний клавиш, не требующих префикса#

Когда определяются привязки клавиш с помощью bind, все равно нужно нажать клавиши составляющие PREFIX, прежде чем можно будет нажать вновь определенную клавишу.

Использование команды bind с префиксом -n сообщает tmux, что привязка клавиш не требует нажатия префикса. Например, настройка

# ~/.tmux.conf

bind-key -n C-r source-file ~/.tmux.conf

заставит CTRL-r перезагрузить файл конфигурации. К сожалению, это переопределит эту комбинацию клавиш в любом приложении, которое работает в сеансе tmux, поэтому следует пользоваться такой возможностью с большой осторожностью.

Отправка префикса в другие приложения#

Мы переназначили CTRL-a в качестве префикса, но такие программы, как Vim, Emacs и даже обычная оболочка Bash также используют эту комбинацию. Необходимо настроить tmux для отправки этой команды в приложения, когда вам это нужно. Сделать это можно, привязав команду send-prefix к нажатию клавиши, например:

# ~/.tmux.conf

# Ensure that we can send Ctrl-A to other apps
bind C-a send-prefix

После перезагрузки файла конфигурации можно отправить CTRL-a приложению, работающему в tmux, просто дважды нажав CTRL-a.

Разделение панелей#

Клавиши, используемые по умолчанию для разделения панелей, труднозапоминаемы и достаточно неудобны, поэтому давайте установим свои собственные клавиши. Свяжем горизонтальное разделение окна с PREFIX | и вертикальное разделение с PREFIX -. Для этого добавим эти строки в файл конфигурации:

# ~/.tmux.conf

# Splitting panes with | and -
bind | split-window -h
bind - split-window -v

На первый взгляд, это может показаться противоречием. Параметры -v и -h в split-window означают «вертикальное» и «горизонтальное» разделение, но для tmux вертикальное разделение означает создание новой панели под существующей панелью, чтобы панели укладываются вертикально друг на друга. Горизонтальное разделение означает создание новой панели рядом с существующей, чтобы панели располагались горизонтально на экране.

Итак, чтобы разделить окно по вертикали, используется «горизонтальное» разделение, а для разделения по горизонтали используется «вертикальное» разделение. Новые сочетания клавиш дают простую визуальную ассоциацию. Для разделения окна нужно нажать клавишу, которая выглядит как требуемое разделение.

Переназначение клавиш управления курсором#

Переход между панелями с помощью PREFIX o весьма неудобен, а использование клавиш со стрелками предполагает, что нужно убрать пальцы с центрального ряда клавиатуры. В текстовом редакторе Vim, используются весьма удобные клавиши h, j, k и l для перемещения курсора. Давайте переназначим клавиши перемещения в tmux на эти же клавиши:

# ~/.tmux.conf

# Moving between panes with Prefix h, j, k, l
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

Кроме того, можно назначить сочетания PREFIX Ctrl-h и PREFIX Ctrl-l для циклического переключения между окнами:

# ~/.tmux.conf

# Quick window selection
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

Если сопоставить клавишу Caps Lock с клавишей Ctrl, то для перемещаться между окнами и панелями можно не убирая рук с центрального ряда клавиатуры.

Изменение размера панелей#

Чтобы изменить размер панели вниз на одну строку, можно ввести в командном режиме

: resize-pane -D

Можно увеличить шаг изменения размера, передав число после направления изменения размера, например

: resize-pane -D 5

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

Давайте используем вариант клавиш перемещения, используемый Vim для изменения размера окон. Мы будем использовать PREFIX H, PREFIX J, PREFIX K, и PREFIX L длч изменения размера панелей. Добавим эти строки в ваш файл конфигурации:

# ~/.tmux.conf

# Pane resizing panes with Prefix H, J, K, L
bind H resize-pane -L 5
bind J resize-pane -D 5
bind K resize-pane -U 5
bind L resize-pane -R 5

Стоит обратить внимание, что используются заглавные буквы в файле конфигурации. tmux позволяет использовать как строчные, так и заглавные буквы для нажатия клавиш. Чтобы вызвать нажатие клавиши в верхнем регистре нужно будет использовать клавишу SHIFT.

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

|------------------|
|                  |
|                  |
|     Панель 1     |
|                  |
|                  |
|------------------|
|                  |
|                  |
|     Панель 2     |
|                  |
|------------------|

и нужно увеличить размер Панели 1, тогда поместим курсор внутри Панели 1 и затем нажмем PREFIX J, который перемещает горизонтальный разделитель вниз. Если нажать PREFIX K, горизонтальный разделитель переместится вверх.

В только что созданной конфигурации, необходимо использовать PREFIX при каждом изменении размера панели. Но если использовать флаг -r с командой привязки, можно сделать клавишу была повторяемой. Это означает, что нажать PREFIX нужно только один раз, а затем непрерывно нажимать определенную клавишу в течение заданного промежутка времени, называемого пределом повторения.

Переопределим команды изменения размера окна, добавив параметр -r:

# ~/.tmux.conf

# Pane resizing panes with Prefix H, J, K, L
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

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

Управление мышью#

Теперь давайте обратим внимание на то, как tmux может работать с мышью.

Хотя tmux должен полностью управляться с клавиатуры, бывают случаи, когда может быть проще использовать мышь. Если используемый терминал поддерживает управление мышью, то можно указать tmux, как обрабатывать определенные события мыши. Например, иногда полезно иметь возможность прокручивать буфер терминала колесиком мыши или выбирать окна и панели. Это особенно актуально для начинающих пользователей tmux. Чтобы настроить tmux, на использование мыши, нужно включить режим мыши.

# ~/.tmux.conf

# Mouse support - set to on if you want to use the mouse
set -g mouse on

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

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

config/tmux.conf

# Mouse support - set to on if you want to use the mouse
set -g mouse off

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

Команды для управления поведением tmux#

Команда

Описание

set -g prefix C-a

Устанавливает комбинацию клавиш для префикса.

set -sg escape-time n

Устанавливает количество времени (в миллисекундах), в течение которого tmux ожидает нажатие клавиши после нажатия PREFIX.

set -g base-index 1

Устанавливает нумерацию окон с 1 вместо 0.

setw -g pane-base-index 1

Устанавливает нумерацию панелей с 1 вместо 0.

source-file [file]

Загружает (перезагружает) файл конфигурации. Используется, чтобы перезагрузить существующий файл конфигурации.

bind C-a send-prefix

Настраивает tmux для отправки префикса в стороннее приложение при нажатии PREFIX комбинацию два раза подряд.

bind-key [key] [command]

Создает привязку клавиш, которая выполняет указанную команду. Можно сократить до bind.

bind-key -r [key] [command]

Создает повторяемую привязку клавиш. Достаточно один раз нажать PREFIX, и можно нажимать назначенную клавишу неоднократно. Это полезно для команд, в которых необходимо циклически перемещаться по элементам или изменять размер панелей. Можно сократить до bind.

unbind-key [key]

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

display-message или display

Отображает данный текст в строке состояния.

set-option [flags] [option] [value]

Устанавливает параметры сеансов. Использование флага -g устанавливает параметр для всех сеансов.

set-window-option [option] [value]

Устанавливает параметры для окон, такие как уведомления об активности, перемещение курсора или другие элементы, связанные с окнами и панелями.

set -a

Добавляет значения к существующим параметрам, а не заменяет параметры.

set -g mouse off

Отключает поддержку мыши в tmux. (on включает поддержку мыши в tmux)

set -g default-terminal "screen-256color"

Определяет тип терминала для окон. Задает значение TERM, которое будут использовать другие программы. screen-256color обеспечивает высочайшую совместимость с программами, изначально написанными для screen.

Переопределенные сочетания клавиш#

Команда

Описание

CTRL-a

Новый PREFIX.

PREFIX a

Отправляет CTRL-a программе, работающей в окне или панели tmux.

PREFIX r

Перезагружает файл конфигурации tmux.

PREFIX |

Разделяет окно по горизонтали.

PREFIX -

Разделяет окно по вертикали.

PREFIX h, PREFIX j, PREFIX k, PREFIX l

Перемещается между панелями.

PREFIX H, PREFIX J, PREFIX K, PREFIX L

Изменяет размер текущей панели

PREFIX CTRL-h, PREFIX CTRL-l

Перемещается вперед и назад между окнами.