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 |