tmux 状态行和当前路径格式

tmux 状态行和当前路径格式

多路复用器有一个选项可以将 用作#{pane_current_path}状态行中当前窗格的名称。这很棒,但对我来说有两个缺点:

  1. $HOME不显示为~
  2. 我只需要最后一个目录名,而不是/.因此,例如/home/ook/thingy/src只会显示为src~/t/src

有没有多路复用器执行此操作的命令?

如果它与以下内容一起使用,将获得奖励积分电源线以及。

答案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})"

我不知道电力线兼容性,因为目前我没有使用它。

相关内容