Podstawowe informacje
TMUX posiada trzy obiekty, tj: sesje, okna i panele, sesje są to osobne procesy, czyli każde
kolejne uruchomienie programu tmux, w sesji możemy tworzyć okna a te możemy dzielić na panele.
TMUX działa w trybie client-serwer, przy pierwszym uruchomieniu tmux, jest uruchamiany serwer,
zamknięcie wszystkich sesji tmux kończy pracę serwera.
Uruchomienie nowej sesji
tmux
Więcej na temat tmux https://github.com/tmux/tmux/wiki
Zmiana prefiksu ctrl-b na ctrl-a
TMUX jako prefiks czyli skrót do uruchamiania poleceń używa Ctrl+b w odróżnieniu do programu
screen, w którym używany jest skrót Ctrl+a. Pierwszą rzeczą jaką robię w konfiguracji tmux to
właśnie zamiana Ctrl+b na Ctrl+a.
W pliku konfiguracyjnym ~/.tmux.conf dodajemy na początku
set-option -g prefix C-a unbind-key C-a bind-key C-a send-prefix
Zmiana ustawień klawiszy na Vim zamiast Emacs
Szczególnie przydatne w trybie COPY
W pliku konfiguracyjnym ~/.tmux.conf dodajemy
setw -g mode-keys vi
Tryb COPY
Tryb COPY umożliwia poruszanie się po buforze, czyli mówiąc inaczej przewijamy tekst oglądając
wcześniej wykonane komendy. Wejście do trybu COPY Copy-a-[. Wyjście z trybu COPY 2 x ESC lub q
Poruszanie się w trybie COPY
Istnieją dwa tryby – tryb vi oraz tryb emacs zmianę trybu wykonujemy poleceniem
setw -g mode-keys vi
Poruszanie się po trybie COPY w dwóch trybach vi i emacs
| Funkcja | vi | emacs |
|---|---|---|
Wejście do trybu COPY |
|
|
Back to indentation |
^ |
M-m |
Clear selection |
Escape |
C-g |
Copy selection |
Enter |
M-w |
Cursor down |
j |
Down |
Cursor left |
h |
Left |
Cursor right |
l |
Right |
Cursor to bottom line |
L |
|
Cursor to middle line |
M |
M-r |
Cursor to top line |
H |
M-R |
Cursor up |
k |
Up |
Delete entire line |
d |
C-u |
Delete to end of line |
D |
C-k |
End of line |
$ |
C-e |
Goto line |
: |
g |
Half page down |
C-d |
M-Down |
Half page up |
C-u |
M-Up |
Next page |
C-f |
Page down |
Next word |
w |
M-f |
Paste buffer |
p |
C-y |
Previous page |
C-b |
Page up |
Previous word |
b |
M-b |
Quit mode |
q |
Escape |
Scroll down |
C-Down or J |
C-Down |
Scroll up |
C-Up or K |
C-Up |
Search again |
|
|
Search backward |
|
|
Search forward |
|
|
Start of line |
0 |
C-a |
Start selection |
Space |
C-Space |
Transpose chars |
C-t |
Operacja kopiuj wklej w trybie COPY
-
Wejście do trybu COPY -
Ctrl-a-[ -
Zaznaczenie tekstu -
Spacja -
Skopiowanie tekstu -
Enter -
Wklejenie tekstu -
Ctrl-a-]
Przykładowa konfiguracja ~/.tmux.conf
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'fcsonline/tmux-thumbs'
set -g @plugin 'sainnhe/tmux-fzf'
set -g @plugin 'wfxr/tmux-fzf-url'
# set -g @plugin 'omerxx/catppuccin-tmux' # My fork that holds the meetings script bc I'm lazy af
set -g @plugin 'omerxx/tmux-sessionx'
set -g @sessionx-bind 'o'
# Zmiana ctrl-b na ctrl-a
set-option -g prefix C-a
unbind-key C-a
bind-key C-a send-prefix
# Zmienia ctrl-b na ctrl-space
# unbind C-b
# set -g prefix C-Space
# bind C-Space send-prefix
# unbind-key C-f
# TMUX_FZF_LAUNCH_KEY="C-f"
TMUX_FZF_ORDER="window|session|pane|command|keybinding|clipboard|process"
set -s set-clipboard on
# start with window 1 (instead of 0)
set -g base-index 1
# start with pane 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
# shorten command delay
set -sg escape-time 1
# enable vi mode keys
set-window-option -g mode-keys vi
# Użycie Alt-Strzałki do zmiany panelu
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
bind -n M-H select-pane -L
bind -n M-J select-pane -D
bind -n M-K select-pane -U
bind -n M-L select-pane -R
# Użycie prefiksu + hjkl do zmiany panelu
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Użycie Shift-Strzałki do zmiany okna
bind -n S-Left previous-window
bind -n S-Right next-window
bind -n S-Up last-window # Shift-Up poprzednie okno
bind -n S-Down choose-window # wybór okna
# zmiana okna lewy alt-h, alt-l
bind -n M-h previous-window
bind -n M-l next-window
bind -n M-j switch-client -l # ostatnia sesja
bind -n M-k choose-tree # wybór sesji
# zamienia okna miejscami
bind-key m command-prompt -p "move window to:" "swap-window -t '%%'"
# bind-key -n C-M-Space display-popup -w 80% "ls ~/Downloads | fzf"
# bind -n C-h previous-window
# bind -n C-l next-window
# Zarządzanie oknami
# bind -n C-t new-window -c "#{pane_current_path}" # ctrl-t otwiera nowe okno
# bind k confirm kill-window # ctrl-a-k zamknij okno - wymaga potwierdzenia
bind K kill-window # ctrl-a-K zamknij okno
# unbind c
# unbind p
# unbind n
# Użycie Shift-Strzałki do zmiany sesji
bind -n C-Left switch-client -p # poprzednia sesja
bind -n C-Right switch-client -n # następna sesja
bind -n C-Up switch-client -l # ostatnia sesja
bind -n C-Down choose-tree # wybór sesji
# w trybie COPY 'v' zaczyna zaznaczanie tak jak spacja
bind-key -T copy-mode-vi v send-keys -X begin-selection
# w trybie COPY 'Ctrl-v' zmienia tryb zaznaczania z liniowego na blokowy
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
# w trybie COPY 'y' kopiuje zaznaczony tekst lub jeśli nie jest nic zaznaczone wychodzi z trybu COPY
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# Użycie myszki
# wersja dla tmux < 2.1
#set -g mode-mouse on
#set -g mouse-resize-pane on
#set -g mouse-select-pane on
#set -g mouse-select-window on
# wersja dla tmux > 2.1
set -g mouse on
# Ustawienie dzielenia panelu dodatkowo otwiera w tej samej ścieżce
bind \\ split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# Dodanie informacji po prawej stronie paska statusu
set-option -g status-right "#(whoami)@#H %H:%I "
# Przeładowanie konfiguracji tmux
bind-key r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"
# Prefix D uruchamia edycję pliku ./TODO.md lub ~/git/github/dotfiles/todo.md
bind -r D neww -c "#{pane_current_path}" "[[ -e TODO.md ]] && $EDITOR TODO.md || $EDITOR ~/git/github/dotfiles/todo.md"
# bind -r D send-keys -t.- 'doas dnf update' Enter
set -g pane-active-border-style 'fg=green,bg=default'
set -g pane-border-style 'fg=brightblack,bg=default'
# http://www.hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/¬
# Ustawienie paska statusu
set-option -g set-titles on
set -g status-interval 1
# Basic status bar colors
set -g status-fg colour238
set -g status-bg colour233
# Left side of status bar
set -g status-left-length 40
set -g status-left "#[fg=colour232,bg=colour245,bold] #S #[fg=colour240,bg=colour235]#[fg=colour240,bg=colour235] #I:#P #[fg=colour235,bg=colour233,nobold]"
# set -g status-left "#[fg=colour232,bg=colour245,bold] #S #[fg=colour245,bg=colour240,nobold]#[fg=colour233,bg=colour240] #(whoami) #[fg=colour240,bg=colour235]#[fg=col our240,bg=colour235] #I:#P #[fg=colour235,bg=colour233,nobold]"
# Right side of status bar
set -g status-right-length 150
set -g status-right "#[fg=colour245 ,bg=colour240]#[fg=colour232,bg=colour245,bold] #H "
# set -g status-right "#[fg=colour235,bg=colour233]#[fg=colour240,bg=colour235] %H:%M:%S #[fg=colour240,bg=colour235]#[fg=colour233,bg=colour240] %d-%b-%y #[fg=colour245 ,bg=colour240]#[fg=colour232,bg=colour245,bold] #H "
# Window status
set -g window-status-current-format " #I:#W#F "
set -g window-status-current-style fg=brightwhite,bg=colour237,bold,noitalics
set -g window-status-format " #I:#W#F "
set -g window-status-style fg=white,bg=colour235,noitalics
set -g window-status-separator ""
# Window separator
set -g window-status-separator ""
# Window status alignment
set -g status-justify centre
# Pane number indicator
set -g display-panes-colour colour233
set -g display-panes-active-colour colour245
# Clock mode
set -g clock-mode-colour colour240
set -g clock-mode-style 24
# set-option -g default-shell /usr/bin/fish
# set-option -g default-shell /usr/bin/zsh
set-option -g default-shell /usr/bin/zsh
set -g history-limit 10000
# set -g default-terminal "screen-256color"
# set -g default-terminal "tmux-256color"
# set -g default-terminal "xterm-256color"
# set-default colorset-option -ga terminal-overrides ",xterm-256color:Tc"
# set -g default-terminal 'screen-256color'
# set -g default-terminal 'screen-256color'
# set -ga terminal-overrides ',xterm-256color:Tc'
# set -as terminal-overrides ',xterm*:sitm=\E[3m'
# set -g terminal-overrides ',xterm-256color:Tc'
# set -g default-terminal "xterm-256color"
# set-option -ga terminal-overrides ",xterm-256color:Tc"
# działa
# set-option -sa terminal-overrides ",xterm*:Tc"
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
Skróty klawiszowe
Standardowo prefix to skrót Ctrl-b wcześniej pokazałem jak go zamienić na skrót Ctrl-a, w tabelce
poniżej takiego używam.
Skrót |
Działanie |
|
Odłączenie od sesji, wyjście z tmux; nie zamyka sesji |
|
Tworzy nowe okno |
|
Przechodzi do następnego okna |
|
Przechodzi do poprzedniego okna |
|
Przechodzi do wybranego okna |
|
Dzieli okno pionowo, tworzy panel |
|
Dzieli okno poziomo, tworzy panel |
|
Poruszanie się pomiędzy panelami |
|
Przełączanie się pomiędzy dwoma ostatnio używanymi panelami |
|
Przechodzi do następnego panelu |
|
Przenosi aktywny panel na prawo |
|
Przenosi aktywny panel na lewo |
|
Zmienia rozmieszczenie paneli |
|
Wyświetla numer panelu |
|
Przenosi bieżący panel do nowego okna |
|
Przy kilku panelach w oknie pokazuje / chowa bieżący panel na całym ekranie |
|
Zmiana nazwy sesji |
|
Zmiana nazwy okno |
|
Zamknięcie bieżącego panelu, jeśli okno posiada jeden panel, to zamknie okno |
|
Zamknięcie bieżącego okna, jeśli sesja posiada jedno okno, to zamknie sesję |
|
Wyświetla wszystkie sesje i pozwala na przełączanie się pomiędzy nimi |
|
Wyświetla sesje a także znajdujące się w nich okna |
|
Przechodzi do poprzedniej sesji |
|
Przechodzi do następnej sesji |
|
Wyświetla listę skrótów klawiszowych |
Parametry polecenia tmux
Utworzenie nowej sesji
Jeśli uruchomimy program tmux bez parametrów, to zostanie utworzona nowa sesja. Chyba, że
znajdujemy się już w sesji tmux, wtedy nie zostanie utworzona nowa sesja.
tmux
Tak samo jak dodając parametr new lub new-session
tmux new-session tmux new
Innym przykładem utworzenia nowej sesji, jest utworzenie sesji i jednocześnie odłączenie się od
niej, taka operacja może być wykonana nawet w sytuacji, kiedy jesteśmy już w sesji tmux. Służy do
tego parametr -d. Dodatkowo warto nazwać sesję tak, żeby ją można było łatwo zidentyfikować. Do
ustawienia nazwy sesji służy parametr -s.
tmux new -d -s DESK-1
Lista istniejących sesji
tmux ls
Przykładowy wynik polecenia tmux ls
3: 2 windows (created Sat Jul 16 14:59:05 2022) 7: 1 windows (created Sun Jul 17 14:47:30 2022) DESK-1: 2 windows (created Sun Jul 17 14:01:56 2022) (attached) DESK-2: 1 windows (created Sun Jul 17 14:43:41 2022) Notes: 1 windows (created Sat Jul 16 14:15:57 2022) (attached) QUAKE: 2 windows (created Sat Jul 16 14:16:53 2022) (attached) SYNCTHING: 1 windows (created Sat Jul 16 14:15:51 2022)
Jak widać część z nich posiada nazwy a część możemy zidentyfikować używając cyfry / liczby.
Podłączenie się do istniejącej sesji
Podłączenie się do sesji jest możliwe jeśli znajdujemy się w terminalu bez aktywnej sesji tmux
tmux attach tmux atta tmux a
Podłączenie się do wybranej sesji za pomocą parametru -t
tmux a -t DESK-1
Zamknięcie wszystkich sesji tmux
tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill
Linia komend
Wejście do trybu komend realizujemy za pomocą skrótu Ctrl-a :. W tym trybie możemy wydawać
polecenia np: uruchomić nową sesję:
:new :new -s NAZWA-SESJI
Menadżer pluginów TPM
Instalacja
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
W pliku .tmux.conf dodajemy na początku listę wtyczek, które chcemy używać
set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-sensible' set -g @plugin 'tmux-plugins/tmux-yank' set -g @plugin 'tmux-plugins/tmux-resurrect' set -g @plugin 'tmux-plugins/tmux-continuum' set -g @plugin 'fcsonline/tmux-thumbs' set -g @plugin 'sainnhe/tmux-fzf' set -g @plugin 'omerxx/tmux-sessionx'
Na końcu pliku .tmux.conf dodajemy
run '~/.tmux/plugins/tpm/tpm'
Teraz należy przeładować konfigurację za pomocą skrótu C-a : wchodzimy do trybu COMMAND, następnie
wydajemy komendę:
source-file ~/.tmux.conf
Na koniec instalujemy wtyczki używając skrótu C-a I.
| Date: 2020-10-24T19:30:00+02:00 |