我正在尝试使这个键绑定工作,以便将当前窗格的内容输送到我选择的程序:
bind P command-prompt -I "vim -" \
"capture-pane -eJ -S - -E -; \
set-buffer -n PIPE; \
new-window -n '|%1' 'tmux save-buffer -b PIPE - | %1'; \
delete-buffer -b PIPE"-但它总是导致tmux报告no buffer PIPE。这段文本通常显示和覆盖得太快,我甚至没有注意到;我设法通过使用sleep 10作为命令名来引导输出。
我选择重命名由capture-pane创建的自动命名缓冲区,因为否则new-window调用似乎会将tmux的当前/默认缓冲区重置为我上次在复制模式下复制的缓冲区。据我所知,新缓冲区应该重命名为PIPE。
我有一个类似但更简单的绑定,它将内容输出到一个文件中,而不是管道中,工作非常完美:
bind H command-prompt -I "tmux_#W.txt" \
"capture-pane -eJ -S - -E -; \
save-buffer '%%'; \
delete-buffer"如果我一个一个地运行其中的命令,程序就会像其他管道一样接收窗格的文本。我做错了什么?
发布于 2015-07-05 10:32:10
在new-window和delete-buffer命令之间似乎存在竞争:也就是说,在将缓冲区“管道”插入到vim或任何您想要执行的程序之前,将其删除。
下面这个在调用delete-buffer之前休眠一秒钟的丑陋黑客为我解决了这个问题:
bind P command-prompt -I "vim -" \
"capture-pane -eJ -S - -E -; \
set-buffer -n PIPE; \
new-window -n '|%1' 'tmux save-buffer -b PIPE - | %1'; \
run-sh 'sleep 1 && tmux delete-buffer -b PIPE'"https://unix.stackexchange.com/questions/213964
复制相似问题