helloworlds

not a noun, it's a verb

【tmux】tmux入門 (mac)

今回はtmuxについて記事を書きました。

私的なことを言うと、最近インフラよりの知見を貯めているからです!w

それはそうと、以前からtmuxについては、名前くらいしか知りませんでした。 (というか、この記事を書いているときもtmux歴まだ1ヶ月も経たないくらいです...w)

なので、入門として読んでくださると助かります!

「これからtmux使ってみよう!」

とか、

「基本設定ってどんなかんじになるうだ?」 など、疑問に思っている方向けになります。

では、さっそく基本情報から見ていきます。

※筆者のOSは、OS Xです。

概要

tmuxとは?と、まず思うことでしょう。何ができるのか?などなど...

tmuxとは、 ターミナルマルチプレクサです。 (※できるだけ個人の解釈でなく、公式の文を引用します。)

マルチプレクサとは、簡単に言うと、複数の信号を1つの信号として出力することです。 これは電子回路系のお話なので、もっとわかりやすくいうと、1つのコンソールで複数のコンソールを仮想的に展開できるということ。

多くの端末を作成することを可能にすることで、単一画面からアクセスし、制御することができます。 tmuxは、 画面を表示し、バックグラウンドで実行を続けてから、後で再接続できるとのこと。

よく、macのターミナルやitermなどで作業していると、複数のウィンドウを開いて作業していたことがありますが、 接続が切れてしまったり、どのウィンドウがどこのサーバーだったか見にくくて仕方ないときがありました。

これらをまとめて効率的に作業できるようにしてくれるのが、tmuxといったところ。

さっそく導入してみましょう。

導入

$ brew install tmux

インストールしたら、ヴァージョンを確認してみましょう。 ヴァージョンが確認できたら、正常にインストールできていると思います。

$ tmux -V
tmux 2.8

起動

tmuxの起動は、$ tmux で起動できます。 ローカルで実行するとお馴染みのホームディレクトリが展開されるかと思います。

また、終了するには、$ exit です。

起動が確認できると、ウィンドウ下部に以下(ステータスバー)が確認できるかと思います。

f:id:o21o21:20190123141112p:plain

ここまでではただ同じコンソールを展開しただけなので、tmuxの良さが全然わかりませんねw 少し起動してみましょう。

基本コマンド

起動してから、exitしないで(セッションをデタッチ)ぬけてみましょう。

1, 起動: $ tmux

2, 起動してから: Ctr-b + d

[detached (from session 0)]

3, セッション確認: $ tmux ls

そうすると以下のようなセッションが確認できるかと思います。

0: 1 windows (created Wed Jan 23 14:32:44 2019) [204x62]

どうやら、0がセッション名のようです。(もちろんセッション名は任意の名前に変更可能です。)

4, アタッチ: $ tmux a -t 0

これで再接続できたかと思います。

なんとなーくわかってきたでしょうか。 以下に、基本コマンドを書いておきます。 他にもコマンドはあるので、随時気になるコマンドはググってください!

# セッション一覧表示
$ tmux ls

# セッションアタッチ(再接続)
$ tmux a -t <session_name>

# セッション終了
$ tmux kill-session -t <session_name>

# tmux終了
$ tmux kill-server

tmuxチートシート - Qiita

.tmux.conf

ここからがさらに面白いところです。 tmuxというと、カスタマイズ性にとても優れているようです。 カスタマイズには、.tmux.confというファイルを作成し、そこに設定を記述します。

このファイルはホームディレクトリに作成します。(/Users/<user_name>)

$ touch ~/.tmux.conf

このファイルに記述する内容ですが、けっこう個人に左右されるかと思います。

なので、ここでは必要最低限の設定を紹介します。(ウィンドウの分割など)

あとで、この設定を元に、独自の設定が探せるような状態の設定になればと思います!

# Ctr-bのキーバインドを解除
unbind C-b

# prefixキーをC-qに変更
set -g prefix C-q

# window分割("|": 縦, "-": 横)
bind | split-window -h
bind - split-window -v

# re-size panes by vim movements
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

# move by vim movements
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R


# ######## SETTINGS status line

# status line を更新する間隔を1秒にする
#set-option -g status-interval 1

# status-right の最大の長さを指定
set-option -g status-right-length 120

set-option -g status-right '#H#(get_load_average_tmux)#{battery_icon}#{battery_percentage}#(get_ssid_tmux)%m/%d %a#[default] %H:%M'
# ######## SETTINGS status line

set -g @tpm_plugins '              \
  tmux-plugins/tpm                 \
  tmux-plugins/tmux-battery        \
'


# Initialize tpm
run-shell ~/.tmux/plugins/tpm/tpm

コメントに書いてある通りの設定になります。

ステータスバーの編集も可能です。自分の使いやすいようにカスタマイズしてみましょう。 バッテリー残量や日付などの設定が可能です。一応上記のファイルでは設定しています。

tpm

上記のファイルでは、tpm(Tmux Plugin Manager)という、tmuxのプラグイン管理ツールを使用しています。 インストールも簡単なので、使用してみるのがいいと思います。

インストールは以下。

$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

インストールしたら、.tmux.confプラグインの名前を記述します。

上記ファイルでいうと、set -g @tpm_pluginsの部分ですね。 そして、必ずプラグインを使用するために、run-shell ~/.tmux/plugins/tpm/tpmをファイルの最終行に記述します。

ここまで記述できたら、tmuxを起動し、prefix(上記ファイルでは、Ctr-q) + I でインストールします。

次のtmux起動で適用されます。 また、プラグインのアップデートは、prefix + Uで、 prefix + alt + uで、記述のないプラグインをアンイストールします。

Tips

  • コンソール起動時に、自動でtmuxを起動(.bash_profileに記述)
if [ $SHLVL = 1 ]; then
  tmux
fi

参考

tmuxで快適なターミナル生活を送ろう - Qiita

tmux の status line の設定方法 - Qiita