カテゴリー
Microsoft

tmux を使い始めて最初の .tmux.conf

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 でマウススクロールできるようにする

次を .tmux.conf に書けばよかったです。かなりの範囲をカスタマイズできそうだ、とこの時感じました。

# マウス操作を有効にする
set-option -g mouse on

あたらしいウインドウやペイン作成にカレントディレクトリを引き継ぐ

OS によって挙動を変える。 .tmux.conf 内で、 if を使う

WSL の Vim でヤンクしたテキストをクリップボードに共有する .vimrc – oki2a24 でも行いましたのと同じ理由です。 WSL は Linux だけれども、クリップボードにコピーするには、 clip.exe を使いたいという内容です。

そのためには、環境を判定できなければなりませんが、できるようで安心しました。

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"\
'

コピーモードでコピーした時、クリップボードにもコピーする

次が参考になりました。バージョンによって書き方が変わってきているため、苦労しました。

書いた内容は、すぐ上に記載してあります。

おわりに

徐々に、もっと、深堀していこうと思います。

以上です。

コメントを残す