tmux如何在复制模式下将选择的内容发送到另一个窗格(xargs join?)

3
我在我的tmux.conf中有以下代码,它会将选择的内容复制到复制模式,并将其发送到另一个窗格,在那里我已经打开了vim。
bind-key -t vi-copy o copy-selection
bind-key -t vi-copy o copy-pipe "xclip -sel clip -i"
bind-key -t vi-copy o copy-pipe "xargs -I{} tmux send-keys -t 1 ';call OpenTestFile(\"{}\")' Enter && tmux select-pane -t 1"

我认为,xargs -I{} 命令会触发将选择的每一行逐一发送到该窗格中。因此,如果我选择了6行,tmux将这6行发送到具有vim的窗格中。
但是我只想使用一个send-keys调用,并将整个选定的字符串发送到该窗格。
那么,是否有另一个工具可以读取标准输入并将其发送到tmux send-keys,或者我可以修改xargs -I{}部分,以便它仅执行一次,并包含所有选定的行?
1个回答

3

有一个-J标志与-I类似,但它不会拆分输入。它几乎就是你想要的,但-J不能与带引号的字符串一起使用。

因此,在一些探索之后,有一个-L标志告诉xargs要读取多少非空行。如果将-L设置为比您发送的参数数量更高的数字,则它们应该一次性全部发送,例如:

bind-key -t vi-copy o copy-pipe "xargs -I{} -L 10000 tmux send-keys -t 1 ';call OpenTestFile(\"{}\")' Enter && tmux select-pane -t 1"

我怀疑如果您的选择中有空行,这将会出错。


谢谢,看起来它有点工作了,但在插入前3到6个时丢失了。你能解释一下{}在两个地方使用的含义吗? - divramod
1
"-I <some_expression>" 会用 xargs 的输入替换 "<some_expression>" 的实例。因此,当 xargs 看到 {} 时,它会将其替换为任何输入。您不必使用 {},我在许多示例中看到过 % 的使用。 - S15

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