我使用 Ubuntu 14.04,我的终端屏幕出现了一个奇怪的问题,让我很烦。有人能帮我解决这个问题吗?或者告诉我我是不是做错了什么,或者不是 Linux 的方式?我有某种解决方案,但我想知道为什么这种情况一再发生。
我经常从笔记或互联网上复制 bash 命令,有时会出现奇怪的 0~ 和 1~ 符号,这些符号会将我复制的内容括起来。这非常烦人,而且这种情况完全是随机发生的。
经过长时间的搜索,我发现这个东西叫做括号粘贴模式所以现在printf "\e[?2004l"
如果此模式突然启用,我会使用此命令来修复我的终端。
是否有可能以某种方式永久禁用此功能?我现在使用的所有 Ubuntu 机器都遇到了这个问题。以前我使用过 Ubuntu 10.10 和 12.04,从未遇到过这样的问题。
答案1
您可以禁用括号粘贴模式。
若要暂时尝试一下,请在 bash 中:
bind 'set enable-bracketed-paste off'
然后,如果您喜欢这种行为,您可以将设置放在您的~/.inputrc
、或系统范围内/etc/inputrc
(或 Ubuntu 上的任何位置)。
答案2
您可以将该命令放入您的bashrc
。然后它将在您每次打开终端时应用。
只需在末尾输入vi ~/.bashrc
并添加printf "\e[?2004l"
,然后使用以下代码保存文件:wq
答案3
回答你最初的问题为什么发生这种情况时,可能出现以下情况:
- 我家里的电脑有新版本的 zsh,支持括号粘贴(我们称之为 shell A)
- 我使用 ssh 连接到计算机,并将 shell 设置为旧版本的 bash,不支持括号粘贴(shell B)
问题是,当从 shell A 切换到 shell B 时,我的终端程序仍然认为括号粘贴已启用,因此它会不断在粘贴的内容周围添加字符(0~ 和 1~ 位)。Shell B 不支持它们,因此它只是将它们原封不动地传递过去。您必须通过让 shell 打印一个特殊的转义序列来告诉终端关闭括号粘贴 - 这就是它的作用printf "\e[?2004l"
。
有几种方法可以解决这个问题:
如果你根本不关心括号粘贴,请在 shell A 上将其关闭,这样它就不会首先启用(@jwd 的答案)
如果您想继续在 shell A 上使用括号粘贴,但在 shell B 上禁用,请将转义序列添加到您的
.bashrc
(@MOHRE 的答案)升级 shell B 以支持括号粘贴,以便它正确解释那些 0~ 和 1~ 字符。
附注:如果您使用的是 GNU screen,则需要printf
在 screen 外运行该命令。在 screen 内似乎不起作用。
答案4
我通过将以下内容添加到我的 ~/.bashrc 文件来解决了这个问题:
if [[ $- == *i* ]]; then
bind 'set enable-bracketed-paste off'
fi
这样,当我执行 bash 脚本时就不会收到绑定警告。