Tmux select-layout 返回“无法设置布局”

Tmux select-layout 返回“无法设置布局”

我在 Mac OS X Lion 上,并且已经通过 brew 安装了 tmux。

我设置了一个简单的窗口,在右侧窗格中有一个垂直分割和一个水平分割,总共有三个窗口。我还使用 放大了最左侧的窗格resize-pane -R 30。我想将布局放入脚本中,以便我可以快速重做它,所以我使用 导出了布局设置tmux list-windows,并得到了以下内容:

bash [318x64] [布局 5ff,318x64,0,0{189x64,0,0,128x64,190,0[128x32,190,0,128x31,190,33]}]

然而,当我拿起布局线并运行

tmux 选择布局“5ff,318x64,0,0{189x64,0,0,128x64,190,0[128x32,190,0,128x31,190,33]}”

我明白了

无法设置布局:5ff,318x64,0,0{189x64,0,0,128x64,190,0[128x32,190,0,128x31,190,33]}

文档中提到,您不能在具有比原始指定布局更多的窗格的布局上执行此操作,但这似乎不是问题。

答案1

看起来tmux解析布局字符串的代码。尝试在前面添加一个空格或零,以便在第一个逗号前有四个字符。

tmux select-layout ' 5ff,318x64,0,0{189x64,0,0,128x64,190,0[128x32,190,0,128x31,190,33]}'
tmux select-layout '05ff,318x64,0,0{189x64,0,0,128x64,190,0[128x32,190,0,128x31,190,33]}'

很容易被忽略,但这个额外的填充实际上存在于输出中list-windows。这是一个带有一个额外空格的示例:

0: zsh* (3 panes) [193x46] [layout  71e,193x46,0,0{144x46,0,0,47,48x46,145,0[48x23,145,0,49,48x22,145,24,51]}] @44 (active)

另一个带有两个额外空格:

0: zsh* (3 panes) [193x46] [layout   49,193x46,0,0{81x46,0,0,47,111x46,82,0[111x23,82,0,49,111x22,82,24,51]}] @44 (active)

以上例子来自tmux1.7,因此与您的示例相比,它们为每个窗格都包含一个额外的数字。


一般来说,你需要引用这些布局字符串,以防止 shell 解释

  • 花括号内的逗号作为“括号扩展”(例如frob{ozz,nitz})和
  • 方括号作为“路径名扩展”(即像*.[ch]glob/wildcard)。

引用还可以轻松地包含空格作为所需的填充。

意外的通配符不太可能成为问题,因为您可能没有任何文件可以匹配这些逗号和数字字符串,并且大多数 shell 都配置为(默认情况下)将不匹配的通配符视为文字字符串(它们以未修改的形式传递给命令)。但是,括号扩展始终是一个问题(在支持它的 shell 中),因为 shell 会将布局字符串扩展为多个参数。select-layout显示它的用法消息,因为它收到了太多参数(在 shell 对布局字符串执行括号扩展之后)。

相关内容