Skip to content

Latest commit

 

History

History
375 lines (255 loc) · 8.86 KB

PITCHME.md

File metadata and controls

375 lines (255 loc) · 8.86 KB

a_guide_of_tmux

@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. 

あなたのターミナルこんなことになってませんか??


うわっ, 私のターミナル...多すぎ...

image


iTerm でターミナル複数起動

image


tmuxの雰囲気をつかむ


tmuxはこんなの

image


tmuxの仕組み


tmuxの仕組み

  • クライアント・サーバで動作する
  • サーバがターミナルの情報を保持(セッション)
  • クライアントはセッションを選びサーバに接続する
  • サーバとの接続が切れてもセッションが残っていれば再接続可能
  • 異なる環境から同じtmuxセッションへ接続可能

大枠のイメージ

tmux_overview 001


セッションのライフサイクル

image


tmuxを使うと嬉しいこと

  • 1つの端末で複数の端末を起動可能

    • 複数の端末を立ち上げずに、tmux上の擬似端末を切り替えてオペレーション可能
  • 起動した端末を画面分割して使用可能

    • 他のファイルを参照したりログ出力を参照しながらオペレーション可能
  • 起動した端末のアタッチ(接続)/デタッチ(一時切断)が可能
      - ターミナルが落ちる/sshが切れても再接続出来る

  • プロジェクト単位でセッション作れたりする
      - 一瞬でプロジェクト切り替えられて便利

参考 : http://kanjuku-tomato.blogspot.jp/2014/02/tmux.html


tmuxを使ってみる


インストール

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画面を表す単位

2017-07-09 19 22 02


ペイン

分割された画面(端末)を表す単位

2017-07-09 21 33 13


セッション, ウィンドウ, ペインの関係

セッション作成時

tmux_initial_pane 002


セッション, ウィンドウ, ペインの関係

セッション内でウィンドウはいくつも持てる.
ウィンドウ内でペインはいくつも持てる.

tmux_initial_pane 001


ウィンドウの作成, 削除, 表示切り替え

// ウィンドウの新規作成
<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によるカスタマイズ

~/.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]"

dotfilesで.tmux.confを管理する

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で快適なターミナル生活を送ろう