わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

tmuxのプレフィクスキー変更

 端末マルチプレクサとして,LinuxではGNU Screenを,Windows Subsystem for Linux (WSL)ではtmuxを使用しています.
 プレフィクスキーはそれぞれ,C-pとC-lに設定しています.WSLのtmuxのウィンドウの一つを使って,sshLinuxサーバにログインし,そこからはscreenです.
 最近,「Chrome リモート デスクトップ」を使い始めました.マウス操作やファイルのアップロード・ダウンロードができるので,TeamViewerからの移行を進めています.
 日本語入力を含めキー操作もOKなのは嬉しいのですが,WSLの端末を開いて,tmuxのあと,Ctrlを押しながらLとすると,うまくいきません.Ctrl+Lのキーが,Chromeに取られてしまっています.
 Chromeのショートカットキーの制御は,できそうにないので…
 tmuxのプレフィクスキーを変更することにしました.リモートデスクトップの操作から,Ctrl+Q (C-q)がChromeに取られないのを確認しました.Aの左のCtrlを左手の薬指,Qを中指で押してみて,違和感がありません*1.C-qを採用すしました.
 設定ファイルは,~/.tmux.confです.開いて中身を見る*2と,次のように書いていました.

# プレフィクスキーはC-l (Ctrl+L)
set -g prefix C-l
unbind C-b
bind C-l send-prefix

 ここにC-qを書き足します.

# プレフィクスキーはC-l (Ctrl+L)
set -g prefix C-l
unbind C-b
bind C-l send-prefix
# プレフィクスキーはC-q (Ctrl+Q)も
set -g prefix C-q
bind C-q send-prefix

 リロードすると,C-lもC-qも有効とは,なりませんでした.どうやら「set -g prefix」で指定できるのは1つだけです.最終的に以下のようにしました.

# プレフィクスキーはC-Q (Ctrl+Q)
set -g prefix C-q
unbind C-b
bind C-q send-prefix

 さて,tmuxでC-lをプレフィクスキーにした理由の一つは,C-lを1回押して,画面消去したくなかったからです.C-lを2回で画面消去というのに,慣れてしまっています.
 この操作は,tmuxではなくzshで設定しました.使用するのは,ビルトインコマンドのbindkeyです.

 「bindkey」だけを実行してから一覧を眺め,次に,以下の2つを実行しました.C-lが1回は無反応,2回で画面消去となりました.

bindkey -r '^L'
bindkey '^L^L' clear-screen

 編集ファイルを~/.zshrcに切り替えて挿入し,zshを再起動.うまくいきました.

*1:本記事作成中にhttps://qiita.com/hnw/items/02113da3476f29df768bを見つけました.Ctrl+Qも,候補に挙がっていました.

*2:大部分はhttps://qiita.com/succi0303/items/cb396704493476373edfの設定内容をそのまま使っています.ただしマウス操作を有効にする「setw -g mouse on」は,引き続きコメントにしています.端末をドラッグやダブルクリック・トリプルクリックしてコピーし,端末と別に起動しているEmacsやブラウザなどへ貼り付けるには,有効にしているとうまくいかないのです.