Answers:
使用bash
4.4或更高版本,并且在支持带括号的粘贴la的终端中xterm
,您可以执行以下操作:
bind 'set enable-bracketed-paste'
(或添加set enable-bracketed-paste
到您的~/.inputrc
)
这将导致在复制提示时插入复制粘贴缓冲区,而不是像输入时那样解释其中的字符(如果该缓冲区包含诸如之类的字符^C
,^Z
并且终端仿真器未将其过滤掉,您仍然可能会遇到问题) 。
zsh
从5.1版开始,默认情况下不会执行此操作。
对于其他外壳或端子,另请参阅:如何保护自己免受此类剪贴板损坏?
xterm
,您可以尝试使用它。您是否perl
在链接的问题上尝试过脚本?
当您粘贴一个“换行符”字符时,会发生这种情况。例如,如果要粘贴多行,或者无意间在行末复制回车符。AFAIK无法实际禁用此行为,但是可以缓解它。
最简单的方法是一次只复制一行,而错过最后一个字符,然后手动添加它。
或者,正如the_velour_fog在下面指出的那样,您也可以将其粘贴到显示非打印字符的编辑器中,然后在不使用换行符的情况下进行重新选择。
对于GNU / Linux发行版,存在一种或两种解决方法,但不知道该概念是否可以移植到MacOS。无论如何,请在这里查看一下,看看mac中是否有可以更改的类似文件。不幸的是,我对此表示怀疑。
粘贴之前,键入单引号,然后粘贴。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
控制-a并删除前导'
。使用向左控制和向右控制可快速移动粘贴块(按单词)。或者,如果您的终端设置不支持控制箭头键,则按alt-b和alt-f。
文字换行符实际上是分开命令的,这4行将分别进入命令历史记录。您可能需要将它们更改为;
或&&
。(我不知道这有什么窍门,只需将key-repeat用于向前或向后的单词即可快速到达并手动完成。)
发生这种情况是因为您的粘贴以换行符结尾,并且终端仿真器基本上逐个字符地将粘贴馈送到bash。在此过程中,bash并不真正从机器上认识人类打字员。
我通常在复制粘贴时要格外注意,它不包含换行符,但是您可以尝试以下一种技巧:在粘贴,使用bash之前,键入C-x C-e
。它应该$EDITOR
以一个空文件启动。无论您保存在该文件中并退出,都会执行bash。因此,您现在可以将命令粘贴到编辑器中,可能进一步进行操作,然后一次性运行它们。
我不涉及到公司,我是非常满意的客户。尝试以下终端程序:http : //www.emtec.com/zoc/index.html。也有Mac版本可用。
如果我违反此答案的任何SE规则,请告知我,然后删除答案。
编辑:
当我正确理解其他答案时,此问题可能是由终端程序引起的。ZOC终端程序是一款专业软件,专为工作而设计。它将粘贴您选择的文本,而没有任何其他字符。您可以将会话记录在单独的文本文件中。还有更多
更新:
终端程序有一个选项Paste without final 'newline'
。可能会有所帮助。