本ブログでは、
主にVim/Neovim系の記事が多いのですが、
Vim/Neovimには、どんなときにも一緒に戦う相棒が存在します。
それがTmuxです。
Tmuxだけでもダメですし、
Vimだけでもだめです。
Tmux +Vimでこそ、
真のターミナルVim環境が完成します。
本記事では、そんなVimの相棒のTmuxについて、
インストールから設定の詳細まで解説します。
動画でご覧になりたい方は、
下記をご参考ください。
Tmuxとは?
まず、Tmuxとは何者でしょうか?
よく端末多重化ソフトウェアと称されることが多い、Tmux。
ぶっちゃけよくわかんないですよね。
平たく言うと、ターミナルを便利にしてくれるもので、
分割とか、新しいウインドウとかの管理を楽にしてくれ、
使いこなせば、ディレクトリごとにターミナルを管理といったことも容易にしてくれます。
https://github.com/tmux/tmux/wiki/Getting-Started
VimはVSCodeみたいに、
簡単にターミナルをマウスでぐにゅっと引っ張り出してくる機能はないので、
ターミナルの相棒みたいなやつが便利です。
(プラグインのtoggletermで近いことはできますが。参考記事)
このターミナルの相棒がTmuxなのですが、
これを入れると、Vim単体ではできないことも実現できるようになり、
統合的なターミナルVim環境が完成します。
以下、インストールから操作まで解説していきます。
Tmuxのインストールから起動
Macの場合、Homebrewでインストールできます。
brew install tmux
Homebrewについては、
下記の記事でも言及しているので、
よろしければご参考ください。
-
参考【Mac初期設定完全版】Webエンジニアが最初に導入するアプリや設定を公開
Macbookの初期設定 Macbookを買ったり、初期化した際、デフォルトのままだと何かと使いにくいと思ったことは無いでしょうか? 下にうざいDockはあるし、カーソルはめっさ遅いし、変なアプリはた ...
続きを見る
さて、インストールしたら、
早速起動してみます。
そのままtmuxというコマンドを打ちます。
tmux
下にステータスバーが追加されました。
もう、私は何年もTmuxを使用しない生活をしていません。
このステータスバーで優しく包み込んでくれるターミナルじゃないと、
ダダをこねるようになってしまいました。
さて、具体的な使い方です。
試しに下記のコマンドを打ってみます。
tmux ls
こんな感じで、
windowsの一覧が表示されていれば、tmuxが起動できています。
ちなみに、tmux lsコマンドは、
セッションの一覧を表示するコマンドです。
(セッションについては、後で解説します)
Tmuxの設定ファイルは、
~/.tmux.confというもので、
設定したら、
tmux source-file ~/.tmux.conf
で設定を読み込むことができます。
以下、細かい概念の解説や、
設定について深掘りしていきます。
Tmuxの概念
TmuxもVimと同じで、
奥が深く、極めようとするとそこそこ学習コストがかかります。
ただ、最低限便利なものを使うだけであれば、
そこまでハードルは高くありません。
Tmuxの概念も、全部を覚えるよりは、
必要最低限知っておけばおそらく十分かと思います。
下記では、必要最低限知っておきたい概念を解説します。
セッション
これは、平たく言うとウインドウの集合体のようなものです。
イメージとしては、ターミナルのウインドウを複数開いているような感じです。
先程、tmux lsコマンドを紹介しましたが、
これはこのセッションを確認するコマンドです。
上記の画像だと、0セッション、
3セッション、5セッションの3つのセッションがあることがわかります。
セッション名は、それぞれ0、3、5ですね。
デフォルトだと、このように数字がセッション名になるので、
ちょっとわかりにくいですよね。変更することもできます。
変更方法としては、いくつかありますが、
よく使うのは、プレフィックスキー(後で解説します) + $です。
これを押すと、
下記のように名前を変更できるモードに入ります。
あとは、好きなセッション名を入力して
エンターを押せば変更できます。
コマンドで変更することも可能で、
tmux rename-session -t 古いセッション名 新しいセッション名
のような感じでも変更できます。
あとは、プレフィックスキー + :でTmuxのコマンドを打つことができるモードに入れますが、
そこで、
:rename-session <name>
でも変更できます。
(ちなみに、:renameと省略することもできます)
使いやすいものを使えばいいかなと思います。
さて、こうしたセッションですが、
Tmuxで一度に入ることができる(アタッチ)、セッションは一つのみです。
なので、セッションを複数作っても、
そのターミナルに表示できるのは、
一つのセッションのみという特徴があります。
ターミナルのウインドウ集合体に似ているとはいえ、
ターミナルのウインドウは、複数ひらっきぱなしにできますが、
Tmuxは一つしかひらっきぱなしにできないので、
(あくまで一つのターミナルウインドウに対してという意味)
ウインドウの集合体とは少々異なる側面もあります。
ただ、セッションによって、
例えば、セッション名 Rubyでは、
Rubyの案件の環境を構築し、
セッション名 Pythonでは、
Pythonの案件の環境を構築し、
分けることができるのが大きなメリットです。
Rubyのセッションに接続しているときは、
Pythonの環境は全く見えません。
独立しているのがメリットですね。
イメージとしては、
それぞれのプライベートターミナル環境を作っていくような感じです。
ウインドウ
お次は、ウインドウです。
ややこしいのですが、Tmuxでのウインドウは、
一般的なイメージのウインドウとは異なり、
タブのようなイメージです。
平たく言うとペインの集合体のようなものでして、
ターミナルのタブを複数開いているというのが近い状態だと思います。
まあ、一つの画面のような感じですかね。
ウインドウの一覧は、
プレフィックスキー + wで確認できます。
上記の場合、4windowあることが確認できます。
イメージとしては、VSCodeでファイルを開きすぎたときに、
そうしたファイルの一覧がウインドウみたいな感じですね。
ウインドウ名を変えたいときは、
プレフィックスキー + ,で変更するモードに入れます。
デフォルトだと、zshのような、
シェルの名前になっていることが多いかと思うので、
気に入らなかったら変更しましょう。
ペイン
これは、平たく言うと、ウインドウの中にある個々のターミナル画面のことです。
例えば、このように、4分割された
ターミナルがあるとすると、この4分割された一つ一つ、
すなわち4つの画面がペインであり、
このウインドウは4つのペインを持っているということになります。
中央下のstatus lineにある、
1:zsh 2:zshとかは、ウインドウで、
この4分割のやつは、ウインドウ3になります。
つまり、セッションの場合は、
4つのウインドウをもっていますね。
アタッチ
さて、Tmuxの画面に関する用語は、
上記のような感じです。
次に操作の用語です。
まずは、アタッチですね。
既に少し出てきましたが、
これは、セッションに接続することを指します。
最初にターミナルを開いた状態だと、
tmuxに接続していないかと思うので、
tmux lsで現在のセッションを確認して、
入りたいセッションに対して、
tmux a -t セッション名
を実行すると、そのセッションに接続して、
いつものようにtmuxのステータスバーにお会いできるというわけです。
デタッチ
これに対して、セッションから抜ける用語もあります。
デタッチです。
デタッチとは、セッションを破壊することなく、セッションから抜けることです。
本来であれば、プレフィックスキー + dでできますが、
私の場合、そこまで頻繁にデタッチするわけではないので、
画面分割のショットカットキーに割り当ててしまっています。
そのような場合、プレフィックスキー + dと打ってもデタッチできないので、
プレフィックスキー + : detach-clientと入力してデタッチします。
余談ですが、tmuxのメリットの一つとして、
ターミナルクラッシュに強いというのがあります。
tmuxを使っていなければ、
突然ターミナルがクラッシュした場合、
カレントディレクトリの場所や、Neovimとかもすべて閉じられてしまいますが、
tmuxだと、上記のクラッシュはデタッチになるので、
開き直して、アタッチすれば、
すぐ復元できるというメリットがあります。
なので、デタッチに関しては、
ターミナルを終了するでも、
概ね似たような結果になるかなと思います。
(ターミナルクラッシュに関して言えば、
稀にセッションが吹き飛んで、復元できないこともないわけではないので過信は禁物だが)
プレフィックスキー
「さっきから、当然のようにプレフィックスキーって
出てくるけど、これって何なん?」
申し遅れました。説明していなかったですね。
プレフィックスキーとは、tmuxの各種操作をする上で必要となるキーのことで、
ショットカットみたいなものです。
基本的に、Tmuxの場合、先程のデタッチのように、
プレフィックスキー + 何かというのがほとんどで、
プレフィックスキーと何を押すかで適用する操作を変えていきます。
そのため、このプレフィックスキーは、
tmuxを使う上では一番操作するキーになるのですが、
デフォルトだと、プレフィックスキーは、
Ctrl + bになっています。
ただ、これはめちゃくちゃ押しづらいので、変更したほうが良いかなと思います。
変更方法としては、
set -g prefix C-s
unbind C-b
このような記述を、tmuxの設定ファイルに書き込みます。
tmuxの設定ファイルは、ホームディレクトリ直下の、
.tmux.confです。
上記の場合、プレフィックスキーをCtrl + sに変更しています。
C-の部分は、Ctrlということですね。
Tmuxで最低限覚えておきたい概念は、
これぐらいでしょうか。
あとは、使って覚えましょう。
Tmuxチートシート
tmuxで頻繁に使う操作は、
実はそこまで多くはないので、
一旦、ここにあるやつだけ使うでも
かなり便利になります。
操作 | キーバインド |
新規ウインドウの作成 | プレフィックスキー + c |
次のウインドウに移動 | プレフィックスキー + n |
前のウインドウに移動 | プレフィックスキー + p |
指定した番号のウインドウに移動 | プレフィックスキー + ウインドウ番号 |
ウインドウ一覧表示 | プレフィックスキー + w |
ウインドウ名変更 | プレフィックスキー + , |
コピーモード開始 | プレフィックスキー + [ |
デタッチ | プレフィックスキー + : detach-client |
セッション名変更 | プレフィックスキー + $ |
現在のペインを一時的に最大化(戻すときも同様のキー) | プレフィックスキー + z |
ペインのサイズ変更(上は-U、下は-D、右は-R、左は-L) | プレフィックスキー + :resize-pane -U(D,R,L) 数字 |
サスペンド | プレフィックスキー + Ctrl + z |
時計を表示 | プレフィックスキー + t |
あとは、ペイン関係のキーがありますが、
デフォルトのキーバインドは、
ちょっと押しづらいので、
私は変更しています。
bind d split-window -h
bind v split-window -v
bind s choose-tree -Zw
bind r source-file ~/.tmux.conf \; display "Reloaded!"
# vimのキーバインドでペインを移動します。
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind dは、プレフィックスキー + dのことで、
上記の場合、縦に分割します。
bind vは横に分割し、
bind sは、ウインドウ一覧を表示します。
bind rは、.tmux.confファイルを再読み込みします。
あとは、vimのおなじみのキーバインドで、
ペインを移動できるように設定しました。
-
あわせて読みたいターミナルインストールから始めるVim/Neovim8つの基本キーバインド
本記事では、0からVimやNeovimについて、解説していきます。 Vimって何?っていう人や、ターミナルもほとんど使っていないという人でも、最低限これだけは知っておきたいVimのキーバインドを本記事 ...
続きを見る
-
あわせて読みたい【Vim/NeoVimマクロ】作成/保存/追記/定義/格納場所など使用例も解説
本記事では、Vimのマクロについて解説します。 マクロは、Vimの機能の中でも、応用的なトピックだと思いますが、使いこなせると便利なので、本記事で作成、保存、定義、格納場所といった基本事項を解説します ...
続きを見る