我经常想从终端复制一组没有输出的命令;比如说这样的块:
prompt$ less file1.txt
prompt$ less file2.txt
prompt$ dhex file2.txt
prompt$ less file3.txt
现在,如果我用鼠标选择这段文本,然后用 Ctrl-Shift-C 复制它;然后当我粘贴到文本文件中时,提示就出现了(正如预期的那样)——然后我不得不浪费时间删除提示:)
所以我很纳闷 - gnome-terminal 是否有一个设置,这样当我进行同样的复制时,我最终只会得到命令 - 没有提示?这就是我最终粘贴时想要的:
less file1.txt
less file2.txt
dhex file2.txt
less file3.txt
我对一个解决方案感兴趣,它将允许我将其放入剪贴板中,只需使用鼠标选择和 Ctrl-Shift-C 即可;我知道我可以这样做history X
,但随后我必须grep
这样做 - 并想出一个合适的 grep 表达式(如果我用记录终端会话的打字稿,也会出现同样的问题script
)。
有没有什么工具可以实现这一点?如果没有gnome-terminal
,有没有其他可以在 Gnome 下使用的终端可以提供这样的功能?
答案1
答案2
假设你使用 bash 作为你的 shell,你可能只需执行以下操作:
history -a ; tail -5 $HISTFILE
用您想要返回的任意数量的命令替换 5。这样您应该会得到一个干净的列表,可以轻松复制/粘贴。不是确切地您似乎正在寻找这种方法,但它可能适合。
答案3
好吧,这个问题让我很烦恼,所以最后我编写了一个非常接近的解决方案:Glipper 剪贴板管理器的过滤插件,它允许在过滤函数中进行正则表达式处理,可以在复制操作时应用于剪贴板内容;在这里发布:
...以下是屏幕截图:
但是,由于我只想偶尔使用此功能,切换过滤可能不是最好的主意(因为您必须切换到 ON、复制/粘贴,然后切换到 OFF) - 因此当单击过滤器子菜单项时,插件会绕过正常操作,如果Ctrl、Alt或c被按住;所以我执行一次性提示过滤的“最小”操作是这样的:
- 在终端中选择一段文本(包括提示)
- 按Ctrl+ Alt+ c(默认快捷键)调出 Glipper 菜单窗口
- Ctrl按住或中的任意一个(或全部)Alt按钮c,
- 将鼠标悬停在过滤菜单项上
- 将鼠标悬停在所需的过滤器(子)菜单项上并单击(例如
TermCmdLog
)
- Glipper 菜单消失 - 按住的键现在可以释放
- 移动指针并单击以聚焦文本编辑器
- 粘贴 - 粘贴的内容通过单击的过滤器进行修改(例如,
TermCmdLog
输入的提示被删除,非提示行被注释)
最后,我还是希望终端本身有一个用于过滤输出的键盘和弦(例如,按下Ctrl+ Shift+ a,然后释放a,然后在按住其他键的同时按下c) - 但这对于单个过滤器来说就可以了;如果您想在运行时从多个过滤器中选择一个,那么又有一个需要另一个操作来做选择的问题;如果通过菜单项的 GUI 窗口解决了这个问题 - 那么我想这个插件也一样好。甚至更好的是,它适用于 Gnome 桌面下的任何 GUI 文本(可复制)源 - 而不仅仅是终端。
不幸的是,它是为 Gnome/Gtk 2 / Python 2.7 开发的,所以已经被弃用了;不过,希望它能够对其他人有用(直到我听到更好的解决方案 - 希望在这个帖子中:)
),
干杯!
答案4
如果您使用 tmux 终端多路复用器,您可以轻松地完成此操作,甚至更多!
Noam Manos 已经在另一个答案中指出 Gnome Terminal 允许使用 Ctrl + 鼠标单击并拖动进行块复制。我只是想指出另一种更强大的替代方案。tmux 支持将您的终端置于“复制模式”,并允许您进行块复制等等——它甚至支持多个粘贴缓冲区,您可以复制并在以后使用。
我在 .tmux.conf 文件中使用以下几行来使用 vi 键绑定进行块复制:
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle
学习设置和使用 tmux 确实需要花费一些精力,但它是值得的,而且我对此很满意。