我的终端遇到问题,当我粘贴文字时,它以00~
为前缀,后缀为01~
。
例如,我将突出显示文字并按Command-C
。然后我将Command-V
推入终端,我看到文本的开头和结尾都会弹出那些奇怪的字符。
例如,我可以突出显示text
并将其粘贴到终端中。然后我看到00~text01~
。
文本可以来自任何地方,甚至来自终端本身。我没有安装任何复制/粘贴插件,这只是普通的复制/粘贴。我正在使用默认的Mac终端而没有任何修改。
我做了一些在线搜索,显然Paste将文本包装成特殊字符,以便某些应用程序会看到这是粘贴的文本并将正确处理它。但是,终端没有正确处理,因此不会删除奇怪的字符。显然,这种粘贴模式称为“括号粘贴模式”http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Bracketed-Paste-Mode
我发现另一个问题就如何在linux机器上解决这个问题提供了解决方案,但在尝试该解决方案之后我仍然遇到同样的问题。
有人可以告诉我如何禁用终端的括号粘贴模式吗?或者告诉我摆脱这些令人讨厌的角色的正确方法?
答案 0 :(得分:3)
这可能不会直接适用于您的问题,但在我的情况下,我发现这种症状可能是由我的选择编辑'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。
答案 1 :(得分:2)
Text已进入"系统" (例如X,MacOS / Aqua)从某个地方复制缓冲区,可能来自同一个终端。这里的文字没有改变。
将文字粘贴到终端;也就是说," system"看到终端(例如xterm
)从复制缓冲区接收未改变的字符序列。终端知道这是粘贴,而不是键盘输入。
终端将缓冲区中的char序列发送到前台运行的程序(shell,编辑器等)。对于程序,所接收的数据与通过键盘的用户输入无法区分。
这种透明度(或不透明度等等)往往是一个好东西,就像透明管道管道的Unix范例一般。但有时程序可以更好地处理数据,如果他们知道它被粘贴了。例如,像vim这样的编辑器可以关闭自动缩进 - 毕竟,代码可能已经缩进了!
输入括号内的粘贴。由于主要原因,透明数据管道的范例无法改变;但是数据可以用序列进行修饰,这些序列通常不会出现在终端输入中以标记其开始和结束。如果终端是这样配置的 - 对于xterm,配置将发送ESC [ ? 2 0 0 4 l
- 粘贴的数据用转义序列括起来:ESC [ 2 0 0 ~ <buffer contents> ESC [ 2 0 1 ~
。
前台程序收到这个&#34;装饰&#34;数据,它可以由程序来处理。一个天真的程序将所有这些视为用户输入,这就是你所看到的。
您的情况有两个问题:终端在括号粘贴模式下意外终止;和接收程序 - 可能是shell - 没有处理它。
一个解决方案是user83536:识别使终端处于该状态的程序,并通过一个包装器调用它,该程序包在程序结束后再次关闭括号中的粘贴模式。
< / LI>该程序可能尝试关闭括号中的粘贴模式但失败了。一个原因可能是它发送了错误的转义序列。尝试将TERMINAL
环境变量设置为最能描述终端的值。
尝试在违规应用程序中关闭括号中的粘贴。在vim中,人们会说set t_BE=
。这可以防止vim将终端置于括号粘贴模式,当它在会话中设置时,发送&#34;结束括号粘贴模式&#34;到终点站。
拥抱括号内的糊状物。这似乎是个好主意。对于使用readline
的bash和其他程序,可以使用set enable-bracketed-paste on
。对于vim,可以遵循建议here.