tmux配置文件出错

时间:2013-07-01 03:40:58

标签: linux config tmux

.tmux.conf文件中,我有这一行:

set -g status-left '#(iwgetid | cut -d '"' -f 2)'

在我运行tmux时会抛出错误:

/home/user/.tmux.conf:8: invalid or unknown command: set -g status-left '#(iwgetid | cut -d '"' -f 2)'

错误位于",因为当我使用,进行更改时,tmux不会引发错误。当然,它的行为也不如预期。

有人可以告诉我如何解决这个问题吗?

我已经尝试逃避"'但没有运气。

1 个答案:

答案 0 :(得分:2)

从你想要的shell开始:

iwgetid | cut -d '"' -f 2

将其包裹在#()中,以便在status-left的扩展中将其视为shell命令:

#(iwgetid | cut -d '"' -f 2)

将其嵌入为 tmux 可以解析的字符串。你试图在它周围加上单引号:

'#(iwgetid | cut -d '"' -f 2)'

问题是 tmux 会将第一个“内部”单引号和第一个“外部”单引号解释为单个字符串段,在顶部留下以下双引号-level它现在形成一个未终止的字符串段;在这种情况下,错误信息并不十分清楚。

要解决此问题,您需要正确引用所选 tmux 引号字符的格式字符串(嵌入shell命令)。你可以这样做:

set -g status-left '#(iwgetid | cut -d '"'\"'"' -f 2)'

但是,这有点难以阅读,因此您可以考虑将shell命令更轻松地转换为 tmux -quotable:

iwgetid | cut -d \" -f 2

您可以使用 tmux 单引号嵌入status-left,如下所示:

set -g status-left '#(iwgetid | cut -d \" -f 2)'

或者使用 tmux 这样的双引号:

set -g status-left "#(iwgetid | cut -d \\\" -f 2)"

请记住, tmux 引用与Bourne样式的shell引用类似但不完全相同(例如,顶级反斜杠转义不起作用)。此引用系统用于配置文件command-prompt(例如前缀:),confirm-beforeif-shell命令参数以及{{1}的命令模板}命令。