如何在Mac OS X默认终端上的“括号粘贴模式”中禁用奇怪的字符?

Ste*_*ers 5 linux macos

我的终端机遇到问题,在我粘贴文本时,该文本以前缀00~和后缀01~

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

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

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

我在网上做了一些搜索,显然Paste用特殊字符包裹了文本,以便某些应用程序可以看到这是粘贴的文本并可以正确处理。但是,终端无法正确处理此问题,因此未删除奇怪的字符。显然,此粘贴模式称为“括号内粘贴模式” http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Bracketed-Paste-Mode

我发现了另一个问题,该问题为如何在Linux机器上解决此问题提供了解决方案,但是尝试该解决方案后,我仍然遇到相同的问题。

有人可以告诉我如何禁用终端的方括号粘贴模式吗?还是告诉我消除这些烦人角色的正确方法?

wea*_*ver 6

要在终端中禁用括号粘贴模式,请运行以下命令:

printf '\e[?2004l'
Run Code Online (Sandbox Code Playgroud)

  • 很高兴听到***您的修复程序到底做了什么***的解释,而不仅仅是*“在这里,将其粘贴到您的终端并按 Enter 键”*。 (8认同)

use*_*536 5

这可能并不直接适用于您的问题,但在我看来,这种症状很可能是由我的选择编辑“ mcedit”(午夜指挥官)引起的

为了缓解错误问题,我在.bashrc文件中添加了以下功能:

### vvv 'function mcedit' is a fix-up for the ~0/~1 paste problem function mcedit() { command mcedit $@ ; printf '\e[?2004l' ; }

然后'source .bashrc'

现在,每次执行“ mcedit”时,当我关闭以重置“托架粘贴模式”时,它将自动添加“ printf“ \ e [?2004l””

为我工作,YMMV。


Pet*_*ica 5

粘贴文本时会发生什么

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

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

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

讨论

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

带括号的粘贴

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

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

这篇文章中可以找到对括号粘贴的很好的讨论。

补救措施

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

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

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

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

  • 拥抱括号糊。这似乎是个好主意。对于使用readline一个的 bash 和其他程序,将把set enable-bracketed-paste on. 对于 vim,可以按照此处的建议进行操作