tmux ステータス行と現在のパス形式

tmux ステータス行と現在のパス形式

マルチプレクサ#{pane_current_path}ステータスバーには、現在のウィンドウの名前として使用できるオプションがあります。これは素晴らしいですが、私には2つの欠点があります。

  1. $HOMEと表示されません~
  2. 最後のディレクトリ名だけが必要で、必要はありません/。たとえば、または/home/ook/thingy/srcでのみ表示されます。src~/t/src

お持ちですか?マルチプレクサこれを行うコマンドは何ですか?

一緒に使うとボーナスポイント電源ケーブルしかも。

答え1

私はあなたが望むものに似たものを使用しています。

setw -g window-status-format "#[underscore]#{?#{==:#{window_panes},1},,+}#[bold]#W#[nobold]:#{=|-24|…;s|$HOME|~|:pane_current_path}"

pane_current_path損傷に焦点を当てるために少し単純化しました。

"#{=|-24|…;s|$HOME|~|:pane_current_path}"

これにより、ホームディレクトリが変更され、~右端の24文字を除くすべての文字が削除されます。しかし、このようにして、私は~長い道のりの先頭が取り除かれたことに気づきました。

パスの葉のみ:

"#{s|$HOME|~|;s|.*/||:pane_current_path}"

当時は最初に家にいるときに代わりに~表示されるように交換項目を入れました。~<username>

したがって、あなたの例に近づくには~/t/src

"#{s|$HOME|~|;s|/.*/|/…/|:pane_current_path}"

としてレンダリングされます~/…/src。修正されたパターンとaaの逆参照を使用して#{=より近づくことができますが、すべてが正しいかどうかはわかりません。

答え2

私は最近似たようなものを見つけようとしましたが、私の場合は、ウィンドウ情報(Tmuxコマンド用choose-window)をデフォルトよりも豊富に設定しました。

マニュアルページでは、関連情報は次の場所にあるようです。滞在セクションは次のコマンドでも使用されますstatus-{left,right}

滞在

一部のコマンドは、型パラメーターと共に-Fフラグを受け入れます。これはコマンド出力の形式を制御する文字列です。代替変数は、「#{session_name}」のように「#{」と「}」で囲まれます。次の表に、オプション値として使用できるtmuxオプションの可能な変数または名前を示します。一部の変数には「#S」などの短いエイリアスがあり、「##」は単一の「#」に置き換えられます。

条件文は前に「?」を付けて、2つのオプションをカンマで区切って使用できます。指定された変数が存在し、ゼロでない場合は最初の選択肢が選択され、それ以外の場合は2番目の選択肢が使用されます。たとえば、「#{?session_attached、attached、not Attached}」には、セッションが接続されている場合は「attached」文字列が含まれ、セッションが接続されていない場合は「not Attached」または「#{?automatic-rename ,yes, no 'yes'には自動名前変更が有効な場合はyesが含まれ、それ以外の場合はnoが含まれます。

結果文字列の前に「=」、数字、およびコロンを追加して、結果文字列の長さを制限できます。正の数は文字列の先頭から計算され、負の数は最後から計算されます。したがって、「#{=5:pane_title}」には、ウィンドウタイトルの最初の5文字以下または「#{=-5:」が含まれます。 Pane_title}" にはウィンドウタイトルの最初の 5 文字が含まれています。 window_activity}" は、"Sun Oct 25 09:25 :02 2015" を提供します。 /: '型の接頭辞は常に 'foo'を 'bar'に置き換えます。

また、「#()」を使用してシェルコマンド出力の最初の行を挿入することもできます。たとえば、「#(uptime)」はシステムの稼働時間を挿入します。フォーマットを設定するとき、tmuxは "#()"コマンドが完了するのを待たずに代わりに同じコマンドを実行した以前の結果を使用します。コマンドが以前に実行されなかった場合はプレースホルダを使用します。コマンドは、tmuxグローバル環境セットを使用して実行されます(環境セクションを参照)。

sed数回試しても、ディレクトリ名操作に組み込まれた同様の方法が得られないようです#{pane_current_path}。ただし、どのシェルコマンドや環境変数も使用できるため、簡単に使用できます。

set status-left "#(basename ${PWD})"

現在電力線を使用していないため、電力線の互換性についてはよくわかりません。

関連情報