tmux. Пример конфига и дополнений к нему.

Модератор: /dev/random

Аватара пользователя
UnixNoob
Сообщения: 893
ОС: Slackware

tmux. Пример конфига и дополнений к нему.

Сообщение UnixNoob »

Почитал книжку по tmux, решил поделиться тем что оттуда узнал, может кому-то что-то пригодится.
Для начала конфиг с комментариями:

Код: Выделить всё

# prefix - по умолчанию комбинация ctrl-b.
# Поддержка мышки
setw -g mouse on

# Переназначаем prefix
set -g prefix C-a
unbind C-b

# Отправка Ctrl - a в другое приложение (в случае совпадения комбинации)
bind C-a send-prefix

# Задержка между нажатием prefix и командой.
set -sg escape-time 1

# Индекс окон и панелей начинаются с 1.
set -g base-index 1
setw -g pane-base-index 1

# Перечитать tmux.conf
bind r source-file ~/.config/tmux/tmux.conf \; display "Reloaded!"

# Более интуитивное создание панелей
bind | split-window -h
bind - split-window -v

# Разделить окно и сохранить текущий каталог
bind _ split-window -v -c "#{pane_current_path}"
bind / split-window -h -c "#{pane_current_path}"

# Перемещение по панелям в Vi - подобном стиле
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Перемещение между окнами ( ключ -r позволяет повторно нажимать C-h, без нажатия prefix)
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

# Меняем размер панелей в Vi - подобном стиле
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

# Терминал по-умолчанию для tmux
set -g default-terminal "screen-256color"

### Настройка цветов для tmux

# Цвета строки состояния
set -g status-style fg=white,blink,bg=black

# Цвета для обозначения окон в строке состояния
setw -g window-status-style fg=cyan,bg=black
setw -g window-status-current-style fg=white,bold,bg=red

## Цвета границ панелей
setw -g pane-border-style fg=green,bg=black
# setw -g pane-active-border-style fg=white,bg=yellow

# Выделяем активную панель с помощью затемнения
setw -g window-style fg=colour238,bg=colour235
setw -g window-active-style fg=white,bg=black

# Стиль сообщения строки состояния
set -g message-style fg=white,bold,bg=black

## Что показывать в строке состояния
set -g status-left-length 40
set -g status-left "#[fq=green]Session: #S #[fg=yellow]#I \
#[fg=cyan]#P"
set -g status-right "#[fg=cyan]%d %b %R"
set -g status-interval 60
set -g status-justify centre

# Если что-то произошло в не активном окне обозначить это цветом.
setw -g monitor-activity on
set -g visual-activity on

# Перемещение в copy-mode (prefix + [) в Vi - подобном стиле
setw -g mode-keys vi
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -T copy-mode-vi 'v' send -X begin-selection
bind-key -T copy-mode-vi 'y' send -X copy-selection

# Сохранять в буфер системы, а не tmux'a
 bind C-c run "tmux save-buffer - | xclip -i -sel clipboard"

# Можно переназначить на prefix + v
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

# Вставить из буфера системы в tmux
bind C-v run "tmux set buffer \"$(xclip -o -sel  clipboard)\"; tmux paste-buffer"

# Включаем/отключаем synchronize-panes.
# Позволяем выполнить одну команду на всех открытых панелях.
bind C-s set-window-option synchronize-panes \; display "Toggled synchronize"

# Разворачиваем текущую панель на весь экран.
unbind Up
bind Up new-window -d -n tmp \;  swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp

# Вывод журнала в текстовый файл.
bind P pipe-pane -o "exec cat >> ~/#W.log" \; display "Toggled logging to ~/#W.log"

# Загружаем конфиг для конкретной ОС
if-shell "uname | grep -q Darwin" "source-file ~/.tmux.mac.conf"

# Загрузить настройки из файла, если есть.
if-shell "[ -f ~/.tmux.private ]" "source ~/.tmux.private"

# Менеджер плагинов
set -g @plugin 'tmux-plugins/tpm'
# Позволяет сохранять/загружать окружение tmux после перезагрузки.
set -g @plugin 'tmux-plugins/tmux-ressurect'
run '~/.tmux/plugins/tpm/tpm'

Так же я узнал о существовании форка tmate, можно использовать для парной работы. Создает ssh соединение, на сколько я понял.
И о существовании tmuxinator, который позволяет создавать конфигурации tmux, в виде .yml файла.

Код: Выделить всё

name: example
root: ~/

windows:
  - console:
      layout: main-vertical
      panes:
        - top
        - #empty, will just run plain bash
  - editor: vim
С помощью tmuxinator debug была указана возможность создавать стандартный конфиг вида:

Код: Выделить всё

tmux has-session -t example
if [ $? != 0 ]
then
        tmux new-session -s example -n editor -d
        tmux send-keys -t example 'cd ~/dev_tmux' C-m
        tmux send-keys -t example 'vim' C-m
        tmux split-window -v -t example
        tmux select-layout -t example main-horizontal
        tmux send-keys -t example:1.2 'cd ~/dev_tmux' C-m
        tmux new-window -n console -t example
        tmux send-keys -t example:2 'cd ~/dev_tmux' C-m
        tmux select-window -t example:1
        tmux attach -t example
fi
tmux attach -t development
но у меня что-то не получилось.
Используя tmux -f,конфиг выше можно сократить, создав файл example.conf

Код: Выделить всё

source-file ~/.config/tmux/tmux.conf
new-session -s example -n editor -d
send-keys -t example 'cd ~/dev_tmux' C-m
send-keys -t example 'vim' C-m
split-window -v -t example
select-layout -t example main-horizontal
send-keys -t example:1.2 'cd ~/dev_tmux' C-m
new-window -n console -t example
send-keys -t example:2 'cd ~/dev_tmux' C-m
select-window -t example:1
attach -t example
Может быть кто-то еще поделится чем-то интересным или полезным, касательно tmux.
«Хорошо сформулированная проблема — наполовину решенная проблема».Чарлз Кеттеринг
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 678
ОС: debian, fedora (i3-wm)

Re: tmux. Пример конфига и дополнений к нему.

Сообщение olecya »

Вот куски из моего конфига. С переназначением префикса в виде одной клавиши(обратная кавычка):

Код: Выделить всё

setw -g mode-keys vi
set-option -g status-keys vi
unbind-key C-b 
set-option -g prefix ` 
bind-key ` send-prefix
bind-key ` last-window
И статусной строки:

Код: Выделить всё

bind-key s set status
setw -g status on
set -g status-left-length 35
set -g status-left " "
set -g status-right-length 80
set -g status-right "#(acpi -b | cut -d' ' -f3-) | #(df -h / | awk '/dev/ {print \"du - \" $5}') | #(hostname -I | cut -d' ' -f1) | %b-%d %a %H:%M "
Индикация открытых и выделенных окон:

Код: Выделить всё

setw -g window-status-format ' #I:#P'
setw -g window-status-current-format '#[bold]#F#I:#P'
Давно писала поэтому сразу прокомментировать не смогу
Добавлено (10:12):
При запущенном tmux позволяет просмотреть текущие настройки:

Код: Выделить всё

tmux show -g
Спасибо сказали: