我想让tmux自动使用当前工作目录(cwd)重命名窗口。默认情况下,它将选项卡/窗口命名为当前进程的名称,例如zsh或vim。
当我在tmux中打开一个新窗口时,名称为reattach-to-use-namespace
,然后立即切换到zsh
。
我在OS X 10.10.2上,我使用zshell,我有tmux 1.9a。
要清楚,我不希望窗口名称中的整个路径只是当前目录,例如,我想要projectName
,而不是/Users/username/Development/projectName
。
如果您想查看我当前的tmux.conf
,here it is。
答案 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个组件
仅显示基本名称会产生太多歧义,但完整路径太混乱,所以我决定:
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]|'
如果仍然无法解决歧义,我会选择:
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"
答案 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)
答案 9 :(得分:0)
要更改在窗口列表中看到的内容,可以在定义chose-window
函数的键绑定时指定格式,如下所示:
bind-key '"' choose-window -F "#{session_name} | #{window_name} - #{b:pane_current_path} (#{pane_current_command})"