web-dev-qa-db-ja.com

tmuxでCtrl + TabおよびCtrl + Shift + Tabをバインドする

私は取得しようとしています ctrl+tab そして ctrl+shift+tab tmuxセッション内で動作するようにバインドします(PuTTYも使用しています)。

私はすでにPuTTYを再コンパイルしなければならないという苦痛を経験しました。 ctrl そして shift 正しく。使用後 ctrl+v、そしてそれを見ることができます^[[27;5;9~および^[[27;6;9~が送信されています ctrl+tab そして ctrl+shift+tab、それぞれ。これらをtmux内の次のウィンドウと前のウィンドウにバインドする方法はありますか?

編集:いくつかの調査の後、これらのキーコードを含めるようにxtermを構成する必要があると考えています。どのように私がそれをやろうと考えていますか?

編集2:だから私はinfocmpを取得して再コンパイルできることがわかりました。追加した

kctab=\E[27;5;9~, kcstab=\E[27;6;9~,

最後になりましたが、今はエラーが出ています。 "エントリは1列目の端末名で始まっていません"

40
dook

tmuxの最近の「リリースされていない」バージョンは、端末がそれらを送信するとxtermスタイルのキーシーケンスを自動的に認識します(terminfoエントリを変更する必要はありません)。次のリリースバージョン(1.8?)でもこのサポートが必要です。 tmuxの適切なビルドで1tmux設定でキーをバインドするだけです:

bind-key C-Tab next-window
bind-key C-S-Tab previous-window

これらのキーの前にプレフィックスキーを入力する必要があります。

(注:~/.tmux.confはサーバーの起動時にのみ処理されます。それに変更を加える場合は、すべてのセッションを終了してサーバーを再起動するか、既存のサーバーにファイルを再処理させる(たとえば)tmux source ~/.tmux.confを使用します。 )

また、tmuxがこれらの(および他の)xtermスタイルのキーシーケンスをtmux内で実行されているプログラムに渡す場合は、xterm-keys windowオプションを有効にする必要があります。

set-option -gw xterm-keys on

(必要に応じて、-wの代わりに-gwを使用して、ウィンドウごとにこれを行うことができます。)


プレフィックスを入力せずにこれらのキーを使用できるようにしたい場合は、代わりに「プレフィックスなし」バインディングを使用できます。

bind-key -n C-Tab next-window
bind-key -n C-S-Tab previous-window

ただし、これは多かれ少なかれtmuxのキーを「専用」にします。 tmux内で実行されているプログラムにこれらのキーを入力するのは困難です(たとえば、tmuxコマンドsend-keys C-Tabを使用する必要があります。通常、これらを送信するにはxterm-keysを有効にする必要がありますxtermスタイルのキーシーケンス)。


Terminfoエントリの編集に関する問題は、おそらく端末タイプを指定する行の後の各行がタブで始まる必要があるためです。タブで始まらない行は、新しい端末エントリの始まりです。技術的には、NL TABシーケンスは、基本的にこのファイル形式の行継続です。各エントリは単一の論理行です。

また、terminfoエントリを再定義する場合は、必ず-xinfocmpおよびticとともに使用して、ユーザー定義機能(一部はかなり標準的)を保持してください。


1 つまり tmux sf.net のGitリポジトリ(クローン可能URL git://git.code.sf.net/p/tmux/tmux-code)の最近のコードから構築されました。

38
Chris Johnsen