直近の山場だった中間発表が終わり、少し時間ができたので前からずっと気にかかっていたtmux周りの設定を見直しました。

今まではiTermやHyperの分割機能を使っていて、分割自体には困っていなかったのですが、最近Hyperに乗り換えてから不意にターミナルを閉じてしまったときに、iTermのように確認画面が出ず、そのまま終了→動いてたプロセスも終了が何回かあって困っていました。 その後、hyper-confirmというプラグインを導入してからはこういったことはなくなったものの、設定が悪いのか確認画面が何度も出るようになってしまい、少し煩わしくなっていました。

そこで今回、前々から導入はしていたけどなんとなく挫折して使っていなかったtmux周りの設定をちゃんとして、ターミナルアプリの分割ではなくtmux側で分割、ついでに不意の切断にも強い環境にしよう!と思い立ったわけです。

前の .tmux.conf

設定を見直す前の.tmux.confはこんな感じでした。

#===================================
# tpm - Tmux Plugin Manager
#===================================

# Plugins
set -g @plugin 'tmux-plugins/tpm'

# Initialize TMUX plugin manager 
# (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

# Plugins
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'

#===================================
# Auto start tmux and restore
#===================================

# auto start terminal
set -g @continuum-boot 'on'
set -g @continuum-boot-options 'iterm'

# auto restore tmux
set -g @continuum-restore 'on'

どっかから拾ってきたのをくっつけて使っていたのでメチャクチャですね笑

  • run '~/.tmux/plugins/tpm/tpm'の位置がおかしい
  • キーコンフィグがデフォルトのままで使いにくい
    • PrefixCtrl-bなのがめっちゃ使いにくくて挫折しました(設定しろという話)

このあたりでしょうか。 tmuxバリバリ使ってるマンな方からすると、もうわけわからないと思います

新しい .tmux.conf

設定を見直したあとの.tmux.confはこのようになりました。

# 256 色端末を使用する
set -g default-terminal "screen-256color"
set -g terminal-overrides 'xterm:colors=256'

# ウィンドウとペインの番号を 1 から開始
set -g base-index 1
setw -g pane-base-index 1
# ウィンドウを閉じた時に番号を詰める
set-option -g renumber-windows on

# ステータスバーの長さを設定
set -g status-left-length 90
set -g status-right-length 90
# ステータスバーの内容を設定
set -g status-fg "colour255"
set -g status-bg "colour238"
set -g status-left '#H:[#P]'                # 左: マシン名・ペイン番号
set -g status-right '[%Y-%m-%d(%a) %H:%M]'  # 右: 日付
setw -g window-status-format " #I: #W "     # 中央: ウィンドウのインデックス・名前
setw -g window-status-current-format "#[fg=colour255,bg=colour27,bold] #I: #W"  # 現在のウィンドウの内容
# ウィンドウ番号などを中央に表示
set -g status-justify centre
# ステータスバーを1秒毎に描画し直す
set -g status-interval 1

# Prefix キーを Ctrl-b から Ctrl-j に変更
set -g prefix C-j
unbind C-b

# Prefix + vim のキーバインドでペインを移動する
bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R
# Prefix + 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
# Ctrl-o でペインをローテーションしながら移動
bind -n C-o select-pane -t :.+

# Prefix + Ctrl-h/l でウィンドウ切り替え
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

# Prefix + | でペインを垂直分割する
bind | split-window -h -c "#{pane_current_path}"
# Prefix + - でペインを水平分割する
bind - split-window -v -c "#{pane_current_path}"

# マウス操作を有効にする
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
bind -n WheelDownPane select-pane -t= \; send-keys -M


# Plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'    # Prefix + Ctrl-s でセッション保存 Prefix + Ctrl-r でセッションリロード
set -g @plugin 'tmux-plugins/tmux-continuum'
    set -g @continuum-restore 'on'              # tmux スタート時に自動で復元
    set -g @continuum-save-interval '1'         # セッションを保存する間隔を 1 分にする

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

Prefixは個人的に押しやすかったCtrl-jにしました。

基本的な操作はこんな感じです。

コンフィグ 動作
Prefix + h/j/k/l 左・下・上・右のペインに移動(連続入力可)
Prefix + H/J/K/L 左・下・上・右方向に現在のペインを広げる(連続入力可)
Ctrl-o 次のペインに移動(連続入力可)
Prefix + Ctrl-h/l 左・右のウィンドウに移動(連続入力可)
Prefix + | ペインを垂直分割
Prefix + - ペインを水平分割
Prefix + Ctrl-s セッションを保存
Prefix + Ctrl-r セッションを復元
Prefix + I プラグインをインストール
Prefix + U プラグインをアップデート

ペイン移動のCtrl-oが便利でPrefix + h/j/k/lを使ってないのと、ウィンドウ移動のPrefix + Ctrl-h/lにまだなれないぐらいで今の所快適に使えています。 個人的には、研究室の踏み台サーバでの作業がめっちゃやりやすくなったのが大きいです。

最後に

こんな便利な設定あるよ!とかあれば、Twitterなどで教えてほしいです!

このブログにはまだコメント機能とかないので….。(そのうち付ける予定)

参考