web-dev-qa-db-ja.com

Tmux:ステータスバーにペインの現在の作業ディレクトリを表示するようにtmuxを構成するにはどうすればよいですか?

私はtmuxを初めて使用し、ステータスバーの左側に次のように反映されるようにtmux.confファイルを編集しようとしています。

_[SessionName] [CurrentPane] [CurrentWorkingDirectory]_

SessionNameCurrentPaneを表示できます。ただし、CurrentWorkingDirectoryを表示できません。

私はいくつかの#(Shell command)オプションを試しました:

  1. #(tmux select-pane -t :.#P; pwd):しかし、これは他の$ PWD変数を出力します[〜#〜] not [〜#〜]現在のペインのbashセッションの現在のディレクトリを反映します。

  2. #(tmux select-pane -t :.#P; tmux send-keys pwd Enter)まず、ターミナルにいる場合はCurrentWorkingDirectoryを出力しましたが。これをターミナルに出力し、[〜#〜] not [〜#〜]ステータスバーに希望どおりに出力します。次に、ターミナルにいるかどうかに関係なく、15秒ごとに「pwdEnter」を入力しました。これは、(私のように)速くない場合は元に戻すのが面倒でした。

私はこれらのオプションを試しましたが、役に立ちませんでしたが、私がやりたいことをすることは可能ですか?そしてどうやって?

14
rajames

そのための変数があります。これはマンページにはないようですが、開発バージョンで言及されています。私にとっては、tmuxの1.8リリースで動作します。

set -g status-left "#{pane_current_path}"

これは、window-statusに置いたときにも機能することに注意してください。各ウィンドウのステータスには、それぞれの作業ディレクトリが記載されています。

setw -g window-status-format "#{pane_current_path}".
22
gospes

Bashでこれを行う方法はわかりませんが、zshには、すべてのコマンドの前に実行されるフックがあります。あなたの.zshrcで:

precmd () {
    tmux set -qg status-left "#S #P $(pwd)"
}

これにより、コマンドを実行するたびにそのtmuxコマンドが実行されます。お役に立てれば。 bashにはprecmdがないため、これを行う方法がわかりません。

5
Chris W.

残念ながら、提案されたソリューションはバージョン1.7(OpenSuse 12.3の「公式バージョン」)では機能しませんが、解決策を見つけることができました。
/etc/tmux.conf内:

setw -g window-status-current-format "#T(#I:#W#F)"  
setw -g window-status-format "#T(#I:#W#F)"  

ここで#T-現在のペインタイトルを表示するように指示します。これはエスケープシーケンスで設定できます。各シェルコマンドでこれを行うには、.bashrcのどこかに置きます。

[[ -n "$TMUX" ]] && Prompt_COMMAND='echo -n -e "\e]2;${PWD/${HOME}/~}\e\\"'  

これは、OpenSuse 12.3、tmux 1.7、bash4.2.53で機能します。

3
avb1003