tmux从copy-mode(xargs join?)向其他窗格发送选择

时间:2016-02-17 17:40:09

标签: vim tmux xargs

我在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 个答案:

答案 0 :(得分:2)

有一个与-I类似的-J标志,但它并没有分割输入。它几乎就是你想要的,除了-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"

我怀疑如果你的一个选择是空行,这将会中断。