@ShuzoN
- ごりごりターミナル使うけどカスタマイズ面倒
- 重い処理中にターミナルが落ちて萎えたことがある
- iTermでターミナル複数起動してる
tmux (てぃーまっくす)とは, 多重端末を
提供するツールのこと.
一つのターミナル内で
複数個の疑似ターミナルを起動できる.
本家 より
tmux is a terminal multiplexer.
it enables a number of terminals to be
created, accessed, and controlled from a single screen.
tmux may be detached from a screen and
continue running in the background, then later reattached.
- クライアント・サーバで動作する
- サーバがターミナルの情報を保持(セッション)
- クライアントはセッションを選びサーバに接続する
- サーバとの接続が切れてもセッションが残っていれば再接続可能
- 異なる環境から同じtmuxセッションへ接続可能
-
1つの端末で複数の端末を起動可能
- 複数の端末を立ち上げずに、tmux上の擬似端末を切り替えてオペレーション可能
-
起動した端末を画面分割して使用可能
- 他のファイルを参照したりログ出力を参照しながらオペレーション可能
-
起動した端末のアタッチ(接続)/デタッチ(一時切断)が可能
- ターミナルが落ちる/sshが切れても再接続出来る -
プロジェクト単位でセッション作れたりする
- 一瞬でプロジェクト切り替えられて便利
参考 : http://kanjuku-tomato.blogspot.jp/2014/02/tmux.html
tmux を使う
mac
$ brew install tmux
linux
https://raw.githubusercontent.com/tmux/tmux/master/README
注意 : <prefix>
のデフォルトは Ctrl-b
// セッション作成・接続
// カレントディレクトリがセッションのルートディレクトリになる
$ tmux
// セッション一覧
$ tmux ls
// セッションからデタッチ (一時切断)
<prefix>d
// セッションへアタッチ (接続)
$ tmux attach -t target_session_id
// セッションの削除
$ tmux kill-session -t target_sessoin_id
1画面を表す単位
分割された画面(端末)を表す単位
セッション作成時
セッション内でウィンドウはいくつも持てる.
ウィンドウ内でペインはいくつも持てる.
// ウィンドウの新規作成
<prefix>c
// ウィンドウの削除
// 以下のコマンド or ウィンドウ内のペインをすべて閉じる
$ tmux killw -t target_window_id
// ウィンドウの名前変更
$ tmux rename-window -t old_window_name new_window_name
or
<prefix>,
// ウィンドウの切り替え
<prefix>n or <prefix>p
<prefix> window_id
//水平分割
<prefix>"
//垂直分割
<prefix>%
//ペインの選択
<prefix>o
//ペインの削除
<prefix>x
~/.tmux.conf
に設定を書く
デフォルトのキーバインドを変えたり
見た目を変えることが出来る
詳細 : ShuzoN/dotfiles/.tmux.conf
# 256色端末を使用する
set -g default-terminal "screen-256color"
# ペインを分割, 削除
bind -n C-\ split-window -h #垂直 : C-|
bind -n C-_ split-window -v #水平 : C--
bind -n C-x kill-pane #削除 : C-x
# マウス操作を有効にする
set-option -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'"
# C-nでwindowを移動
bind -n C-n select-window -n
# クリップボード共有を有効にする
# for mac : brew install reattach-to-user-namespace
set -g default-command "reattach-to-user-namespace -l ${SHELL}"
# emacs キーバインド
# copy mode : <C-b>+[
# 選択開始 : <C-Space>
# コピー : <C-w>
set-window-option -g mode-keys emacs
# ペイン移動/削除
bind-key -T copy-mode C-w send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
bind -n S-left select-pane -L # 左
bind -n S-down select-pane -D # 下
bind -n S-up select-pane -U # 上
bind -n S-right select-pane -R # 右
bind -n C-_ split-window -v # 水平分割: C-|
bind -n C-\ split-window -h # 垂直分割: C--
bind -n C-x kill-pane # 削除: C-x (emaxerは要変更!)
# vim バインド
# コピーモードを設定する
setw -g mode-keys vi
bind-key -T copy-mode-vi v send -X begin-selection # 選択
bind-key -T copy-mode-vi V send -X select-line # 行選択
bind-key -T copy-mode-vi C-v send -X rectangle-toggle # 矩形選択
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy" # コピー
bind-key -T copy-mode-vi Escape send -X clear-selection # キャンセル
# ペインを移動,分割(vimに対応)
# http://takegue.hatenablog.com/entry/2015/01/26/031231
# Smart pane switching with awareness of vim splits
is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?)(diff)?$"'
bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L" # 左
bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D" # 下
bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U" # 上
bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R" # 右
bind -n C-_ if-shell "$is_vim" "send-keys C-_" "split-window -v" # 水平分割
bind -n C-\ if-shell "$is_vim" "send-keys C-\\" "split-window -h" # 垂直分割
bind -n C-x if-shell "$is_vim" "send-keys :q" "kill-pane" # 削除
# ---- status bar ----
# 基本文字色
set -g status-fg colour255 #white
# 背景色
set -g status-bg colour238 #gray
# ---- Window-Status ----
# 中央揃えで配置
set-option -g status-justify "centre"
# basic formatを指定
set-window-option -g window-status-format " #I: #W "
# current window format(blue)
set-window-option -g window-status-current-format "#[bg=colour32,bold] #I: #W #[default]"
# ---- Status-Right ----
# 時刻表示
set-option -g status-right '#[bg=colour240] [%H:%M]'
# ---- Status-Left ----
# 最大長を指定
set-option -g status-left-length 30
# Session名表示
set-option -g status-left "#[bg=colour240] [Session:#S] #[default]"
HOME直下だとgitで管理しにくい.
設定ファイルをdotfilesディレクトリで管理する
// ~/.tmux.conf
source $HOME/dotfiles/.tmux.conf
// ~/dotfiles/.tmux.conf
設定を書く
alias >> .zshrc
# tmux alias
alias -g tls='tmux ls'
alias -g tat='tmux a -t'
alias -g trn='tmux rename-session -t'
alias -g tkl='tmux kill-session -t'
tmuxで快適なターミナル生活を送ろう