为什么我的终端屏幕中偶尔会启用括号粘贴模式?

art*_*vel 33 command-line bash paste

我使用 Ubuntu 14.04,我的终端屏幕有一个奇怪的问题,这让我很烦恼。如果我做错了什么或非 linux 方式,有人可以帮助我或解释我吗?我有某种解决方案,但我想了解为什么会一次又一次地发生这种情况。

我经常从我的笔记或互联网上复制 bash 命令,有时我会得到奇怪的 0~ 和 1~ 符号,它们包装了我复制的东西。这很烦人,而且这种情况完全随机发生。

经过长时间的搜索,我发现这个东西叫做bracked paste mode所以现在我使用这个命令printf "\e[?2004l"来修复我的终端,如果这个模式突然启用。

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

小智 17

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

暂时尝试一下,在 bash 中:

bind 'set enable-bracketed-paste off'
Run Code Online (Sandbox Code Playgroud)

然后,如果你喜欢怎样的行为方式,你可以把设置在您~/.inputrc或系统范围内的/etc/inputrc(或者是任何一个是在Ubuntu)。

  • 所有这些对我来说似乎都是这样做的,所以我不能输入字母“p”(只有小写的“p”),或者像粘贴一样粘贴,没有别的 (4认同)

MOH*_*HRE 9

您可以将该命令放在您的bashrc. 然后每次打开终端时它都会适用。

只需在最后输入vi ~/.bashrc并添加printf "\e[?2004l"并保存文件:wq


小智 7

要回答您关于为什么会发生这种情况的原始问题,这里有一个可能的情况:

  • 我的家用电脑有一个新版本的 zsh 支持括号粘贴(我们称之为 shell A)
  • 我将 shell 设置为旧版本的 bash 进入计算机,该版本不支持括号粘贴(shell B)

问题是,我的终端程序仍然认为在从 shell A 到 shell B ssh 时启用了括号粘贴,因此它不断添加粘贴内容周围的字符(0~ 和 1~ 位)。Shell B 不支持它们,所以它只是不变地通过它们。您必须通过让您的 shell 打印一个特殊的转义序列来告诉您的终端关闭括号内的粘贴 - 这就是这样printf "\e[?2004l"做的。

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

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

  2. 如果您想继续在外壳 A 上使用括号粘贴,但在外壳 B 上禁用,请将转义序列添加到您的.bashrc(@MOHRE's answer)

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

旁注:如果您使用的是 GNU 屏幕,则需要printf在屏幕外运行该命令。它在里面似乎不起作用。


小智 5

我通过将以下内容添加到我的 ~/.bashrc 文件中解决了这个问题:

if [[ $- == *i* ]]; then
    bind 'set enable-bracketed-paste off'
fi
Run Code Online (Sandbox Code Playgroud)

这样,当我执行 bash 脚本时,我就不会收到绑定警告。