为什么在我的终端屏幕上偶尔启用包围式粘贴模式?


23

我使用Ubuntu 14.04,终端屏幕出现一个奇怪的问题,困扰着我很多。有人可以帮我解决这个问题,或者如果我做错了什么或不是Linux方式,请向我解释一下?我有某种解决方案,但我想了解为什么这会反复发生。

我经常从笔记或Internet复制bash命令,有时我会得到奇怪的0〜和1〜符号,这些符号包装了我复制的内容。这很烦人,而且发生的方式完全是随机的。

经过长时间的搜索后,我发现此方法称为“ 括号粘贴”模式,因此,printf "\e[?2004l"如果突然启用此模式,现在我可以使用此命令修复终端。

是否可以通过某种方式永久禁用此功能?我在现在工作的所有Ubuntu计算机上都遇到了它。以前,我使用Ubuntu 10.10和12.04,以前从未遇到过此类问题。

Answers:


11

您可以禁用方括号粘贴模式。

要临时尝试,请使用bash:

bind 'set enable-bracketed-paste off'

然后,如果您喜欢它的行为方式,则可以将该设置放在~/.inputrc或系统范围内的位置/etc/inputrc(或在Ubuntu上的任何位置)。


4
这一切对我来说似乎都是使它成为可能,所以我无法键入字母“ p”(只能输入小写字母“ p”),也不能像任何东西一样粘贴它,仅此而已
布赖恩说请

@BrianLeishman由于bind解析无法识别的参数的特殊方式,如果您使用版本7之前的Readline或版本4.4之前的Bash运行此命令,将会发生这种情况。在下一版本的Ubuntu(17.04)之前,此答案没有任何用处。
Anthony G-Monica的正义

printf方法有效,但将其放入my时不起作用.bashrc,并且该功能会以某种方式定期重新启用。该bind方法破坏了我的键盘(p, and putting that line in my 在10秒钟内不起作用〜/ .inputrc`起作用,然后在-enaset-enaset-...使用10秒钟后控制台开始永久退出。我最终只是从源代码手动升级到bash 4.4来修复愚蠢的行为问题

1
正确的命令是bind 'set enable-bracketed-paste off'(用空格代替第一个`-``。似乎无法编辑一个字符。–
箭头

7

您可以将该命令放入bashrc。然后,它将在您每次打开终端时应用。

只需键入vi ~/.bashrcprintf "\e[?2004l"在末尾添加,然后使用:wq


是的,我起初实际上是这样做的:)后来我按照@jwd的建议禁用了此模式。
artemdevel

1
echo 'printf "\e[?2004l"' >> ~/.bashrc一行执行相同的操作,您可以使用进行验证tail -n1 ~/.bashrc。无需使用vi
pzkpfw

6

要回答您为什么会发生这种情况的原始问题,下面是一个可能的情况:

  • 我的家用计算机具有支持括号内粘贴的新版zsh(我们将其称为shell A)
  • 我将外壳设置为较旧版本的bash放入计算机中,该计算机不支持带括号的粘贴(外壳B)

问题是,我的终端程序仍然认为从外壳A切换到外壳B时启用了括号粘贴,因此它会继续在粘贴内容周围添加字符(0〜和1〜位)。外壳B不支持它们,因此仅将它们传递给未更改的对象。您必须通过让外壳打印特殊的转义序列来告诉终端机关闭带括号的粘贴-这样做是什么printf "\e[?2004l"

有几种方法可以解决此问题:

  1. 如果您根本不关心括号内的粘贴,请在外壳A上将其关闭,这样一来就永远不会启用它(@jwd的回答)

  2. 如果要在外壳A上继续使用带括号的粘贴,但在外壳B上禁用,请在.bashrc(@MOHRE的答案)中添加转义序列

  3. 升级外壳B以支持带括号的粘贴,因此它可以正确解释那些0〜和1〜字符。

注意:如果您使用的是GNU屏幕,则需要printf在屏幕外运行该命令。进入内部似乎不起作用。


谢谢@rjh :)但是我从未用过zsh或您所描述的ssh有问题。看起来几年前在Ubuntu上配置错误。
artemdevel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.