Вопрос или проблема
Я настраиваю свой .tmux.conf
и нашел много примеров кастомизации у других людей.
Вот один пример, который, как утверждается, делает разделение панели tmux более похожим на vim:
set-option -g prefix C-w
unbind-key C-w
bind-key C-w send-prefix
set -g base-index 1
bind-key v split-window -h
bind-key s split-window -v
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
Каков синтаксис для bind key
, set
и set-option
?
Конфигурационный файл tmux состоит из последовательности команд tmux, которые выполняются при запуске. Все команды и опции объяснены на tmux(1)
man page.
Язык – это команды tmux, но синтаксис зависит от версии tmux.
Файл tmux.conf
представляет собой последовательность команд tmux, разделенных новыми строками и экранированными точками с запятой (\;
). Комментарии начинаются с #
.
Вы можете список доступных команд tmux с помощью tmux list-commands
.
Если вы пришли к этому вопросу, вы, возможно, ищете синтаксис этого конфигурационного файла, потому что вас интересуют фигурные скобки. Они были введены в tmux 3.0, поэтому плагины, которые написаны для tmux >= 3.0, могут вызвать ошибки в более старых версиях.
И, конечно, страница руководства для более старых версий tmux не упоминает этот синтаксис. (Почему бы и нет? Фигурные скобки еще не были добавлены.)
Но как исправить проблемы с новым синтаксисом?
Пример – это почему я оказался на этой странице. Плагин tmux-mighty-scroll
подключает файл tmux.conf
, содержащий эту команду:
bind-key -T root WheelUpPane {
mighty_scroll_select_pane
if-shell -t "{mouse}" "$PSCHECK #{pane_pid} $MIGHTY_SCROLL_PASS_THROUGH" {
send-keys -t "{mouse}" -M
} {
if-shell -t "{mouse}" "$PSCHECK #{pane_pid} $MIGHTY_SCROLL_BY_LINE || ( [ '$MIGHTY_SCROLL_FALLBACK_MODE' = 'by-line' ] && #{?alternate_on,true,false} )" {
mighty_scroll_with_interval Up
} {
if-shell -t "{mouse}" "$PSCHECK #{pane_pid} $MIGHTY_SCROLL_BY_PAGE || ( [ '$MIGHTY_SCROLL_FALLBACK_MODE' = 'by-page' ] && #{?alternate_on,true,false} )" {
send-keys -t "{mouse}" PageUp
} {
if-shell -t "{mouse}" "[ '$MIGHTY_SCROLL_FALLBACK_MODE' = 'pass-through' ] && #{?alternate_on,true,false}" {
send-keys -t "{mouse}" -M
} {
mighty_scroll_enter_copy_mode
mighty_scroll_with_interval -X scroll-up
}
}
}
}
}
Каждый раз при запуске экран заполняется ошибками, например:
/home/user/.tmux/plugins/tmux-mighty-scroll/tmux.conf:5: unknown command: }
Чтобы изменить, вы можете заменить
some-tmux-command {
a-nested-command
a-second-nested-command
}
с \
для экранирования новых строк и \;
для разделения последовательных команд tmux:
some-tmux-command \
a-nested-command \; \
a-second-nested-command
.
Ответ или решение
Теоретическая часть
Конфигурационный файл .tmux.conf
используется для кастомизации поведения tmux, утилиты, которая предоставляет функциональность мультиплексора терминалов. Проще говоря, tmux позволяет пользователю управлять несколькими сессиями терминала в одном окне, что особенно полезно для разработчиков и системных администраторов. Он является высоко конфигурируемым и поддерживает кастомизацию через специальный файл конфигурации .tmux.conf
.
Итак, в чем же специфика языка конфигурации tmux? Это набор команд, которые исполняются при запуске сессии tmux. Каждая команда или инструкция в этом файле управляет какой-то определенной функцией или поведением tmux. Команды часто содержат такие ключевые слова как bind-key
, set
, set-option
и др. Каждое из них имеет свои функции и параметры:
-
set-option
: Эта команда используется для настройки параметров tmux. Параметры могут быть глобальными (-g
) или локальными для сессии. Например,set-option -g prefix C-w
изменяет глобальную клавишу префикса. -
set
: Это сокращение дляset-option
и обладает аналогичной функциональностью. Она применяется для более простого и лаконичного задания настроек. -
bind-key
: Этой командой вы ассоциируете определенные действия с сочетаниями клавиш. Например,bind-key v split-window -h
устанавливает сочетаниеv
для горизонтального разделения окна.
Примерная иллюстрация
Рассмотрим примеры, которые вы предоставили, чтобы лучше понять работу команд.
set-option -g prefix C-w
unbind-key C-w
bind-key C-w send-prefix
set -g base-index 1
Данный фрагмент меняет префикс для команд tmux на C-w
(Control + w), снимает привязку к этой клавише по умолчанию, чтобы назначить её для отправки префикса, и изменяет базовый индекс панелей на 1, начинав его счет с 1, а не с 0.
bind-key v split-window -h
bind-key s split-window -v
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
Эти команды переназначают стандартные горячие клавиши tmux на более привычные пользователям Vim. Кнопкам v
, s
, h
, j
, k
, l
соответственно назначаются команды для горизонтального и вертикального разделения окна и перемещения по панелям.
Применение и рекомендации
Теперь, когда мы разобрались с теорией и примерами, рассмотрим применения. Во-первых, понимание этих инструкций позволяет эффективно адаптировать поведение tmux к вашим личным предпочтениям и привычкам, что может значительно увеличить производительность и удобство в работе.
-
Настройка под собственный рабочий процесс: Изучая примеры других пользователей, у вас есть возможность заимствовать или создавать свои собственные кастомизации. Это помогает сделать интерфейс более интуитивно понятным и эффективным.
-
Управление совместимостью версий: Если вам необходимо использовать плагины или настройки, требующие определенной версии tmux, стоит обратить внимание на изменения синтаксиса через файлы
CHANGES
в репозиториях. Например, наличие фигурных скобок в новых версиях. -
Отладка ошибок конфигурации: Если вы сталкиваетесь с ошибками в вашей конфигурации, стоит сперва убедиться в корректном использовании синтаксиса команд и их совместимости с вашей версией tmux, как в примере с
tmux-mighty-scroll
.
В конечном итоге, адекватная настройка .tmux.conf
требует понимания как теоретической основы (команды и их функции), так и практического опыта (применение и адаптация под конкретные нужды и версии). Правильное использование конфигурационного файла поможет сделать вашу работу в терминале более продуктивной и приятной.