我想将一些文本粘贴到终端中并将其保存到文件中,而不使用编辑器,而只需使用“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 的主分支中。使用编辑 -> 使用文字标签粘贴命令。
如果您使用的是不同的操作系统或终端程序,抱歉,我无法提供帮助。