我已经在以下位置分配了一个变量.tmux.conf
:
setenv -g var "Something"
如何绑定一个键来将此变量发送到我的终端而不需要使用prefix:send $var
?
我尝试了bind -n M-q send $var Enter
哪个是AltQ,但没有成功
答案1
setenv -g var "Something"
bind -n M-q run-shell "tmux send #{var}" # or
bind -n M-q run-shell 'tmux send ${var}'
重要的是要理解 Tmux 的“全局环境”与 Tmux 服务器的“进程环境”不同。从手册页:
GLOBAL_AND_SESSION_ENVIRONMENT
当服务器启动时,tmux 将环境复制到全球环境
老实说,这对我来说有点奇怪。我想我们都希望 Tmux 将全局 ( -g
) 变量解析到它自己的进程中,就像.bashrc
将 a 获取到 shell 中一样,但它不是这样工作的。
“全局环境”是Tmux适用的环境它创建的所有会话,而不是 Tmux 本身。
我们可以var
通过以下方式证明它不是 Tmux 服务器环境的一部分:
$ strings /proc/$(pgrep -xo "tmux: server")/environ
$ strings /proc/$(pgrep -xo "tmux: server")/environ | grep Something
它实际上甚至不是 Tmux 的一部分客户的环境:
$ strings /proc/$(pgrep -xo "tmux: client")/environ | grep Something
然而,它是Tmux 传递到新创建的会话的环境的一部分:
$ strings /proc/$$/environ | grep Something
var=Something
因此,为了利用您在 中设置的值.tmux.conf
,我们可以用来run-shell
启动新的shell,Tmux 将填充全局环境,并tmux send ...
在那里运行命令。