当我粘贴到终端会话中时,shell 会立即执行该命令,而无需我按 Enter 键。
我真的不知道如何禁用这种行为。
我正在使用 MacOS Yosemite 上预装的终端。
答案1
使用bash
4.4 或更高版本并且在支持括号粘贴 la 的终端中xterm
,您可以执行以下操作:
bind 'set enable-bracketed-paste'
(或添加set enable-bracketed-paste
到您的~/.inputrc
)
这将导致复制粘贴缓冲区在提示符处插入,而不是像键入一样解释其中的字符(如果该缓冲区包含类似 的字符^C
,^Z
并且您的终端模拟器不会将它们过滤掉,您仍然可能会遇到问题) 。
zsh
从 5.1 版本开始默认这样做。
对于其他 shell 或终端,另请参阅:我如何保护自己免受这种剪贴板滥用行为的侵害?
答案2
当您粘贴“换行”字符时会发生这种情况。例如,如果您要粘贴多行,或者您无意中在行尾复制了回车符。据我所知,没有办法真正禁用这种行为,但有一些方法可以减轻它。
最简单的方法是一次复制一行并错过最后一个字符,然后手动添加它。
或者,正如 the_velour_fog 下面指出的那样,您也可以将其粘贴到显示非打印字符的编辑器中,然后在没有换行符的情况下重新选择。
对于 GNU/Linux 发行版,有一两个解决方法,但不知道这个概念是否可以移植到 MacOS。不管了,先看看这里看看 mac 中是否有类似的文件可以修改。不幸的是,我对此表示怀疑。
答案3
粘贴之前,输入单引号,然后粘贴。 control-c 和向上箭头将其编辑为一大行。
如果文本包含单引号但不包含双引号,双引号也可以使用。如果它包含或在双引号内扩展的其他内容,这是可以的$
,因为您实际上并没有将带引号的巨行作为一个命令运行。
您实际上无法在那里编辑整个内容,因为换行符确实会启动一个连续提示(不是官方术语),而不是制作一大长行。
鉴于这 4 行:
echo
ls
foo
bar
按照我的建议粘贴将导致屏幕上出现以下结果:
$ 'echo
> ls
> foo
> bar <or cursor here if you didn't include a trailing newline
> [cursor here]
然后您可以按 Control-C 和向上箭头。 (control-C 会销毁与光标同一行上的所有内容,因此如果那里有有用的文本,请先按回车键。)
另一种方法是关闭报价并按回车键,然后按向上箭头键。
反正,向上箭头后
$ 'echo
ls
foo
bar
control-a 并删除前导'
.使用左控制和右控制可在粘贴块中快速移动(通过文字)。或者,如果您的终端设置不支持 control-arrow-keys、alt-b 和 alt-f。
换行符实际上是分隔命令的,这 4 行将分别进入你的命令历史记录。您可能想将它们更改为;
或&&
。 (我不知道这方面的技巧,只需使用按键重复向前或向后单词即可快速到达那里并手动完成。)
答案4
我是不是就公司而言,我是一个非常满意的客户。试试这个终端程序:http://www.emtec.com/zoc/index.html。还有 Mac 版本可用。
如果我违反了此答案的任何 SE 规则,请告诉我,我会删除该答案。
编辑:
当我正确理解其他答案时,这个问题可能是由终端程序引起的。 ZOC终端程序是一款专为工作而完美设计的专业软件。它会粘贴您选择的文本,不带任何其他字符。您可以将会话记录在单独的文本文件中。还有更多
更新:
终端程序有一个选项Paste without final 'newline'
。也许这有帮助。