2015년(정도에 좋음) tmux 환경 설정 정리

작년 정도부터 멍하니 사용하고 있던 tmux도 대체로 설정이 굳어졌으므로, 설정 방법을 정리합니다.
기본적으로 리눅스에서 사용을 가정합니다.

[참고] 사용시의 외형





tmux 빌드



적어도 tmux 2.1 이상은 원하기 때문에 소스로부터 빌드를 실시하고 있습니다.
빌드에 대해서는 아래 문서를 참조하십시오.

TMUX의 최신 소스에서 빌드 - Qiita

2015년 12월 현재 .tmux.conf



처음에도 썼습니다만, 기본적으로 Linux에서의 사용을 상정하고 있으므로,
clipboard 당은 적절히 수정하십시오.

.tmux.conf
# change prefix key to C-j
unbind C-b
set -g prefix C-j

# 設定ファイルをリロードする
bind r source-file ~/.tmux.conf \; display "Reloaded!"

# fix Esc key delay time for Vim
set -sg escape-time 0

# ウィンドウ分割後もカレントディレクトリに留まる
if-shell "~/dotfiles/bin/tmux-version-check 1.9" '\
    bind c new-window -c "#{pane_current_path}";\
    bind | split-window -h -c "#{pane_current_path}";\
    bind - split-window -v -c "#{pane_current_path}";\
'

# ウィンドウを閉じた時に番号を詰める
if-shell "~/dotfiles/bin/tmux-version-check 1.7" '\
    set-option -g renumber-windows on; \
'
# ステータスバーを上部に表示する
if-shell "~/dotfiles/bin/tmux-version-check 1.7" '\
    set -g status-position top; \
'

# マウス操作を有効にする
if-shell "~/dotfiles/bin/tmux-version-check 2.0" '\
    set -g mouse on; \
'

# コピーモードを設定する
## viのキーバインドを使用する
setw -g mode-keys vi
## コピーモードの操作をvim風に設定する
bind-key -t vi-copy C-v begin-selection
unbind -t vi-copy Enter

## copy to clipboard
### for Linux
if-shell "which xsel" '\
  bind-key -t vi-copy y copy-pipe "xsel -ib"; \
  bind-key -t vi-copy Enter copy-pipe "xsel -ib"; \
'

# Vimのキーバインドでペインを移動する
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

# Vimのキーバインドでペインをリサイズする
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

## リフレッシュの間隔を設定する(デフォルト 15秒)
set -g status-interval 1

## ウィンドウリストの位置を左寄せにする
set -g status-justify left

## ヴィジュアルノーティフィケーションを有効にする
setw -g monitor-activity on
set  -g visual-activity on

# ステータスバーを設定する
set-window-option -g allow-rename off
set-window-option -g window-status-current-format "#[fg=colour255,bg=colour241,bold] #I: #W #[default]"

## 左パネルを設定する
set -g status-left-length 50
set -g status-left \
"#{?client_prefix,#[reverse],}#[fg=green][#S:#I.#P]#[fg=yellow][#(whoami)@#h]  "

## 右パネルを設定する
set -g status-right-length 80
set -g status-right \
"#{?client_prefix,#[reverse],}"\
"#[fg=green]#(${HOME}/dotfiles/bin/git-echo-branch-tmux-current-pane)"\
"#[fg=yellow]#(${HOME}/dotfiles/bin/git-echo-username-and-email)"\
"#[fg=cyan][%Y-%m-%d(%a) %H:%M]"

#### COLOUR (Solarized dark)
#### cf: https://github.com/altercation/solarized/blob/master/tmux/tmuxcolors-dark.conf

# default statusbar colors
set-option -g status-bg black #base02
set-option -g status-fg yellow #yellow
set-option -g status-attr default
# default window title colors
set-window-option -g window-status-fg brightblue #base0
set-window-option -g window-status-bg default
#set-window-option -g window-status-attr dim
# active window title colors
set-window-option -g window-status-current-fg brightred #orange
set-window-option -g window-status-current-bg default
#set-window-option -g window-status-current-attr bright
# pane border
set-option -g pane-border-fg black #base02
set-option -g pane-active-border-fg brightgreen #base01
# message text
set-option -g message-bg black #base02
set-option -g message-fg brightred #orange
# pane number display
set-option -g display-panes-active-colour blue #blue
set-option -g display-panes-colour brightred #orange
# clock
set-window-option -g clock-mode-colour green #green

dotfiles/tmux.conf at master · koara-local/dotfiles

이하 상세한 설명



prefix key (C-j)



좋아한다고 생각합니다만, 자신은 bash 와 vim 에 경합하지 않는다 C-j 를 사용하도록(듯이) 하고 있습니다.

버전 체크



