tmux を使ってみようと思った理由・使ってよかったこと
- 15年目のVim | POSTD で存在を知り、興味を持った。
- ターミナルアプリによって、キーバインドが異なったりする。毎回覚える手間をなくしたい。
- ターミナルアプリに関係なく、同じ操作環境を実現できる。例えば、ターミナルアプリを複数立ち上げたり、ターミナルアプリで画面を左右上下に分割する代わりに、ターミナルアプリで立ち上げた Bash から tmux を立ち上げることによって、それらを実現できる。
- ターミナルアプリが突然終了してしまっても、ターミナルアプリをもう一度立ち上げて
tmux a
などとすれば完全に突然終了する前の状態に戻る。
tmux の辛いところ
- 覚えることがたくさん。セッション、ウインドウ、ペインの概念。それらを操作するためのコマンド、キー入力。
- コピーモードって何?
- マウスでスクロールができない。 tmux を終了すると、スクロールできる。
- 文字列を選択しても、コピーされない。 tmux を終了すると、コピーできる。
tmux についてお勉強ページ
- 最初の入門としてよかった
- 設定について、丁寧に解説していてよかった
.tmux.conf の設定反映
次のコマンドで、 tmux のセッションをすべて終了して再起動しなくとも、設定の変更内容を確認できました。
tmux source-file ~/.tmux.conf
現在の .tmux.conf
# マウス操作を有効にする
set-option -g mouse on
# 256色端末を使用する
set-option -g default-terminal "screen-256color"
# コピーモードのキーバインドはvi
set-window-option -g mode-keys vi
# カレントディレクトリを引き継いで、新しいウインドウ作成
bind c new-window -c '#{pane_current_path}'
# カレントディレクトリを引き継いで、ペインを左右に分割
bind % split-window -h -c '#{pane_current_path}'
# カレントディレクトリを引き継いで、ペインを上下に分割
bind '"' split-window -v -c '#{pane_current_path}'
# WSL でコピー時、マウスドラッグ時にクリップボードにもコピー
if-shell "uname -a | grep Microsoft" '\
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "clip.exe"; \
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "clip.exe"; \
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "clip.exe"\
'
tmux で 256色端末を使用する
よくわかっていません。WSL 上では、問題がないように感じます。調べてみると、もう 1 行足すとよいようですが、問題が起きてからとしようと思います。
- [tmux screen-256color] で検索
tmux でマウススクロールできるようにする
次を .tmux.conf に書けばよかったです。かなりの範囲をカスタマイズできそうだ、とこの時感じました。
# マウス操作を有効にする
set-option -g mouse on
あたらしいウインドウやペイン作成にカレントディレクトリを引き継ぐ
- 【TMUX】新しいWindowを開いたときに、直前のカレントディレクトリを引き継ぐ設定 – Qiita
- tmux1.9aで新しいウィンドウ作成時に、HOMEディレクトリになってしまう現象 – Qiita
OS によって挙動を変える。 .tmux.conf 内で、 if を使う
WSL の Vim でヤンクしたテキストをクリップボードに共有する .vimrc – oki2a24 でも行いましたのと同じ理由です。 WSL は Linux だけれども、クリップボードにコピーするには、 clip.exe を使いたいという内容です。
そのためには、環境を判定できなければなりませんが、できるようで安心しました。
- tmux の設定で if を使う(ウィンドウが一つの時と複数の時で異なる動作をするキーバインドの設定) – Qiita
- My Future Sight for Past: Copy to clipboard in tmux on Linux, Cygwin, Mac
if-shel 'OS 判定シェルコマンド' '真のときの設定' '偽のときの設定'
という形で書けます。今回は、偽のときの設定は行わず、真のときの設定を複数書く、形で利用しました。
# WSL でコピー時、マウスドラッグ時にクリップボードにもコピー
if-shell "uname -a | grep Microsoft" '\
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "clip.exe"; \
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "clip.exe"; \
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "clip.exe"\
'
コピーモードでコピーした時、クリップボードにもコピーする
次が参考になりました。バージョンによって書き方が変わってきているため、苦労しました。
書いた内容は、すぐ上に記載してあります。
おわりに
徐々に、もっと、深堀していこうと思います。
- 15年目のVim | POSTD 著者の dotfiles の設定を眺めていて、 tmux のプラグインを使うともっと楽できそう。特にコピー系
- プレフィックスキーを変えるかもしれない。 Ctrl + B は遠いです。。。Ctrl + S がよさそう、 Vim と衝突しないようなので。 Ctrl + B は衝突している。。。
- tmux でクリップボードからペースト。 WSL では、ターミナルの機能でペーストしています。つまり、環境に依存しています。 tmux のやり方に統一できれば、覚えることがひとつ減らせます。
以上です。