zsh如何通过按键绑定连接到tmux?

5
我将尝试让zsh中的Alt-M绑定到一个tmux会话中。
.zshrc文件内容:
tmux-open() {
  tmux attach
}
zle -N tmux-open
bindkey '^[m' tmux-open

当我按下Alt-M键时,没有附加到tmux会话,而是出现以下错误:

打开终端失败:不是终端

在zsh提示符下调用tmux-open会附加到tmux会话。那么键绑定的问题是什么?

2个回答

1

这是由于 zsh 故意将 stdin/out 设置为 /dev/null 导致的,参见 `man zlezsh`:

用户自定义小部件作为 shell 函数实现,可以执行任何正常的 shell 命令。它们还可以使用 zle 内建命令运行其他小部件(无论是内置的还是用户定义的)。函数的标准输入被重定向从 /dev/null,以防止外部命令意外地通过读取终端来阻塞 ZLE,...

解决方案如 此处所描述的,是将文件描述符恢复为 /dev/tty

tmux-open() {
    (
        exec </dev/tty
        exec <&1
        tmux attach
    )
}

0
一种可能的替代方案是创建一个按键绑定,只需键入命令 tmux attach:
bindkey -s '^[m' 'tmux attach\n'

当提示符位于空命令行上时,这将起作用。


tmux作为更复杂函数的一部分运行时,这就变得更加困难了。 - Petr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接