所以我在.zshrc
中有这个功能,将当前的tmux窗口重命名为当前目录。
precmd () {
tmux set-window-option -qg window-status-format "#[fg=colour18 bg=colour18] | #[fg=white, bg=colour18] #I | ${PWD##/*/} #[fg=colour18, bg=colour18] | "
tmux set-window-option -qg window-status-current-format "#[fg=colour18, bg=blue] | #[fg=white, bg=blue] #I | ${PWD##/*/} #[fg=blue, bg=colour18] | "
}
这很好用,但我想知道为什么相同的代码在我的.tmux.conf
# Status Bar
set-window-option -qg window-status-format "#[fg=colour18 bg=colour18] | #[fg=white, bg=colour18] #I | ${PWD##/*/} #[fg=colour18, bg=colour18] | "
set-window-option -qg window-status-current-format "#[fg=colour18, bg=blue] | #[fg=white, bg=blue] #I | ${PWD##/*/} #[fg=blue, bg=colour18] | "
如果我尝试使用它,我在启动tmux时会出错。
有什么理由吗?我可以使用#{pane_current_path}"
获得相同的效果并缩短当前目录的路径吗?
答案 0 :(得分:2)
我认为它不起作用,因为函数是在tty创建之前执行的。它适用于shell函数,因为你在tmux完全启动后执行它。但是.tmux.conf
在tmux启动期间执行。
所以我会把它保存在你的.zshrc
中,可能会立即执行该功能。
答案 1 :(得分:1)
恐怕暂时没有简单的方法可以实现这一目标。除了@rednaw所说的,还有另一个重要的因素使它变得不可能。
tmux支持"#(shell-command)"的语法。因此,你可能很想
tmux set-window-option window-status-format "#(echo ${PWD##/*/})"
然而,这条线不会像你期望的那样工作。棘手的是:" PWD"是当前会话而不是当前窗格的PWD。 p>
答案 2 :(得分:0)
尽管shell命令在会话的工作目录中而不是在窗口或窗格中运行,所以您不能使用$PWD
,但仍可以使用{{1}从该命令中获取窗格的工作路径。 },然后使用shell命令将其缩短到路径的最后一部分,例如我的tmux配置中有这个:
#{pane_current_path}