Homebrewを使ってインストールしていきます。
Homebrewのインストールには以下を参考。
MacにHomebrewをインストールする
難しいことは割愛して、とりあえずtmuxを起動して、良い感じにカスタマイズしたとこまでを書きます
iTermだと元々画面分割ができますが、tmuxを使うと、枠線に色をつけれたり、アクティブな枠(pane)は別色に出来たりするのでiTermだけよりはイイカンジになります
#環境
Mac : 10.11.5(OS X El Capitan)
iTerm2 : 3.1.3
zsh : 5.0.8
Homebrew : 1.3.5
#インストールしたtmuxのバージョン
tmux : 2.6
#tmuxとは
tmuxは端末多重化ソフトウェアである。
これを使うことでターミナルを複数開くことなく、プログラムを走らせたり出来るし、ペインを使うことで作業の効率化が計れる。
(iterm2だとそこまで複数のターミナルを開くことは辛くないんだが、たぶんまだわかっていない利点があるのだろう。)
tmuxはバックグラウンドでも働くので、ネットワークが切れても再開可能なのが一番の利点かな。もしくはやりたいことごとに使い分けが可能か。
サーバーに入れておくと一つのssh接続で複数の端末が扱えれるし切断しても大丈夫。
tmuxを使うことによるメリット
1つの端末で複数の擬似端末を起動可能
複数の端末を立ち上げずに、tmux上の擬似端末を切り替えてオペレーション可能
起動した仮想端末を画面分割して使用可能
他のファイルを参照したりログ出力を参照しながらオペレーション可能
起動した仮想端末上でコピペが可能
マウスを使わず、tmux内でキーボードのみでのコピペが可能
起動した仮想端末のデタッチ(切り離し)/アタッチ(接続)が可能
tmux実行端末とのネットワークが切れても問題なく、異なる環境から同じtmuxセッションへ接続可能
自分はたまにSSHつかって仮想で作業する程度なので、正直そこまでtmuxをつかうことでメリットが恩恵を得ることはないかもしれないけども
- tmux実行端末とのネットワークが切れても問題なく、異なる環境から同じtmuxセッションへ接続可能
というのはなかなか便利だなって思います
#session,window,pane
こちらも先人の方で分かりやすく図で説明している記事がありますので、そちらを
#関連リンク
ドットインストールにもある(無料会員だと殆ど見れない)
tmux入門
#本題
##tmuxをインストール
$brew install tmux
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
passenger
==> Installing dependencies for tmux: libevent
==> Installing tmux dependency: libevent
==> Downloading https://homebrew.bintray.com/bottles/libevent-2.1.8.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libevent-2.1.8.el_capitan.bottle.tar.gz
🍺 /usr/local/Cellar/libevent/2.1.8: 847 files, 2.2MB
==> Installing tmux
==> Downloading https://homebrew.bintray.com/bottles/tmux-2.6.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring tmux-2.6.el_capitan.bottle.tar.gz
==> Caveats
Example configuration has been installed to:
/usr/local/opt/tmux/share/tmux
Bash completion has been installed to:
/usr/local/etc/bash_completion.d
==> Summary
🍺 /usr/local/Cellar/tmux/2.6: 10 files, 692.5KB
##バージョンの確認
$tmux -V
tmux 2.6
インストール作業はこれだけです!簡単!
##設定ファイル
ホームディレクトリに設定ファイルを作成します
touch ~/.tmux.conf
で、設定ファイルの中身なのですが、とりあえずさっさと良い感じにしたい、場合は先人の方々が設定ファイルを公開しているので参考にすると良いと思います
(ただ、中には今は適用されない設定や書き方が統一されていない場合があるのでその辺は後述します)
例えば
達人に学ぶ.tmux.confの基本設定
等
###設定の確認
####記述の違い
複数人の方の設定ファイルを見ていると、bind
と書いてたりbind-key
と書いてあったりばらつきがあるのですが、
だいたいはエイリアス。
上ではさらっと使ったけど、bindとかはエイリアス。設定ファイルでよく使うものはだいたい以下。
command | alias |
---|---|
bind-key | bind |
unbind-key | unbind |
set-option | set |
set-window-option | setw |
参考URL
tmuxと仲良くなる
(とても分かりやすくて感謝!)
とのことなので、エイリアスに統一した方が良いかもしれません。
###shellの設定
もしzsh等を使っている方でデフォルトshellをzshにしてなかったり
コピーしてきた設定ファイルがBashになってるかもしれないので一応確認しましょう
.tmux.conf
を開き
# Homebrewでいれたzshの場合
set -g default-shell /usr/local/bin/zsh
set -g default-command /usr/local/bin/zsh
# Macに元々入ってるzshの場合
set -g default-shell /bin/zsh
set -g default-command /bin/zsh
# Bashの場合
set -g default-shell /bin/bash
set -g default-command /bin/bash
###prefixの設定
tmuxを扱う際に割と重要なので先に説明と設定の確認を行います
tmuxでコマンドを打つ際にまず2つのコマンドを入力した後に
更にキーを入力します
デフォルトとしてはprefixとして ctrl + b
が設定されています。
prefixは設定が変更可能であり.tmux.conf
で
unbind C-b
set -g prefix C-z
bind C-z send-prefix
(-gをつけると全セッションに対してグローバルな設定になるらしい)
このような書き方をすると ctrl + z
がprefixとなる
Ctrl-bはemacsのキーバインドと被るので他に変更したって方も多いようです
この辺は環境や好みに合わせて下さい。
ですので、以下のような設定の場合
bind - split-window -v
bind | split-window -h
Ctrlキー
とzキー
を入力したあとに、-
を入力すると画面が水平分割でき、
Ctrlキー
とzキー
を入力したあとに、(US keyboardなmacの場合)shiht
と\
を入力すると画面が垂直分割できます。
(個人的に上記の割り当ての方が視覚的にも分りやすい気がする)
因みにCtrlキー
とzキー
つまりprefixは一度同時に入力したあと、指を離してから次のコマンドを入力して下さい。
###廃止されたオプション
####mouse系
tmux 2.1
からmouse
系のオプションに変更があり、1つに纏められたようです。
なので、古い設定ファイルを使用した場合、tmuxを起動時、それらを記述してあった場合警告がでると思います。
Incompatible Changes
====================
* Mouse-mode has been rewritten. There's now no longer options for:
- mouse-resize-pane
- mouse-select-pane
- mouse-select-window
- mode-mouse
Instead there is just one option: 'mouse' which turns on mouse support
entirely.
https://raw.githubusercontent.com/tmux/tmux/master/CHANGES
ですので、これらの警告を消すためには上記の対象となる記述を削除し、
以下の記述を追加することで代わりになります。
set-option -g mouse on
####UTF8の設定
また、tmux 2.2
から
- UTF8 detection how happens automatically if the client supports it, hence
the:
mouse-utf8
utf8
options has been removed.
と明示的なUTF8の設定が不要になったらしいので、れらの警告を消すためには上記の対象となる記述を削除します。
#はじめてのtmuxチュートリアル
長くなりましたが一応大事な設定の部分だけ説明しました。
ではチュートリアルを始めようと思います。
##設定の確認
また設定かよってなるかもしれませんが、同じ動きになるように
設定を合わせて置こうと思います。
以下の設定を.tmux.conf
の一番下等に記述して下さい。
# prefixの変更
unbind C-b
set -g prefix C-z
bind C-z send-prefix
# mouse操作を可能に
set -g mouse ON
# Pre - で縦分割
# Pre | で横分割
unbind %
unbind '"'
bind - split-window -v
bind | split-window -h
##セッション一覧の確認
まずセッションを確認します。
$ tmux ls
まだセッションを作っていないので以下のようになると思います。
(シェルを少し弄ってるので、画面は微妙に違うと思います)
##tmux起動(セッションの作成)
この操作はセッションを新しく開始する
ことです
(今は分からなくてもだんだんなんとなく分かります、きっと)
$tmux
セッションに名前をつけるときは
$tmux new -s セッション名
とりあえず折角なので適当に名前をつけてみると良いかもしれません。
画面が切り替わり、
tmuxの起動
とアタッチしている
状態になります。
(これまた、設定ファイルを弄っているので画面の表示は異なると思います。設定内容は後述します。)
##適当に何か入力する
とりあえず、適当にechoでもします。理由は後から分かります。
$ echo "Hello,tmux"
##デタッチする
今ターミナルと接続しているセッションから切り離します。
デタッチするには prefix , d
つまり、Ctrlキー
とzキー
を入力した後に d
を叩きます。
##再度セッション一覧の確認
再びセッション一覧を確認します。
$ tmux ls
すると今度は先ほどの作成したセッション名が表示されます。
つまりデタッチしてもセッション自体は残っているということです。
##一度ターミナルを閉じてもう一度開いてみる
一度ターミナルを開いて、もう一度 $ tmux ls
をしてみて下さい。
セッションが残っている事が確認できます。
##別のターミナルから一覧を見てみる
今まで開いていたターミナルとは別のターミナルで $ tmux ls
同じセッションが表示されていることが確認できます
##アタッチする
最初に使っていたターミナルから
デタッチしたセッションを再度繋ぎ直します。
これをアタッチと言います。
$tmux attach
($tmux a でも可)
セッションを指定してのアタッチもできます
$ tmux attach -t セッション名
折角なのでセッション名を指定します。
コマンドラインにセッション名の記述が残っていると思うのでそれを参考にして下さい。
上記を叩くと
このように先ほどの操作が残ったままになっている事が分かると思います。
##画面(pane)分割
では、画面分割です。
先ほど設定を記述して頂いたので
まず、
Ctrlキー
とzキー
を入力したあとに、-
を入力します
画面が水平分割されます
次にCtrlキー
とzキー
を入力したあとに、(US keyboardなmacの場合)shiht
と\
を入力します
画面が垂直分割されます。
因みにこれらはPane(ペイン)
と呼ばれます。
##Paneの移動
set -g mouse ON
にしているのでクリックで移動できるのですが、
prefix,o
で順移動ができます・
##Paneの削除
選択中のPaneを削除するにはprefix,x
でを叩くと
kill-pane <pane番号>? y/n
と表示されるのでy
を叩きます
他にもPaneを上下入れ替えたりできますが割愛
(以下とか参考になります)
tmuxチートシート
##セッションの削除
一度デタッチします。
(Ctrlキー
とzキー
を入力後に d
を叩く)
セッションが残っていることが確認できたら
$ tmux kill-server
で、tmuxのプロセスを落とすことも可能ですし
$ tmux kill-session -t 削除するセッション名
で、セッション名を指定して削除することも可能です
ではセッション名を指定して削除をします。
削除のコマンドを叩いた後にもう一度 $tmux ls
でセッション一覧を確認してみましょう。
no server running
となっていれば完了です。
#画面のカスタマイズ
##ステータスバー(status line)の設定
status lineの設定に関しては以下の記事がとても参考になりました。
tmux の status line の設定方法
色の指定はcolor(アメリカ綴り)
ではなくcolour(イギリス綴り)
なので注意
因みに私は
# 描画更新間隔秒。デフォルトは15秒
# 右パネルで時間を秒まで出しているので1秒に設定しました
set -g status-interval 1
# 全体
set -g status-fg "colour255"
set -g status-bg "colour238"
## ステータスバーを上部に表示する
set -g status-position bottom
# 左パネル
#'#S'はセッション名
set -g status-left-length 60
set -g status-left-fg "colour255"
set -g status-left-bg "colour201"
set -g status-left "Session: #S"
#中央
## ウィンドウリストの位置を中心寄せにする
set -g status-justify "centre"
## window-status のフォーマットを指定する。
## '#I'はカレントウィンドウのインデックス、'#W'はカレントウィンドウ名
set-window-option -g window-status-format " #I: #W "
## カレントウィンドウwindow-status のフォーマットを指定する
set-window-option -g window-status-current-format "#[fg=colour255,bg=colour27,bold] #I: #W"
# 右パネル
# ' #h'はホスト名、'%m/%d %H:%M:%S'は月/日 時:分:秒
set -g status-right-length 60
set -g status-right-bg cyan
set -g status-right-fg black
set -g status-right "#h | %m/%d %H:%M:%S"
詳しいことは先ほどのURLに書いているのでそちらを見て頂きたいのですが
formatの書き方として
個別に書く方法と
set -g status-right-bg cyan
set -g status-right-fg black
set -g status-right "#h | %m/%d %H:%M:%S"
纏めて書く方法があります
set-option -g status-right "#[fg= cyan,bg= black] #h | %m/%d %H:%M:%S[default]"
[default]
を書くと属性がリセットされるようです。
以下を参考
attributes に指定できる文字列
##Paneの枠線
自分の場合
# Paneの文字色
set -g pane-border-fg colour232
# Paneの背景色
set -g pane-border-bg colour45
# アクティブPaneの文字色
set -g pane-active-border-fg colour164
# アクティブ Paneの背景色
set -g pane-active-border-bg colour47
#ターミナル中の文字がコピーができない問題
通常コピー方法
vim流tmuxチュートリアル #コピー
##範囲指定ができない
iTermだとマウスで範囲指定をしてコピーができない時があるようです
(自分はできたりできなかったりした)
原因としてマウス機能がONになっていると上手くいかないようです
解決方法として、以下の記事にて必要に応じてマウス機能をON/OFF切り替える
方法が紹介されています
tmux+iTerm2でマウス(タッチパッド)利用時にマウスによるコピペができない問題の対処
ですが、少しコードが古いので(廃止されたオプション参照)以下のように書き直しました。
bind m \
set -g mouse on \; \
display "Mouse: ON"
bind M \
set -g mouse off \; \
display "Mouse: OFF"
これでprefix,m
やprefix,M
で切り替えて対処するしかなさそうです。
また、自分が出来た方法として
コピーしたい範囲の先頭から後尾までしっかりとマウスで範囲指定するとコピーできました。
ちゃんと範囲指定できると後尾がグレーに表示されてました。
またファイル名だけコピーしたい場合はダブルクリックで出来ました
##別のwindowまでコピー範囲に含まれてしまう
tmuxのコピーモードを使わずに任意の範囲選択をする
#設定ファイル(.tmux.conf)の再読み込み
$ tmux source-file ~/.tmux.conf
で可能らしいのですが、
設定の種類や順序によっては、うまくいかなくなるパターンもあります
とのことで、以下の方法でtmuxのプロセスを落とす方が確実のようです
$ tmux kill-server
参考URL
それゆけ!ターミナル部 第11回
tmuxをカスタマイズして使いやすくしよう!
#設定ファイルでのオプション
-r とか -gとか
あまりよく分かってないので間違いなどありましたら指摘して頂けると助かります
オプション | 意味 |
---|---|
-g | 全セッションに対してグローバルな設定になる |
-n | tmuxのPrefixキーをタイプする必要がなくなる |
-t | コピーモードでのキーバインドを指定 |
コピーモードになってから y キーをタイプするとカーソルがある1行がコピーされる設定です。
bind -t vi-copy y copy-line
tmuxのPrefixキー無しに、Ctrl-p だけで直近にコピーされたbufferをペーストします。 (私は、Ctrl-pが他のvimバインドとバッティングしているので bind p paste-buffer として使っています。)
bind -n C-p paste-buffer
参考URL
tmuxコピーモードのキーバインドを簡単なキーに変更してみた
#便利コマンド
##一時的にpaneを拡大したい
resize-pane -Z
で一時的に拡大することができます。
デフォルトコマンドはprefix,z
で選択中のpaneをターミナル全体に拡大できます。
元に戻す場合はもう一度同じコマンドを。
拡大した上でpaneを分割しても、拡大する前の状態から分割されます。
参考URL
tmux で 一時拡大の resize-pane -Z が便利。(ver1.8以降)
何か間違いなどありましたら、コメントなど下さると有難いです
まだtmuxを始めたばかりなので、他に気づいたことなどが出てきたら更新していこうと思います。