버전 업에서의 새로운 기능의 추가나, 후방 호환성이 잘린 옵션도 있거나 하기 때문에 버전 체크를 실시할 수 있도록 하고 있습니다. 자신은 ~/dotfiles/bin 이하에 버전 체크용의 스크립트를 배치하고 있습니다.

tmux-version-check
#!/bin/bash

need_version=$1
current_version=$(tmux -V | awk '{print $2}')

[[ $(echo "$current_version > $need_version" | bc) != 0 ]]

dotfiles/tmux-version-check at 6806cf3d03bed5b8a59549709473dfec40b2e637 · koara-local/dotfiles

복사 모드 설정 (+ vim 키 바인딩 사용)



vim에 너무 익숙해져, hjkl이 아니면 위화감이 있으므로 vi 모드를 설정하고 있습니다.
# コピーモードを設定する
## viのキーバインドを使用する
setw -g mode-keys vi
## コピーモードの操作をvim風に設定する
bind-key -t vi-copy C-v begin-selection
unbind -t vi-copy Enter

# Vimのキーバインドでペインを移動する
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

# Vimのキーバインドでペインをリサイズする
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

그리고 복사 모드에서 복사한 문자를 다른 앱에서도 사용할 수 있도록 합니다.
Linux의 경우 xsel가 필요합니다. 다른 환경은 조사하면 곧 나오므로 생략합니다.
## copy to clipboard
### for Linux
if-shell "which xsel" '\
  bind-key -t vi-copy y copy-pipe "xsel -ib"; \
  bind-key -t vi-copy Enter copy-pipe "xsel -ib"; \
'

[Linux] 명령줄의 표준 출력을 클립보드에 복사 - Qiita

새로 고침 간격 설정



상태바에 여러가지 표시하기 위해, 갱신 주기를 1초로 변경하고 있습니다.
디폴트는 15초이므로, 그대로라면 조금 반응이 느립니다.
## リフレッシュの間隔を設定する(デフォルト 15秒)
set -g status-interval 1

Git의 정보를 상태 표시 줄에 표시 (브랜치 이름, user.name, user.email 표시)





상태 표시 줄에 git 정보를 표시하는 것이 유용합니다.tmux display-message -p -F "#{pane_current_path} 를 사용하면 현재 창에서 현재 디렉토리의 경로를 얻을 수 있습니다.
그리고는 표시하고 싶은 정보를 취득해 echo로 돌려주면 좋다고 생각합니다.
## 右パネルを設定する
set -g status-right-length 80
set -g status-right \
"#{?client_prefix,#[reverse],}"\
"#[fg=green]#(${HOME}/dotfiles/bin/git-echo-branch-tmux-current-pane)"\
"#[fg=yellow]#(${HOME}/dotfiles/bin/git-echo-username-and-email)"\
"#[fg=cyan][%Y-%m-%d(%a) %H:%M]"

git-echo-branch-tmux-current-pane
#!/bin/bash -e

cd `tmux display-message -p -F "#{pane_current_path}"`
branch_name=`git branch | grep \*.* | sed -e 's/\*\ //'`

[ ! -z ${branch_name} ] && echo "[${branch_name}]"

git-echo-username-and-email
#!/bin/bash -e

cd `tmux display-message -p -F "#{pane_current_path}"`
user_name=`git config --get user.name`
email_address=`git config --get user.email`

echo "[${user_name} | ${email_address}]"

접두어 키가 눌려진 것을 알기 쉽게 한다.


?client_prefix 에서 접두사 키를 눌렀는지 확인하여 상태 표시 줄의 색상을 변경합니다.



tmux에서 Prefix key를 눌렀는지 여부 표시 - Qiita

색 구성표 변경



기본 녹색도 맛이 좋지만 자신이 solarized로 변경하고 있습니다.
#### COLOUR (Solarized dark)
#### cf: https://github.com/altercation/solarized/blob/master/tmux/tmuxcolors-dark.conf

# default statusbar colors
set-option -g status-bg black #base02
set-option -g status-fg yellow #yellow
set-option -g status-attr default
# default window title colors
set-window-option -g window-status-fg brightblue #base0
set-window-option -g window-status-bg default
#set-window-option -g window-status-attr dim
# active window title colors
set-window-option -g window-status-current-fg brightred #orange
set-window-option -g window-status-current-bg default
#set-window-option -g window-status-current-attr bright
# pane border
set-option -g pane-border-fg black #base02
set-option -g pane-active-border-fg brightgreen #base01
# message text
set-option -g message-bg black #base02
set-option -g message-fg brightred #orange
# pane number display
set-option -g display-panes-active-colour blue #blue
set-option -g display-panes-colour brightred #orange
# clock
set-window-option -g clock-mode-colour green #green

기타 dotfiles



최신의 tmux.conf나 다른 설정은 dotfiles 에 정리하고 있으므로, 괜찮으시면 부디.

좋은 웹페이지 즐겨찾기