【问题标题】:To run Sed to Screen's clipboard in Screen's command-mode在 Screen 的命令模式下运行 Sed 到 Screen 的剪贴板
【发布时间】:2015-09-04 05:11:30
【问题描述】:

我在 Screen 的剪贴板中有一个副本,其中包含单词 Masi aften。 我想用 Bond 有效地替换它,这样我就可以直接在 Screen 的命令模式下编辑剪贴板。 我知道我可以将剪贴板保存到 /tmp 并在 Vim 中运行替换,但我想学习 Screen。

我在 Screen 的剪贴板中有我的数据时运行

Ctrl-A : sed s/Masi/Bond/ | [Screen's clipboard]       /// I do not know how to refer to Screen's clipboard by a command other that C-A ]

我明白了

unknown command sed

如何在 Screen 的命令模式下向 Screen 的剪贴板运行命令?

【问题讨论】:

    标签: gnu-screen


    【解决方案1】:

    我认为 screen 没有任何方法可以在粘贴缓冲区上运行命令。

    一种方法是进行绑定以保存粘贴缓冲区并在屏幕中打开一个新窗口,该窗口运行脚本以修改缓冲区。然后进行另一个绑定以从磁盘重新加载修改后的缓冲区并粘贴(这可以通过普通粘贴绑定进行绑定)。

    将此添加到screenrc(更改路径):

    bind -c screensed s eval "writebuf /pathtoscript/screensed.clipboard" "screen sh /pathtoscript/screensed.sh"
    bind -c screensed p eval "readbuf /pathtoscript/screensed.clipboard" "paste ."
    bind , command -c screensed
    

    在某处制作一个 shell 脚本:

    #!/usr/bin/env sh
    echo "Enter sed script: "
    read sedcommand
    sed -i ${sedcommand} /pathtoscript/screensed.clipboard
    echo "(Enter to return)"
    read something
    

    "ctrl-a , s" in screen 将转储剪贴板并为输入 sed 命令创建一个新窗口。 "ctrl-a , p" 将读取剪贴板并粘贴。脚本末尾的暂停是为了显示 sed 可能给出的任何错误。

    【讨论】:

    • 你知道 Screen 将剪贴板存储在哪里吗?
    • 我认为屏幕粘贴缓冲区只是保存在内存中,直到“writebuf”命令完成。我不知道有什么方法可以让屏幕在复制后自动写入缓冲区。如果您愿意查看源代码,我希望这种自动写入会相当简单。
    • 通过快速搜索找到了这个:snarfed.org/space/…,显然“stuff ''”在标记模式(奇数)下会进行复制。将其放入 screenrc 将使屏幕在您复制时自动写入文件: bindkey -m > eval "stuff ' '" writebuf
    • 您是否设法在 Screen 的剪贴板中运行 Sed? --- 你的意思是你的方法是先将缓冲区保存到文件中,然后对文件运行 Sed,然后将文件保存回 Screen 的缓冲区?
    • 1) 让屏幕写入缓冲区,2) 在其上运行 sed,3) 读回缓冲区。我不知道有任何其他方法可以做到这一点,但是通过正确的绑定,您可以使其相当无缝。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多