tmuxは、コマンドラインとその設定ファイル(.tmux.conf)の間で異なる動作をします。

tmuxは、コマンドラインとその設定ファイル(.tmux.conf)の間で異なる動作をします。

tmuxは、コマンドラインとその設定ファイル(.tmux.conf)の間で異なる動作をします。

コマンドライン:

bash$ tmux new \; split-window -h \;

設定ファイル(.tmux.conf)(その後、コマンドラインに「tmux」のみを入力)

new
split-window -h

コマンドラインバージョンでは、起動時にウィンドウがよく表示され、セッションは1つだけ作成されます。ただし、プロファイルバージョンは異なる動作をします。

  • 1つのセッションではなく、セッション名が「0」と「1」の2つのセッションを作成します。
  • セッション「0」には、コマンドラインバージョンで見たのと同じウィンドウがあります。
  • セッション「1」には全ウィンドウがあります。
  • セッション「1」で停止します。

だからプロフィールバージョンではついに画面の「1」セッションに到達するようになりました。 「終了」を実行してセッション0を追加すると、コマンドラインバージョンと同じ結果で「0」セッションに移動します。

または、構成ファイルに分割行のみが含まれている場合:

split-window -h

その後、「tmux」と入力すると、起動時にエラーメッセージが表示されます。

.tmux.conf:1: no current target 

そして、分割ウィンドウはありません(分割ウィンドウのコマンドが失敗するので、見てわかるように、設定の最初の行に現在ターゲットがないと文句を言います)。

明らかに、コマンドラインバージョンは私が望むか必要なものです。

設定ファイルのバージョンに問題がありますか?

答え1

違いは、tmux編集後に手動で入力したコマンドにあります.tmux.conf

tmux サーバーと各 tmux クライアントが別々のプロセスであることを認識して覚えておくと、tmux に関連する多くの問題を理解しやすくなります。場合によっては、クライアントはサーバーを起動します。.tmux.confクライアントではなくサーバーに適用されます。

tmux引数なしでtmux new-sessionakaのように動作しますtmux new。必要に応じてtmuxサーバーを起動します。 tmux サーバーが起動すると、.tmux.conftmux クライアントからの要求を処理する前に解析されます。

したがって、実行中のサーバーがない場合は、tmuxtmuxサーバーを作成して次を実行します。

new-session      # because of .tmux.conf
split-window -h  # because of .tmux.conf
new-session      # because this is the request from your client

クライアントが作成された最後のセッションに接続します。new-session、暗黙的に要求することです。

クライアントがすでに作成されたセッションに接続できるようにするには、tmux attach-sessionakatmux attachまたはを使用してくださいtmux a。 tmuxサーバーがまだ存在しない場合は、それを作成しようとします。attach-session生成するセッションは、クライアントの要求が最終的に処理されたときに「作成」されたと見なされます。.tmux.confこれは文書:

サーバーが起動していない場合は、サーバーattach-sessionを起動しようとします。設定ファイルにセッションが作成されないと失敗します。

問題がある場合は、ファイルから作成されたセッションに(単に追加するのではなく)追加する必要.tmux.confがあります。 tmux サーバーが既に存在する場合は再確認されず、既存のセッション (存在する場合) に接続しようとします。tmux atmux.tmux.conftmux a

私を含む一部のユーザーは既存のセッションに戻ることを好むので、シェルでまたはを使用しますtmux new-session -Atmux a || tmuxこのコマンドは.tmux.conf

新しく作成されたセッションを実行するには、split-window -h次のフックを使用できます。

set-hook -g session-created 'split-window -h'

(これはシェルのtmuxコマンドですtmux set-hook …。)

関連情報