gpt4 book ai didi

linux - 如何在 Mac OS X 默认终端上禁用来自 "bracketed paste mode"的奇怪字符?

转载 作者:IT王子 更新时间:2023-10-29 01:00:09 26 4
gpt4 key购买 nike

我的终端遇到了一个问题,当我粘贴文本时,它的前缀是 00~,后缀是 01~

例如,我将突出显示文本并按下 Command-C。然后我将 Command-V 插入终端,我看到那些奇怪的字符在文本的开头和结尾弹出。

例如,我可以突出显示 text 并将其粘贴到终端中。然后我看到 00~text01~

文本可以来自任何地方,甚至来自终端本身。我没有安装任何复制/粘贴插件,这只是普通的复制/粘贴。我使用的是默认的 Mac 终端,没有任何修改。

我在网上做了一些搜索,显然粘贴将文本包装在特殊字符中,这样某些应用程序就会看到这是粘贴的文本并会正确处理它。但是,终端没有正确处理这个问题,因此没有删除奇怪的字符。显然,这种粘贴模式称为“括号粘贴模式”http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Bracketed-Paste-Mode

我发现另一个问题给出了如何在 linux 机器上解决这个问题的解决方案,但在尝试该解决方案后我仍然遇到同样的问题。

有人能告诉我如何禁用终端的括号粘贴模式吗?或者告诉我摆脱这些烦人字符的正确方法?

最佳答案

粘贴文本时会发生什么

  1. 文本已从某处(可能来自同一终端)进入“系统”(例如 X、MacOS/Aqua)复制缓冲区。此处未更改文本。

  2. 文本被粘贴到终端;也就是说,“系统”确保终端(例如 xterm )从复制缓冲区接收未改变的字符序列。终端知道这是一个粘贴,而不是键盘输入。

  3. 终端将缓冲区中的字符序列发送到在前台运行的程序(shell、编辑器等)。对于程序来说,接收到的数据与用户通过键盘输入的数据无法区分。

讨论

这种透明性(或不透明性?随便什么)通常是一件好事,就像一般的透明管道管道的 Unix 范例一样。但有时,如果程序知道数据已被粘贴,则它们可以更好地处理数据。例如,像 vim 这样的编辑器可以关闭自动缩进——毕竟,代码可能已经缩进了!

括号粘贴

输入带括号的粘贴。出于主要原因,透明数据管道的范式不能改变;但是数据可以用通常不会出现在终端输入中的序列来标记其开始和结束。如果终端是这样配置的——对于 xterm,配置将是发送 ESC [ ? 2 0 0 4 h — 粘贴的数据用转义序列括起来:ESC [ 2 0 0 ~ <buffer contents> ESC [ 2 0 1 ~ .

前台程序接收到这个“修饰过的”数据,并由程序来处理它。天真的程序将所有这些都视为用户输入,这就是您所看到的。

可以在 this article 中找到关于括号粘贴的很好的讨论。 .

补救措施

您的情况有两个问题:终端意外地以括号粘贴模式结束;并且接收程序(大概是 shell)不处理它。

  • 一个解决方案是 user83536 的:识别使终端处于该状态的程序并通过包装器调用它,该包装器在程序结束后简单地再次关闭括号粘贴模式。

  • 程序可能尝试关闭括号粘贴模式但失败了。原因之一可能是它发送了错误的转义序列。尝试设置 TERMINAL环境变量设置为最能描述您的终端的值。

  • 尝试关闭有问题的应用程序中的括号粘贴。在 vim 中会说 set t_BE= .这可以防止 vim 将终端置于括号粘贴模式,并且当它在 session 中设置时,将“结束括号粘贴模式”发送到终端。

  • 接受带括号的粘贴。这似乎是个好主意。对于使用 readline 的 bash 和其他程序一个会放set enable-bracketed-paste on .对于 vim,可以遵循建议 here.

关于linux - 如何在 Mac OS X 默认终端上禁用来自 "bracketed paste mode"的奇怪字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com