我在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{}
部分,它只对所有选定的行执行一次?
答案 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"
我怀疑如果你的一个选择是空行,这将会中断。