Tmux 选择布局返回“无法设置布局”

Cth*_*hos 4 tmux osx-lion

我在 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]}

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

Chr*_*sen 5

看起来解析布局字符串的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]}'
Run Code Online (Sandbox Code Playgroud)

很容易忽略,但这种额外的填充实际上存在于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)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

上面的示例来自tmux 1.7,因此与您的示例相比,它们为每个窗格包含一个额外的数字。


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

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

引用还可以很容易地包含一个空格作为所需的填充。

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