如何从剪贴板中捕获

如何从剪贴板中捕获

我想将一些文本粘贴到终端中并将其保存到文件中,而不使用编辑器,而只需使用“cat”。
但是文本中的行或制表符太长,无法使用简单的命令(如“cat >test.txt”或“cat <<'EOF' >test.txt”(“此处文档”))来实现。

在 bash 的“此处文档”模式下,如果粘贴的文本数据包含制表符,则会导致自动完成。
如果我使用“--noediting”启动 bash,在某些系统上,粘贴行的长度限制为 256 个字符,其余粘贴的文本将被丢弃。
如果我直接粘贴到 cat 的输入中(没有 <<'EOF'),最大行数也是 256。

如果我做:

stty raw; cat >test.txt; stty sane

,行长度不再受限制,但无法将 EOF 发送到 cat 的输入。
如果我启用 eof char:

stty raw icanon eof '^d'; cat >test.txt; stty sane

长线丢失。

另外,如果我不禁用回显:

stty -echo

,Solaris 10 与 Putty 的组合会导致大量文本(约 1500 个字符)丢失,有时会导致出现空文件。

我最接近想要的是超时杀死猫:

( sleep 15; pkill cat ) & stty raw -echo; cat >test.txt; stty sane; echo done

或者使用 bash --noediting 和 raw:

bash --noediting
stty raw -echo icrnl
cat <<'EOF' >test.txt; stty sane

答案1

如果您使用的是 bash,则可以在粘贴之前禁用制表符补全,然后使用以下bind命令重新启用它:

bind '\C-i:self-insert'
# paste away
bind '\C-i:complete'

虽然这很笨重,但是却有效。

在 bash 命令行上手动输入时,可以通过先按 CTRL-V 然后按 tab 来输入文字制表符。显然,粘贴时无法执行此操作,这让我很恼火,于是我修补了我最喜欢的终端程序iTerm2使用“选择性粘贴”命令,通过 CTRL-V、制表符序列发送文字制表符。

我今晚才编写并提交了这个补丁,所以如果你想要一个可以做到这一点的 iTerm2 版本,你必须从编译你自己的我在 GitHub 上的 fork使用 Xcode。希望它能合并到主应用程序中,如果合并了,我会更新这个答案。编辑:我所做的更改现在位于 iTerm2 的主分支中。使用编辑 -> 使用文字标签粘贴命令。

如果您使用的是不同的操作系统或终端程序,抱歉,我无法提供帮助。

相关内容