TECH::CAMPアドベントカレンダー1日目は、犬系エンジニア こと、さ犬 [Qiita|twitter|github] が担当します!
書くことが前日に決まり、今(2016/11/30 17:11:08)から新しい技術を勉強したり、何か作ったりするのは現実的ではないので、すでに手元にあるものでみなさんの役に立ちそうなことを記事にします。🙉
内容はタイトル通り、 tmux です。すでにエンジニアでやっている人は当然入れてますよね?新米エンジニアの人はまだ知らない人もいるかと思います。
ここではそんなtmuxを使ったことがない人でも基本操作を身につけるようにするために、チュートリアルのように前から順番にステップアップできるようになってます。是非自分の手を動かしてやってみてください!
tmuxとは
みなさんCLI(Command Line Interface)は使っていますか?
CLIは、MacならターミナルやiTerm、Windowsならコマンドプロンプトなどがあります。
(以降ターミナルとします。windowsユーザはコマンドプロンプトに置き換えてください)
CLIと比較されるのが、GUI(Graphic User Interface)があります。これはGoogle ChromeやIllustrator、Finderなどなど、普段マウスでぽちぽち使っているものです。
tmuxはCLIで使うツールです。
何ができるようになるか噛み砕くと、 一つのターミナルウィンドウ上で複数のターミナルを起動する ことができます。
tmuxの強み
最大の強みは、 バックグラウンド起動 です。
ターミナルの画面一つで複数のプロジェクトを同時に進めることができます。また、リモートサーバーにssh接続してtmuxを使うと、途中で接続が切れてもtmuxのプロセスは残るので、途中から再開できるという便利さが素晴らしいです!
今回はローカルで、ターミナルのタブやウィンドウをたくさん開いているそこのアナタ!tmuxを使って解決します。
tmuxをインストール
とりあえずmacでtmuxを起動するので、macにtmuxをhomebrewでインストールします。(windowsの人はごめんなさい)
前提としてhomebrewをインストールしておいてください。
$ brew install tmux reattach-to-user-namespace
これでインストールが完了です。(reattach-to-user-namespaceがないとエラーが出るそうです)
tmuxの概要
tmuxは、 session(セッション) 、 window(ウィンドウ) , pane(ペイン) の組み合わせで構成されます。
ターミナル | tmux |
---|---|
ウィンドウ | session |
タブ | window |
画面 | pane |
tmuxは、それぞれのセッションに名前をつけてバックグラウンドで起動します。
実際にコマンドを打ち込むのは、セッションの中のペインで行います。
例えば、3つのプロジェクトを作業している場合、以下のようにセッションごとに分けることでバックグラウンドで実行しておくことができます。
- session1・・・プロジェクトA
- session2・・・プロジェクトB
- session3・・・プロジェクトC
バックグラウンドにあるセッションをターミナルに取り付けることを、 アタッチ と呼びます。その反対で、セッションをターミナルから切り離すことを デタッチ と呼びます。
ここまででtmuxの概念的な説明は終わりなので、次に使い方を説明します。
tmuxの使い方
以降の記号の表記と意味について先に書いておきます。
ショートカットキー | 手順 |
---|---|
command-c |
commandとcを同時に押す |
command-c 1 |
commandとc同時押し後、両方離してから1を押す |
これから紹介するショートカットキーはデフォルトのキーではなく僕のオススメのショートカットキーです。ご注意ください。
※僕のtmuxは設定ファイルを変更しているので以下のコマンドを実行して設定ファイルをダウンロードしてください。この記事を読み終えたら ~/.tmux.conf
を変更すればtmuxのカスタマイズができます。
$ brew install wget && cd ~ && wget https://raw.githubusercontent.com/sainuio/dotfiles/master/home/.tmux.conf
tmuxの起動
$ tmux
or
$ tmux new -s 任意のセッション名
これはtmuxの起動と同時にアタッチを行います。
また今windowとpaneが一つずつ開かれてる状態です。
prefix
tmuxの操作を行う時、以下のように必ず2つのキーの組み合わせで行います。
prefix, キー
tmuxのデフォルトのprefixは、 ctrl-b
です。
したがって、何か操作を行う時は以下のようにキーを入力します。
ctrl-b key
paneを作る(画面分割)
tmuxでは画面分割が自由にできることも強みです。
縦分割
ctrl-b v
(v・・・vertical)
(tmuxデフォルトキーバインド: ctrl-b %
)
横分割
ctrl-b w
(w・・・wide)
(tmuxデフォルトキーバインド: ctrl-b "
)
この時点で以下のような構成になってます。
paneの移動
上へ
ctrl-b k
(k・・・vimの上)
右へ
ctrl-b l
(l・・・vimの右)
下へ
ctrl-b j
(j・・・vimの下)
左へ
ctrl-b h
(h・・・vimの左)
paneの幅調整
左右
ctrl-b shift-[l連打(右) or h連打(左)]
上下
ctrl-b shift-[k連打(上) or j連打(下)]
windowの作成
ctrl-b c
(c・・・create)
(tmuxデフォルトキーバインドも同じ)
この時点ではこんな感じです。
windowの移動
右へ
ctrl-b ctrl-l
(tmuxデフォルトキーバインド: ctrl-b n
)
左へ
ctrl-b ctrl-h
(tmuxデフォルトキーバインド: ctrl-b p
)
windowの名前変更
ctrl-b ,
(tmuxデフォルトキーバインドも同じ)
デタッチ
デタッチ
とは今ターミナルと接続しているセッションを切り離す行為です。
ctrl-b d
(d・・・detache)
(tmuxデフォルトキーバインドも同じ)
セッション一覧を表示
$ tmux ls
=> 0: 2 windows (created Wed Nov 30 20:16:46 2016) [146x43]
この場合 0
がセッション名です。
アタッチ
アタッチ
とはバックエンドで起動しているセッションをターミナルに接続する行為です。
ターミナルで以下のコマンドを実行します。
$ tmux a -t セッション名
これでセッションに復帰できます。
セッションの名前を変更
$ tmux rename -t 変更前のセッション名 変更後のセッション名
例)
$ tmux ls
=> 0: 2 windows (created Wed Nov 30 20:16:46 2016) [146x43]
$ tmux rename -t 0 hoge
新しいセッションを名前付きで作成
$ tmux new -s セッション名
これを実行したらこのような状況になります。
別のセッションに移動する
以下のショートカットキーを入力すると、セッション一覧を表示する新しい画面が表示されます。
移動したいセッションのインデックス番号を入力すればセッション間の移動も簡単に行えます。
また、選択バーを上下に移動させて、エンターキーでセクション移動も可能です。
ctrl-b s
(tmuxデフォルトキーバインドも同じ)
ターミナルを閉じてみる
tmuxはバックグラウンドで処理を保持しているのでターミナルを閉じてもセッションは残ります。
試しに、ターミナルを終了(command-q)をして完全に閉じてしまってください。
そのあともう一度ターミナルを起動しましょう。
$ tmux ls
すると、セッションが残ってます!
セッションにアタッチしてみましょう。
$ tmux a -t セッション名
しっかり残ってますね!
(※ただしpc自体を再起動すると当然ですがセッションは消えます)
コピー
※これはvimの知識が必要になります。
実はtmux内ではマウスで使うことを想定されていないので、コピーもコマンドで行う必要があります。
ctrl-b [
これでコピーモードに切り替わります.
h
(左), j
(下), k
(上), l
(右)で移動ができます。
v
でvisualモードになり、y
でコピーができます。
コピーしたものは、 command-v
でペーストができます。(tmuxデフォルトキーバインド: ctrl-b ]
)
ここまで終えると大体の基本操作は終了です。
次に削除系のコマンドを紹介します。
セッションの削除
$ tmux kill-session -t 削除するセッション名
ウィンドウの削除
$ tmux kill-window -t 削除するウィンドウ名
ペインの削除
$ tmux kill-pane -t 削除するペイン名
(番外編)時計を表示
これはお好みでw
ctrl-b t
(tmuxデフォルトキーバインドも同じ)
(番外編)ステータスバーにwifiやバッテリー情報を表示する
以下のコマンドで必要なファイルをダウンロードすれば設定できます。
$ cd ~ && rm ~/.tmux.conf && wget https://raw.githubusercontent.com/sainuio/dotfiles/master/home/.tmux.conf && wget https://raw.githubusercontent.com/sainuio/dotfiles/master/home/get_volume_tmux.sh && wget https://raw.githubusercontent.com/sainuio/dotfiles/master/home/getwifi.sh
この後にtmuxを再起動すれば以下の画像のように右上のステータスバーのところに反映されてると思います。
終わり
vimを使ってる僕の好みのキーバインドを勝手に押し付けてすみません。
ただこのキーバインドすごくやりやすくてオススメなので、もしよかったら ~/.tmux.conf
の中身を確認してみてください 💕
もし設定をリセットしたければ、 ~/.tmux.conf
を削除すれば設定はリセットされます!
!
tmux習得して来年からまた頑張りましょう!