tmux
Материал из Xgu.ru
tmux — консольный оконный менеджер, похожий на GNU Screen, но отличающийся от него рядом
серьёзных усовершенствований.
Основные преимущества tmux в сравнении с GNU Screen:
- Ясная и прозрачная клиент-серверная модель (например, можно без проблем подключать разные окна к разным сеансам);
- Простой интерфейс командной строки;
- Единый синтаксис команд в конфигурационном файле, в командной строке оболочки и в командной строке tmux;
- Простота написания скриптов;
- Множество буферов вставки;
- Комбинации клавиш vi/emacs;
- Простой синтаксис командной строки, поддерживающий вывод внешних команд shell.
Содержание |
[править] Управление окнами
Очень похоже на то, как это сделано в screen.
- ctrl-b c (tmux new-window)
- создать новое окно
- ctrl-b 0-9 (tmux select-window -t
- 0-9)
- перейти на окно с заданным номером
- ctrl-b , (tmux rename-window)
- переименовать текущее окно
- ctrl-b n
- перейти на следующее окно
- ctrl-b f
- найти окно по имени
- ctrl-b w
- выбрать окно в меню
[править] Управление панелями
- tmux split-window (prefix + ")
- разбить по вертикали
- tmux split-window -h (prefix + %)
- разбить по горизонтали
- tmux swap-pane -[UDLR] (prefix + { or })
- поменять текущую панель с другой, по указанному направлению
- tmux select-pane -[UDLR] (prefix + стрелки)
- перейти на панель в указанном направлении
- tmux select-pane -t :.+
- перейти на следующую панель
- (prefix SPACE)
- циклически менять расположение панелей (even-horizontal, even-vertical, main-horizontal, main-vertical, tiled)
- (prefix !)
- перенести текущую панель на новое окно
[править] .tmux.conf
Удобные настройки (особенно при переходе со Screen), добавляются в ~/.tmux.conf:
# привязать главный префикс на ctrl-a, по умолчанию находится на ctrl-b set -g prefix C-a unbind C-b bind C-a send-prefix # перечитать конфигурационный файл, c-a r unbind r bind r source-file ~/.tmux.conf # перейти на другую панель c-a c-a unbind ^A bind ^A select-pane -t :.+
[править] Шпаргалка
tmux [command] # Run a command # 'tmux' with no commands will create a new session new # Create a new session -s "Session" # Create named session -n "Window" # Create named Window -c "/dir" # Start in target directory attach # Attach last/available session -t "#" # Attach target session -d # Detach the session from other instances ls # Показать список открытых сессий -a # Показать список всех открытых сессий lsw # Показать список окон -a # Показать список всех окон -s # Показать список всех окон в текущей сессии lsp # Показать список панеленй -a # Показать список всех -s # Показать список панелей в данной сессии -t # Показать список панелей в указанной kill-window # Убить текущее окно -t "#" # Убить указанное окно -a # Убить все окна -a -t "#" # Убить все окна, кроме указанного kill-session # Убить текущую сессию -t "#" # Убить указанную сессию -a # Убить все сессии -a -t "#" # Убить все сессии, кроме указанной
Комбинации клавиш:
---------------------------------------------------------------------- (C-b) = Ctrl + b # 'Prefix' combination required to use keybinds (M-1) = Meta + 1 -or- Alt + 1 ---------------------------------------------------------------------- ? # List all key bindings : # Enter the tmux command prompt r # Force redraw of the attached client c # Create a new window ! # Break the current pane out of the window. % # Split the current pane into two, left and right " # Split the current pane into two, top and bottom n # Change to the next window p # Change to the previous window { # Swap the current pane with the previous pane } # Swap the current pane with the next pane s # Select a new session for the attached client interactively w # Choose the current window interactively 0 to 9 # Select windows 0 to 9 d # Detach the current client D # Choose a client to detach & # Kill the current window x # Kill the current pane Up, Down # Change to the pane above, below, left, or right Left, Right M-1 to M-5 # Arrange panes: # 1) even-horizontal # 2) even-vertical # 3) main-horizontal # 4) main-vertical # 5) tiled C-Up, C-Down # Resize the current pane in steps of one cell C-Left, C-Right M-Up, M-Down # Resize the current pane in steps of five cells M-Left, M-Right
Источник:
[править] Возможности Screen не поддерживаемые в tmux
Функции, которые не поддерживает tmux, но поддерживает screen:
- zmodem transfers. в screen можно передавать файлы по zmodem. Для этого надо нажать ctrl-a :zmodem catch и sz на том конце. Tmux так не умеет (скриптами можно заставить).
- подключение к serial-интерфейсу. Screen может работать на последовательном порту (screen -r /dev/ttyS0 115200), tmux — нет.
- Автоматическое логгирование сеанса tmux тоже не может делать (скриптами можно заставить, см. ниже).
[править] Приятные дополнения и навороты
[править] Как сделать максимизацию текущей панели?
В самом tmux такой возможности нет, но её легко реализовать самому [1]:
unbind + bind + new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \; swap-pane -s tmux-zoom.0 \; select-window -t tmux-zoom unbind - bind - last-window \; swap-pane -s tmux-zoom.0 \; kill-window -t tmux-zoom
[править] Как включить прокрутку по shift pgup/pgdn?
Вообще прокрутка доступна по prefix [ или prefix pgup (автоматически включается режим прокрутки и прокручивается один экран), но если хочется именно по shift pgup/pgdown, то нужно добавить в tmux.conf [2]:
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
[править] Как послать текст в окно tmux?
Использовать `send-keys`:
tmux send-keys -t 0.2 'echo hi' Enter
Здесь мы посылаем в панель 2 окна 0 текст echo hi и нажимаем Enter.
Подробнее: [3].
[править] Как копировать текст между окнами/буферами tmux?
setw -g mode-keys vi # vim-style movement # in normal tmux mode bind Escape copy-mode # `tmux prefix + Escape` starts copy mode. bind p paste-buffer # `prefix + p` pastes the latest buffer # in copy mode… bind -t vi-copy v begin-selection # `v` begins a selection. (movement keys to select the desired bits) bind -t vi-copy y copy-selection # `y` copies the current selection to one of tmux's "paste buffers" bind -t vi-copy V rectangle-toggle # `V` changes between line- and columnwise selection bind -t vi-copy Y copy-end-of-line # ^1 bind + delete-buffer
Управляющие клавиши:
# List all paste buffers. - Delete the most recently copied buffer of text. = Choose which buffer to paste interactively from a list. [ Enter copy mode to copy text or view the history. ] Paste the most recently copied buffer of text.
Источник: Copy and Paste in `tmux`.
[править] Дополнительная информация
- tmux is sweet as heck (англ.) — некоторые преимущества tmux по сравнению с GNU Screen
- tmux: Productive Mouse-Free Development (англ.) — интересная книга про tmux из серии Pragmatic Programmer
- Multiplexers: Screen, Tmux — Hyperpolyglot (англ.) — основные комбинации клавиш и команды tmux и screen; хорошее введение для пользователей screen чтобы быстрее перейти на tmux
- screen and tmux (англ.) — сравнение основных комбинаций клавиш и команд screen и tmux
- tmux and mouse mode (англ.) — вопросы использования мыши в tmux
- A Tmux Crash Course (англ.) — небольшая подборка советов по работе с tmux
- TMUX – The Terminal Multiplexer (англ.) — короткое, но хорошее введение в tmux; освоение можно начать с него
Специальные вопросы:
- Run command in detached tmux session (англ.) — как выполнить команду в отключенном сеансе tmux
- Automatically start tmux on SSH login (англ.) — автоматический запуск tmux при входе в систему
- Is there an equivalent of GNU Screen's “log” command in tmux? (англ.) — как автоматически записывать всё, что происходит в консоли tmux
- tmux — unlimited history? (англ.) — как сделать неограниченную историю в tmux (почти неограниченную)