tmuxおすすめプラグインの紹介

この記事は、SLP_KBITその2 Advent Calendar 2016の10日目の記事です。

はじめに

ここで紹介するtmuxのプラグインは、tmuxのバージョンが1.9以上である必要があります。(後述しているtmuxのプラグイン管理マネージャー含め)
(因みにtmuxのバージョンはtmux -Vで確認できます。)

もしプラグインが使えないという場合でも、最後の「おまけ」にはプラグインとは違うものを1つ紹介しているので、よかったら読んでみてください。

おすすめプラグイン

先におすすめのプラグインの動作などを紹介します。
インストール方法はその後の「プラグインのインストール」で紹介しています。

tmux-resurrect

tmux-plugins/tmux-resurrect

このプラグインは現在アタッチしているtmuxのセッションを保存することができるものです。
また、そのセッションを消したとしても、簡単に復元することができます。

デモ

f:id:nechinechi:20161208010734g:plain

デモの中で、左下部分でカーソルをくるくる動かしているときが2回あります。
1度目は3つの全てのウィンドウを見せて、デタッチする直前のタイミング、
2度目はデタッチして今あるセッションを削除し、新たにセッションを作成した後です。

1度目のタイミングでセッションを保存、2度目のタイミングでセッションを復元させており、それぞれのタイミングで左下にメッセージが表示されています。
(メッセージが消えるのが早いので何か表示されたなーくらいしかわからないかも)

操作方法
  • セッションの保存: Prefix+Ctrl-S
  • セッションの復元: Prefix+Ctrl-R
保存されたセッションの情報

デフォルトでは~/.tmux/resurrect下にセッションの情報を保持します。
その中にlastというシンボリックリンクが作成され、復元の際にはそのリンク先のファイルに基づいて、セッションを復元するようです。

$ ls -l ~/.tmux/resurrect/
total 12
lrwxrwxrwx 1 vagrant vagrant  38 Dec  7 19:05 last -> tmux_resurrect_2016-12-07T19:05:05.txt
-rw-rw-r-- 1 vagrant vagrant 105 Dec  7 19:04 tmux_resurrect_2016-12-07T19:04:38.txt
-rw-rw-r-- 1 vagrant vagrant 170 Dec  7 19:04 tmux_resurrect_2016-12-07T19:04:56.txt
-rw-rw-r-- 1 vagrant vagrant 248 Dec  7 19:05 tmux_resurrect_2016-12-07T19:05:05.txt

なので、「2つ前に保存したセッションを復元したい」とかはlastのリンク先を変える必要がありそう...ちょっと面倒ですね。
複数のセッションの保存はできますが、復元の時に手間がかかるので、結果的に複数のセッションを扱う場合には向かないですね。

プラグインではないですが、このtmux-resurrectと似たことができるtmuxinatorというものがあります。
tmuxinatorは複数のセッションを管理しやすいので、こちらがいいという場合もあるかもしれません。(こちらはファイルを記述する必要がある点が少しデメリットかも)
tmuxinatorに関しては「おまけ」のところで紹介しています。

tmux-copycat

tmux-plugins/tmux-copycat

これはtmuxのペイン内から特定の文字列を探すことのできるプラグインです。

デモ

以下のデモでは"test"という文字列を探しています。
検索は下から上に順に行われていきます。

f:id:nechinechi:20161208015309g:plain

操作方法
  • 検索: Prefix+Ctrl-/ -> 検索文字を入力 -> <ENTER>
  • 次の文字列へ進む: n
  • 前の文字列へ戻る: N

プラグインのインストール

プラグインのインストールは、プラグイン管理マネージャーを使って行います。

tmuxにはプラグイン管理マネージャーとしてtpmというものがあります。

tpmのインストールやプラグインのインストールなどは以下のサイトにを見てください。

【tmux】tpmでplugin管理して快適ターミナル生活

おまけ

tmuxinator

tmuxinatorは、先に紹介したプラグインtmux-resurrectと似た機能を持っており、とても便利です。
tmuxのバージョンは1.8が推奨となっているようですが、2.3でも問題なく使えました。
また、tmuxinatorはgemとしてインストールするため、Rubyがインストールされている必要があります。
また、環境変数EDITORSHELLが設定されている必要があるので、注意しましょう。

ここでは基本的な使い方のみ紹介するので、インストール方法や詳細な使い方等は以下のサイトを参照してください。

tmuxのwindow, pane設定を一発で再現できるtmuxinatorが便利

tmuxinatorはtmux-resurrectとは違い、予め記述されたファイルに基づいて、セッションを作成します。
ファイルの記述をしなければならないのは多少面倒ですが、1つのサーバ上で複数のセッションを良く扱うといった場合にはこちらの方がよさそうです。

デモを「セッションの作成」のところに載せてるので、そちらから確認したほうが、tmuxinatorの便利さを早く知ることができると思います。

ファイルの作成

ファイルの作成には、まず

tmuxinator new <セッション名>

を実行します。
実行すると~/.tmuxinatorディレクトリの下にファイルが作成され、そのファイルが自動で開かれます。(既に記述された状態で開かれますが、これを修正していきます)

ファイルの記述

ファイルはyaml形式での記述になります。
例えば以下のように記述したとします。

# ~/.tmuxinator/test.yml

name: test
root: ~/

windows:
  - editor:
      layout: even-horizon
      panes:
        - echo test
        - vim .tmux.conf
  - logs:
      layout: tiled
      panes:
        - pane1:
        - pane2:
        - pane3:

記述はwindows:内に起動するウィンドウを指定し、panes:内では起動するペインを指定します。
ペインの指定ではそのペインで実行するコマンドを指定するか、ペインの名前で指定することができます。
layout:はそのウィンドウ上でのペインの並び方を指定しています。

具体的に、上記の内容では

  • editorウィンドウで
    • ペインを2つ作成
    • echo pane1を1つのペインで実行
    • vim .tmux.confをもう1つのペインで実行
  • logsウィンドウで
    • ペインを3つ作成

といった記述をしています。

1つのペインで複数のコマンドを実行するようにしたい場合は、panes:内を次のように記述します。

panes:
  - pane1:
    - echo 1
    - echo 2
    - echo 3
  - pane2:
セッションの作成

セッションの作成には

tmuxinator <セッション名>

を実行します。
実際にセッションを作成した例が以下です。

f:id:nechinechi:20161208003447g:plain

上のデモでは、tmuxのセッションが何もないところから、記述したファイルに従って、実際にセッションを作成しています。
ファイルに記述したとおりに、ウィンドウ、ペインが作成され、また、コマンドも実行されていることがわかると思います。

おわりに

プラグインとても便利ですね。
他にもたくさんのプラグインがあるので、是非よいものを探してみてください。