MyTetra Share
Делитесь знаниями!
Tmux - основные клавиатурные команды и базовая настройка
Время создания: 11.11.2013 23:59
Автор: Xintrea
Текстовые метки: linux, tmux, терминал, консоль
Раздел: Компьютер - Linux - Bash - Терминал
Запись: xintrea/mytetra_syncro/master/base/13841999905p86ii5dt9/text.html на raw.github.com

Tmux — это менеджер терминалов, к которому удобно подключаться и отключаться, не теряя при этом процессы и историю. Эта программа чем-то напоминает screen, только лучше: в первую очередь потому, что использует модель клиент—сервер. Tmux позволяет разделять рабочую область на несколько консолей, менять их размеры и всячески ими управлять.





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



Запуск tmux


Очень хороший способ запустить tmux:


tmux attach || tmux new


Делая так, команда вначале пытаетеся подключиться tmux-консолью к уже существующему серверу tmux, если он существует (tmux attach). Если сервер еще не запущен — запускается сервер и к нему создается консоль (tmux new).



Как пользоваться сочетанием Ctrl+b ?


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


  • сначала вместе нажать клавиши Ctrl и B,
  • затем отпустить эти обе клавиши
  • нажать клавишу/клавиши команды
  • отпустить клавишу/клавиши команды



Основные сочетания клавиш


В одной сессии может быть сколько угодно окошек:


  • Ctrl+b c — создать окошко;
  • Ctrl+b 0...9 — перейти в такое-то окошко;
  • Ctrl+b p — перейти в предыдущее окошко;
  • Ctrl+b n — перейти в следующее окошко;
  • Ctrl+b l — перейти в предыдущее активное окошко (из которого вы переключились в текущее);
  • Ctrl+b & — закрыть окошко (а можно просто набрать exit в терминале).


В одном окошке может быть много панелей:


  • Ctrl+b % — разделить текущую панель на две, по вертикали;
  • Ctrl+b " — разделить текущую панель на две, по горизонтали (это кавычка, которая около Enter, а не Shift+2);
  • Ctrl+b стрелка →←↑↓ — переходить между панелями;
  • Ctrl+b Ctrl+стрелка →←↑↓- изменить размер текущей панели;
  • Ctrl+b x — закрыть панель (а можно просто набрать exit в терминале).


Недостаток — непривычным становится скроллинг:


  • Ctrl+b PgUp — вход в «режим копирования», после чего:
  • PgUp, PgDown — скроллинг;
  • q — выход из «режима копирования».


Ctrl+b d — отключиться от tmux. (Точно так же вы отключитесь, если прервётся соединение. Как подключиться обратно и продолжить работу — см. выше.)



Использование мышки


По непонятной причине, по-дефолту поддержка мыши в tmux отключена. Но ее можно включить. Для этого надо сделать следующие действия:


  • Если нет файла ~/.tmux.conf, его надо создать
  • В файле ~/.tmux.conf разместить следующие настройки:


set-option -g -q mouse on
bind-key -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"
bind-key -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"


  • Перезапустить tmux или перегрузить настройки. Для этого можно нажать Ctrl+b : и ввести команду:


source ~/.tmux.conf


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


Кроме того, выделение мышкой будет работать в пределах данного окна. Правда, как скопировать выделенное мышкой - непонятно. В буфер обмена X ничего не попадает. Пока что решение - выделять мышкой с использованием Shift, вставлять в текстовый редактор и убирать лишнее или копировать нужное через редактирование вертикальными блоками.


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



Копирование/вставка клавиатурой


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


Для копирования/вставки в пределах tmux используются клавиши:


  • Вход в режим копирования: Ctrl+B [ или Ctrl+b PgUp
  • В режиме копирования стрелками можно перемещать курсор. Если двигаться выше/ниже экрана панели, текст будет скроллиться. То есть, можно перемещаться по истории вывода в консоль.
  • Начать выделение: Ctrl+пробел (без b!)
  • Завершить выделение и скопировать в буфер tmux: Ctrl+w (без b!)
  • Вставка из буфера tmux: Ctrl+b ]



Настройка копирования в системный буфер обмена


Однако, tmux можно настроить так, что будет работать копирование и в системный буфер обмена. Если в системе есть утилита xclip, то в файл ~/.tmux.conf надо добавить строку:



bind-key -T copy-mode Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"



Если необходимо работать через утилиту xsel, то конфигурирующая строка будет выглядеть так:



bind-key -T copy-mode Enter send-keys -X copy-pipe-and-cancel "xsel -i --clipboard"



После этой настройки, копирование в общесистемный буфер обмена будет выполняться так же как и при копировании в буфер обмена tmux, только после начала выделения (Ctrl+пробел), когда стрелками выбрана нужная область, надо нажать Enter (например, по Enter завершается выделение в cmd-консоли Windows). Все, после нажатия Enter выделенный фрагмент текста будет находиться в системном буфере обмена рабочего стола.



Дублирование ввода (одновременный ввод символов во все панели)


Tmux позволяет переключиться в режим, когда набираемая команда будет одновременно печататься во все текущие панели. Для этого надо нажать сочетание клавиш Ctrl+b : (Ctrl+b и двоеточие) для вызова командного режима. Далее надо ввести команду:



setw synchronize-panes on



Для ускорения ввода команды можно пользоваться автозавершением по кнопке Tab.


Если нужно, чтобы синхронизировалась история, например чтобы одинаково работали команды, вызываемые при нажатии клавиш Вверх-Вниз, то можно выполнить команду:



clear history



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



Снятие зависшего процесса в панели


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


По-хорошему надо этому активному, но зависшему сеансу отправить сигнал завершения. А как это сделать для конкретной панели, если в ней все зависло? Для этого надо сделать еще одну настройку tmux.


В файл ~/.tmux.conf надо добавить строку:



bind-key k run-shell 'kill -s USR1 -- "-$(ps -o tpgid:1= -p #{pane_pid})"'



И после чего перезапустить tmux или перечитать конфигурацию, как было написано выше. В результате такой настройки, если процесс зависнет, то при нажатии Ctrl+b k текущему процессу в текущей панели будет отправлен сигнал SIGUSR1, который является сигналом завершения процесса. При желании можно написать KILL вместо USR1, тогда завершение процесса будет безусловным.



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования