如何自动将tmux窗口重命名为当前目录

时间:2015-02-06 23:29:15

标签: tmux

我想让tmux自动使用当前工作目录(cwd)重命名窗口。默认情况下,它将选项卡/窗口命名为当前进程的名称,例如zsh或vim。

当我在tmux中打开一个新窗口时,名称为reattach-to-use-namespace,然后立即切换到zsh

tmux tabs

我在OS X 10.10.2上,我使用zshell,我有tmux 1.9a。

要清楚,我不希望窗口名称中的整个路径只是当前目录,例如,我想要projectName,而不是/Users/username/Development/projectName

如果您想查看我当前的tmux.confhere it is

10 个答案:

答案 0 :(得分:20)

扩展Josef编写的内容,您可以使用shell片段将目录的基本名称置于状态:

# 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

答案 1 :(得分:18)

使用 tmux 2.3 + b:格式修饰符会显示" basename" (或"尾巴")路径。

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

man tmux的格式部分介绍了其他修饰符,例如#{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}")'

答案 2 :(得分:11)

显示前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]|'

诀窍取自:Unix 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上测试。

答案 3 :(得分:2)

我在〜/ .tmux.conf中使用以下内容来实现这一点(在OSX,zsh,tmux-2.3上工作):

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

您可以将status-interval设置为1,以使其更快地响应更改目录。

根据更改日志(https://raw.githubusercontent.com/tmux/tmux/master/CHANGES),这应该适用于tmux 1.9及更高版本。

将ssh用于带有tmux 2.3的CentOS机器,窗口名称不会改变,直到我按下新面板中的return,不知道为什么会发生这种情况。

答案 4 :(得分:1)

在zsh shell的tmux会话中执行类似的操作:

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

如果有人使用bash shell:

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

$TERM env变量设置为值"screen"

的条件下,您可以在shell初始化文件中添加这些命令

答案 5 :(得分:1)

将此配置添加到〜/ .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上使用Tmux 1.8(在Vagrant中)它运行良好。

答案 6 :(得分:1)

我正在使用zsh hook

~/.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
}

答案 7 :(得分:0)

这并不能严格回答您的问题 - 它不会自动将现有的tmux会话重命名为当前工作目录。

相反,在创建新会话时,它会在当前工作目录之后命名该会话。

这就是我的所作所为:

<强>〜/ .aliases

添加

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

打开一个新的终端窗口并输入:

tm

现在创建一个以当前工作目录命名的新tmux会话。

注意:这取决于Windows中不存在的basename

答案 8 :(得分:0)

我确定您要使用此:

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

enter image description here

答案 9 :(得分:0)

要更改在窗口列表中看到的内容,可以在定义chose-window函数的键绑定时指定格式,如下所示:

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