答案1
我正在使用类似于你想要的东西:
setw -g window-status-format "#[underscore]#{?#{==:#{window_panes},1},,+}#[bold]#W#[nobold]:#{=|-24|…;s|$HOME|~|:pane_current_path}"
稍微精简一下以专注于pane_current_path
损坏:
"#{=|-24|…;s|$HOME|~|:pane_current_path}"
这将替换主目录~
并删除除最右边的 24 个字符之外的所有字符。不过,通过这种方式,我注意到~
长路径的前导被删除。
仅针对路径的叶子:
"#{s|$HOME|~|;s|.*/||:pane_current_path}"
那次我把~
替换放在第一位,这样当你在家时它会显示~
而不是<username>
.
因此,为了更接近您的~/t/src
示例:
"#{s|$HOME|~|;s|/.*/|/…/|:pane_current_path}"
将渲染为~/…/src
.您应该能够使用修改后的模式和 aa backref,也许与#{=
截断器结合使用,以更接近,但我不确定是否一切都正确。
答案2
我最近试图找到类似的东西,就我而言,将窗口信息(对于 Tmux 命令choose-window
)设置为比默认值更丰富的信息。
在手册页中,相关信息似乎位于格式部分,该部分也被命令使用status-{left,right}
:
格式
某些命令接受带有格式参数的 -F 标志。这是一个控制命令输出格式的字符串。替换变量包含在“#{”和“}”中,例如“#{session_name}”。下表列出了可能的变量,或者可以使用 tmux 选项的名称作为选项的值。某些变量具有较短的别名,例如“#S”,并且“##”被替换为单个“#”。
条件语句可以通过前缀“?”来使用并用逗号分隔两个选项;如果指定的变量存在且不为零,则选择第一个替代方案,否则使用第二个替代方案。例如,如果会话已附加,则“#{?session_attached,attached,not Attached}”将包含字符串“attached”,如果未附加会话,则包含字符串“not Attached”,或者“#{?automatic-rename,yes,no”如果启用自动重命名,则 'yes' 将包含“yes”,否则将包含“no”。
可以通过在结果字符串前加上“=”、数字和冒号作为前缀来限制结果字符串的长度。正数从字符串的开头开始计数,负数从结尾开始计数,因此“#{=5:pane_title}”将最多包含窗格标题的前 5 个字符,或“#{=-5:pane_title}”将包含窗格标题的前 5 个字符。最后 5 个字符。在时间变量前加上“t:”前缀会将其转换为字符串,因此如果“#{window_activity}”给出“1445765102”,“#{t:window_activity}”给出“Sun Oct 25 09:25:02 2015”。 'b:' 和 'd:' 前缀分别是变量的 basename(3) 和 dirname(3)。 's/foo/bar/:' 形式的前缀将自始至终用 'bar' 替换 'foo'。
此外,可以使用“#()”插入 shell 命令输出的第一行。例如,“#(uptime)”将插入系统的正常运行时间。构造格式时,tmux 不会等待“#()”命令完成;相反,使用运行相同命令的先前结果,或者如果之前未运行过该命令,则使用占位符。命令是使用 tmux 全局环境集执行的(请参阅环境部分)。
经过一番尝试后,我似乎无法使内置的sed
类似方法与目录名称一起使用#{pane_current_path}
。不过,由于您还可以使用任何 shell 命令或环境变量,因此您可以简单地使用
set status-left "#(basename ${PWD})"
我不知道电力线兼容性,因为目前我没有使用它。