首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >tmux键绑定到管道窗格内容到程序

tmux键绑定到管道窗格内容到程序
EN

Unix & Linux用户
提问于 2015-07-05 09:12:31
回答 1查看 1.3K关注 0票数 5

我正在尝试使这个键绑定工作,以便将当前窗格的内容输送到我选择的程序:

代码语言:javascript
运行
复制
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

我有一个类似但更简单的绑定,它将内容输出到一个文件中,而不是管道中,工作非常完美:

代码语言:javascript
运行
复制
bind H command-prompt -I "tmux_#W.txt" \
    "capture-pane -eJ -S - -E -; \
    save-buffer '%%'; \
    delete-buffer"

如果我一个一个地运行其中的命令,程序就会像其他管道一样接收窗格的文本。我做错了什么?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2015-07-05 10:32:10

new-windowdelete-buffer命令之间似乎存在竞争:也就是说,在将缓冲区“管道”插入到vim或任何您想要执行的程序之前,将其删除。

下面这个在调用delete-buffer之前休眠一秒钟的丑陋黑客为我解决了这个问题:

代码语言:javascript
运行
复制
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'"
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/213964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档