【问题标题】:Tmux: How to configure tmux to display the current working directory of a pane on the status bar?Tmux:如何配置 tmux 以在状态栏上显示窗格的当前工作目录?
【发布时间】:2013-05-18 13:25:02
【问题描述】:

我是 tmux 新手,我正在尝试编辑我的 tmux.conf 文件以使状态栏的左侧反映:

[SessionName] [CurrentPane] [CurrentWorkingDirectory]

我可以显示SessionNameCurrentPane。但是我无法显示CurrentWorkingDirectory

我已经尝试了几个#(shell command) 选项:

  1. #(tmux select-pane -t :.#P; pwd): 但这会打印出其他一些 $PWD 变量,这些变量确实 NOT 反映 当前窗格中 bash 会话的当前目录。

  2. #(tmux select-pane -t :.#P; tmux send-keys pwd Enter) 首先,虽然它确实打印了CurrentWorkingDirectory,如果我是 在一个终端。它在终端中打印它,并在状态中打印 NOT 酒吧就像我想要的那样。其次,它每15输入一次“pwd Enter” 秒,无论我是否在终端,这很麻烦 如果你的速度不快(像我一样),请反转。

我已经尝试了这些选项,但无济于事,是否可以做我想做的事?以及如何?

【问题讨论】:

    标签: configuration tmux


    【解决方案1】:

    有一个变量,它似乎不在手册页中,但在开发版本中提到。对我来说,它适用于 tmux 的 1.8 版本。

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

    请注意,当您将其置于窗口状态时,它也可以工作。每个窗口状态都会提到各自的工作目录。

    setw -g window-status-format "#{pane_current_path}".
    

    【讨论】:

    • 这只会在为我创建新窗格时重命名窗格
    • 我的状态栏太短了,所以它截断了路径。使用set -g status-left-length 85增加长度
    • 适用于 tmux 2.1:set-option -g status-right '#{pane_current_path}' 还增加了在我使用设置的状态下更新当前目录的间隔:set-option -g status-interval 1
    • @WillHardwick-Smith 仅在制作新窗格时?起初我是这么想的,但经过一些实验后才意识到只有当我切换窗格时。然后我意识到这是一件好事!对于前台窗格,它将显示正在运行的命令,对于后台窗格,它将显示目录
    • 对于当前窗口,它是“window-status-current-format”,对于每个其他窗口,它是“window-status-format”,至少在 tmux 3.1 中。我还使用 b:pane_current_path 仅具有基本名称而不是整个路径
    【解决方案2】:

    我不确定如何在 bash 中执行此操作,但在 zsh 中,有一个挂钩会在每个命令之前运行。在您的 .zshrc 中:

    precmd () {
        tmux set -qg status-left "#S #P $(pwd)"
    }
    

    这将在您每次运行命令时运行 tmux 命令。希望这可以帮助。由于bash 没有precmd,我不知道该怎么做。

    【讨论】:

    • 感谢您的帮助。因为我是 Linux 新手并且开始学习 bash,所以我不想切换到 zsh,除非我真的必须这样做。因此,我更喜欢 bash 的解决方案。
    • 我确实找到了一种使用Glyph Lefkowitz 的技巧使用 bash 运行 precmd 的方法。找到了解决方案here。谢谢!
    【解决方案3】:

    不幸的是,建议的解决方案不适用于 1.7 版 - OpenSuse 12.3 的“官方版本”,但我设法找到了解决方案:
    /etc/tmux.conf:

    setw -g window-status-current-format "#T(#I:#W#F)"  
    setw -g window-status-format "#T(#I:#W#F)"  
    

    这里#T - 告诉显示当前窗格标题,可以使用一些转义序列设置。为了在每个 shell 命令中执行此操作,请输入 某处.bashrc:

    [[ -n "$TMUX" ]] && PROMPT_COMMAND='echo -n -e "\e]2;${PWD/${HOME}/~}\e\\"'  
    

    这适用于我在 OpenSuse 12.3、tmux 1.7、bash 4.2.53 上。

    【讨论】:

    • 是的,当然!在 [[ 和 ]] 之后需要空格。测试后我从终端窗口复制了一行,没有注意到显示时这个空格已经消失了。
    猜你喜欢
    • 2012-03-26
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多