Tmux send-keys丢失分号:如何发送字面量内容?
解决tmux send-keys字面量发送末尾分号被截断的问题
这个坑我之前踩过!当用tmux send-keys -l(字面量模式)发送带末尾分号的字符串时,tmux会默认把末尾的;当作命令分隔符吃掉一个,这对需要给REPL发送完整代码的场景来说太头疼了。下面给你两个靠谱的解决办法:
方法一:用-N参数(推荐,tmux 2.9+可用)
tmux 2.9版本之后新增了-N参数,它会彻底禁用命令解析逻辑,不管是什么字符(包括末尾的分号、特殊符号)都会原封不动发送到目标pane。
执行命令:
tmux send-keys -N -t 1 'foo;'
这样就能直接在Pane 1中得到完整的foo;,发送foo;;也会得到foo;;,完全满足字面量发送的需求,而且不需要任何转义操作。
方法二:临时修改命令分隔符(兼容旧版tmux)
如果你的tmux版本低于2.9,没有-N参数,可以临时把tmux的命令分隔符改成一个不常用的字符,发送完再改回来:
# 临时将命令分隔符改为Ctrl+A(用^A表示) tmux set-option -t 1 command-separator '^A' # 发送字面量字符串 tmux send-keys -l -t 1 'foo;' # 改回默认的分号分隔符 tmux set-option -t 1 command-separator ';'
这个方法虽然麻烦点,但能解决旧版本的兼容问题,而且不需要拆分或转义你的代码字符串。
为什么会出现这个问题?
tmux的-l模式虽然叫“字面量”,但它并没有完全禁用所有解析逻辑——默认情况下,tmux会把;当作命令的分隔符,所以当字符串末尾是;时,它会被当作命令结束的标记吃掉一个。而-N参数就是专门为了关闭这个解析而生的,完美解决这类场景。
内容的提问来源于stack exchange,提问作者Jean Carlo Machado
相关产品推荐
相关产品推荐

