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

Linux 如何禁用“中的奇怪字符?”;括号内的粘贴模式“;在Mac OS X默认终端上?,linux,macos,Linux,Macos,我的终端遇到了一个问题,当我粘贴文本时,它的前缀是00~,后缀是01~ 例如,我将突出显示文本并按下Command-C。然后我将Command-V推入终端,我看到那些奇怪的字符在文本的开头和结尾弹出 例如,我可以突出显示文本,并将其粘贴到终端中。然后我看到00~text01~ 文本可以来自任何地方,甚至来自终端本身。我没有安装任何复制/粘贴插件,这只是正常的复制/粘贴。我使用默认的Mac终端,没有任何修改 我在网上做了一些搜索,很明显,粘贴将文本包装成特殊字符,以便某些应用程序可以看到这是粘贴的

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

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

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

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

我在网上做了一些搜索,很明显,粘贴将文本包装成特殊字符,以便某些应用程序可以看到这是粘贴的文本,并正确处理它。但是,终端没有正确处理这个问题,因此没有删除奇怪的字符。显然,这种粘贴模式被称为“带括号的粘贴模式”

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


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

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

为了缓解bug问题,我在.bashrc文件中添加了以下函数:

####vvv“function mcedit”是对~0/~1粘贴问题的修复
函数mcedit(){command mcedit$@;printf'\e[?2004l';}

然后是“source.bashrc”

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

对我来说很有用,YMMV。

粘贴文本时会发生什么
  • 文本已从某个地方进入“系统”(例如X、MacOS/Aqua)复制缓冲区,可能来自同一个终端。此处不更改文本

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

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

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

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

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

    关于带括号的糊料的详细讨论,请参见

    补救措施 在您的案例中有两个问题:终端意外地以括号中的粘贴模式结束;接收程序(可能是shell)不处理它

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

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

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

    • 拥抱括号内的粘贴。这似乎是个好主意。对于bash和其他使用
      readline
      的程序,可以将
      设置为启用括号内的粘贴
      。对于vim,可以遵循以下建议


    我自己从未见过它,但我倾向于像这样使用
    pbcopy
    命令| pbcopy来捕获输出。堆栈溢出是一个编程和开发问题的网站。这个问题似乎与主题无关,因为它与编程或开发无关。请参见帮助中心。也许或者会是一个更好的地方很抱歉!我已经习惯了直接去stackoverflow问我所有的问题。有没有办法移动问题?最好的解决方法是什么?根据post,打开括号粘贴模式的终端代码是
    \e[?2004h
    ,而不是
    \e[?2004l
    \e>[?2004l
    用于禁用此模式。@谢谢,似乎是对的。