web-dev-qa-db-ja.com

tmuxウィンドウの名前を現在のディレクトリに自動的に変更する方法

現在の作業ディレクトリ(cwd)でウィンドウの名前を自動的に変更するtmuxが欲しいです。デフォルトでは、タブ/ウィンドウにzshやvimなどの現在のプロセスの名前を付けます。

Tmuxで新しいウィンドウを開くと、名前はreattach-to-use-namespaceになり、すぐにzshに切り替わります。

tmux tabs

私はOS X 10.10.2を使用しています。zshellを使用しており、tmux 1.9aを使用しています。

明確にするために、ウィンドウの名前にパス全体ではなく、現在のディレクトリだけが必要なので、たとえば、/Users/username/Development/projectNameではなくprojectNameが必要です。

現在のtmux.confを表示する場合は、 ここにあります です。

40
aharris88

Josefが書いたことを展開すると、シェルスニペットを使用してディレクトリのベース名をステータスに入れることができます。

# be sure to see note* below
set -g window-status-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'
set -g window-status-current-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'

# status bar updates every 15s by default**, change to 1s here 
# (this step is optional - a lower latency might have negative battery/cpu usage impacts)
set -g status-interval 1

* ${pwd##*/}はフォーマット文字列で特別な意味を持つため、${pwd####*/}#にエスケープされます。

**デフォルトのtmux構成の例については、 here を参照してください。

24
CEL

tmux 2.3 +を使用すると、b:形式修飾子はパスの「ベース名」(または「テール」)を示します。

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#{b:pane_current_path}'

man tmuxのFORMATSセクションでは、#{d:}#{s/foo/bar/:}などの他の修飾子について説明しています。


tmux 2.2以前では、代わりにbasename Shellコマンドを使用できます。

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#(basename "#{pane_current_path}")'
20
Justin M. Keyes

上位N個のコンポーネントを表示

enter image description here

ベース名だけを表示するとあいまいさが非常に多くなりますが、完全なパスは煩雑になりすぎます。

the/last/path

の代わりに:

/a/very/long/the/last/path

あるいは単に:

path

.tmux.conf

set-window-option -g window-status-current-format '#[fg=white,bold]** #{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]**|'
set-window-option -g window-status-format '#[fg=white,bold]#{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]|'

以下から得られるトリック: nix remove part of path

それでもあいまいさが解決しない場合は、次のことにします。

bind-key -r w choose-window -F '#{window_index} | #{pane_current_command} | #{Host} | #{pane_current_path}'

Tmux 2.1、Ubuntu 16.04でテスト済み。

〜/ .tmux.confで以下を使用してこれを実現します(OSX、zsh、tmux-2.3で動作します):

set -g automatic-rename-format '#{pane_current_path}'
set -g status-interval 5

Status-intervalを1に設定すると、ディレクトリの変更に対する応答が速くなります。

Changelog( https://raw.githubusercontent.com/tmux/tmux/master/CHANGES )によると、これはtmux 1.9以降で動作するはずです。

Tmux 2.3でCentOSマシンにsshを使用すると、新しいパネルでreturnを押すまでウィンドウ名は変わりません。なぜそれが起こっているのかわかりません。

3
Harry Mallon

Zshシェルのtmuxセッションで次のようなことを行います。

setopt Prompt_SUBST
export PS1=$'\ek$(basename $(pwd))\e\\> '

誰かがbashシェルを使用している場合:

export PS1="\033k\$(basename \$(pwd))\033\\> "

$TERM env変数が値"screen"に設定されている場合、これらのコマンドをシェル初期化ファイルに追加できます。

1

私はそのためにzshフックを使用しています

~/.zshrcに次を追加

precmd () {
  if [ -n "$TMUX" ]; then
    tmux set-window-option -q window-status-format "#[fg=cyan bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
    tmux set-window-option -q window-status-current-format "#[fg=cyan, bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
  fi
}
1
logcat

この設定を〜/ .tmux.confファイルに追加すると動作するはずです:

set-option -g window-status-current-format '#I:#{pane_current_path}#F'
set-option -g window-status-format '#I:#{pane_current_path}#F'
set-option -g status-interval 1

ただし、Tmuxのバージョンによって異なります。 1.9a3(Cygwin)では動作しませんでしたが、Ubuntu(Vagrant)でTmux 1.8を使用すると正常に動作しました。

1
Josef

あなたはこれを使いたいと確信しています:

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

enter image description here

0
jibancanyang

これは厳密にはあなたの質問に答えません。既存のtmuxセッションの名前を現在の作業ディレクトリに自動的に変更しません。

むしろ、新しいセッションを作成するとき、現在の作業ディレクトリに基づいてそのセッションに名前を付けます。

私がやったことは次のとおりです。

to

〜/ .aliases

add

alias tm='tmux new -s `basename $PWD`'

新しいターミナルウィンドウを開き、次のように入力します。

tm

これにより、現在の作業ディレクトリにちなんで命名された新しいtmuxセッションが作成されます。

注:これは、Windowsには存在しないbasenameに依存しています。

0
FreePender

ウィンドウリストに表示される内容を変更するには、次のようにchose-window関数のキーバインドを定義するときに形式を指定できます。

bind-key '"'  choose-window  -F "#{session_name} | #{window_name} - #{b:pane_current_path} (#{pane_current_command})"
0
Rho Phi