私はさまざまなtmuxキーバインディング設定を試した結果、次のことがわかりました。
tmux設定を再ロードすると(tmux内で)、一度ロードしたキーバインディングはロードされたままになります。 (私が知っている)この問題を解決する唯一の方法は、すべてのtmuxセッションを終了して再開することです。したがって、tmuxは以前にロードされたすべてのキーバインディングを覚えて再起動したり、明示的にバインディングを解除したりする必要があります。
これを再現するには:
- オープンタイプターミナル(A)
- tmuxの起動
- キーバインディングに時計が表示されていることを確認(押す
PREFIX C-t
) PREFIX ?
リストからキーバインディングを表示するにはタップします。- 編集する
~/.tmux.conf
- 追加キーバインディング(
bind C-t display "Keybinding C-t"
) - tmux 構成の再ロード(
PREFIX : source-file ~/.tmux.conf
) - キーバインディングが有効であることを確認してください。 (押してください
PREFIX C-t
) PREFIX ?
リストから新しいキーバインディングを表示するには、このボタンを押します。~/.tmux.conf
再編集- キーバインディングを削除します(したがって削除してください
bind C-t display "Keybinding C-t"
) - tmux 構成の再ロード(
PREFIX : source-file ~/.tmux.conf
) - キーバインディングが機能していることを確認しましたが(押します
PREFIX C-t
)、それでも「キーバインディングCt」と表示されます。 PREFIX ?
リストにまだ新しいキーバインディングを表示するにはクリックしてください。- tmux シャットダウン
- tmuxと入力してください
- 元のキーバインディングが再び機能していることを確認し(押す
PREFIX C-t
)、時計を再表示する必要があります。 PREFIX ?
リストから削除された新しいキーバインディングを表示するにはクリックします。
私の質問:ロードされたすべての設定を「忘れて」ロードするようにtmuxに指示する方法はありますか.tmux.conf
?
答え1
tmux(1)
マニュアルページによると、unbind-key -a
これがあなたが探しているものです。
tmux
実行中のサーバーはすべてのセッションが閉じられた後にのみ終了し、キーバインディングはサーバーごとに適用されます。したがって、バインディングが作成されると、すべてのクライアント分離で持続します。
つまり、unbind-key -a
構成ファイルの最上部に配置すると、構成が再ロードされたときに必要な操作を実行する必要があります。すべてをバインド解除し、最初からバインディングを開始します。または、変更がマイナーな場合は、変更したい項目のみをバインド解除します。
答え2
正しいソリューション(著者:Peter
unbind-key -a
そのため、@peterphは次のことを行う正解を提示しました。 (man tmux)
-a が存在すると、すべてのキーバインディングが削除されます。
考えられる解決策
(私にとって)問題は、「すべて」が実際にすべてを意味するということです。tmuxに付属のキーバインディングを含める。コマンドをすぐに実行すると、unbind-key -a
tmuxにはキーバインディングがなくなり、コマンドモードに入ったり、デフォルトでは何もできません。
これに対する私の(やや醜い)修正は次のとおりです。
.tmux.reset.conf
すべてのキーバインディングを削除し、デフォルトでtmuxですべてのキーバインディングを再バインドするキーを作成します。- 上部からソースをリセット
.tmux.conf
私のもの.tmux.conf
:
# always load the reset file first
source-file ~/.tmux.reset.conf
私のもの.tmux.reset.conf
:
# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key " split-window
bind-key # list-buffers
bind-key $ command-prompt -I #S "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key ' command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I #W "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key ; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-session
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key ~ show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key -r M-1 select-layout even-horizontal
bind-key -r M-2 select-layout even-vertical
bind-key -r M-3 select-layout main-horizontal
bind-key -r M-4 select-layout main-vertical
bind-key -r M-5 select-layout tiled
bind-key -r M-n next-window -a
bind-key -r M-o rotate-window -D
bind-key -r M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R
(私が知っている限り)tmuxキーテーブルで使用できるように見えますが、新しいキーテーブルを追加することはできません。
答え3
現在、キーバインディングをデフォルト値にリセットする直接的な方法はありません。基本バインディング(in)の初期化はkey_bindings_init()
一度行われます。マルチプレクササーバーが最初に起動されてからserver_start()
個々のキーをリセットするメカニズムはありません。
プロファイルから削除されたカスタムバインディングで以前に上書きされたデフォルトバインディングをリセットするためにプロファイルの動作を取得する意図したシナリオの場合、設計されたアプローチは合理的です(残念ながら冗談ですが)。その後unbind-key -a
、再びすべての「デフォルト」バインディングを設定してからカスタムバインディングを構築します(一部は「デフォルト」バインディングをオーバーライドできます)。
list-keys
サーバーの現在のバインディングは*コマンドを使用して抽出できます。これは提案されたファイルを作成/維持するのに役立ちますが、.tmux.reset.conf
抽出する方法が必要です。基本代わりにバインディング現在の製本。
※場合によっては、list-keys
現在直接的にはご利用いただけません。セミコロンをバインドするには、次のような解釈を防ぐためにバックスラッシュでセミコロンをエスケープする必要があります。マルチプレクサコマンド区切り文字と内部的に二重引用符を使用する引数を持つバインディング一つ引用符(デフォルトのバインディングは何もしません)は内部的に二重引用符で示されます。ダブル引用する
デフォルトのバインディングを取得するには、出力をキャプチャできるように最小限の構成(つまり、カスタムバインディングなし)を含むステージングサーバーが必要ですlist-keys
。数量制限なしマルチプレクササーバーを実行できますが、各サーバーは異なるソケットパス名を使用する必要があります-L
。-S
マルチプレクサオプションを使用してソケット名($TMPDIR/tmux-$UID
ソケットパス名または完全なソケットパス名)を指定できます。したがって、名前付きソケットで新しいサーバーと通信(または起動)するには、temp
次のコマンドを使用します。
tmux -L temp …
yours を無効にするには、読み込むように指示.tmux.conf
できます(常に空の特殊ファイル)。-f
/dev/null
tmux -f /dev/null -L temp …
ノート/etc/tmux.conf
処置: これらのファイルが存在する場合、処理を中断しません。この「システム構成ファイル」へのパスはハードコーディングされており、それをバイパスするオプションはありません(コードがパッチされない限り)。
通常、サーバーを実際に開始するにはコマンドが必要ですnew-session
が、セッションは必要ではなく、照会する初期化サーバーのみが必要です。このstart-server
コマンドの目的は、セッションを作成せずにサーバーを起動することです。
tmux -f /dev/null -L temp start-server …
「query」コマンドを追加するだけです(list-keys
この場合):
tmux -f /dev/null -L temp start-server \; list-keys
ノート:シェルがそれをシェルコマンド区切り文字として扱うのを防ぐには、セミコロンをエスケープまたは引用する必要があります。マルチプレクサコマンド区切り記号。
保持するセッションがないため、コマンドを実行するとサーバーは自動的にシャットダウンしますlist-keys
。
したがって、このコマンドを使用すると、一時的にファイルを削除したり(デフォルトのバインディングのみを表示したり)、既存のサーバーをシャットダウンすることを.tmux.reset.conf
心配することなく、ほとんどのコンテンツを作成できます。.tmux.conf
コマンドが同期の場合は、静的ファイル(yours)を使用する代わりに、設定ファイルrun-shell
(後で使用する一時ファイルとしてキャプチャ)にこれらの呼び出しを含めることができます。これにより、常にデフォルトバインディングの現在のバージョンが使用されます。source-file
.tmux.reset.conf
マルチプレクサ(デフォルトのバインディングは時々変わります)。残念ながら、このコマンドの完了は、run-shell
現在の後続のコマンドに関して非同期です。コマンドに続くコマンドは、run-shell
生成されたプロセスがrun-shell
完了する前に実行されることがよくあります。
答え4
状況をよく説明する他の回答も参照してください。私もここにいるマルチプレクサ1.8tmux.reset.confと互換性があるため、出力をコピーした後にいくつかの修正が必要でしたtmux -f /dev/null -L temp start-server \; list-keys
。特にいくつかを引用しなければならない。
# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key '"' split-window
bind-key '#' list-buffers
bind-key '$' command-prompt -I "#S" "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key "'" command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I "#W" "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key \; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-tree
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key z resize-pane -Z
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key '~' show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key M-1 select-layout even-horizontal
bind-key M-2 select-layout even-vertical
bind-key M-3 select-layout main-horizontal
bind-key M-4 select-layout main-vertical
bind-key M-5 select-layout tiled
bind-key M-n next-window -a
bind-key M-o rotate-window -D
bind-key M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R