Mac Os 的终端有一个鲜为人知很少使用的功:是括号粘贴模式(bracketed paste mode)。当您处于括号粘贴模式并粘贴到终端时,内容将由序列 \e[200~ 和 \e[201~
包裹。
例如,假设我从网站复制了字符串 echo 'hello'\n
。当我粘贴到终端时,它会向正在运行的任何程序发送 \e[200~echo 'hello'\n\e[201~
。
这个功能可以让程序可以区分您手动输入的内容和您粘贴的内容。
为什么需要这个功能呢?例如,许多终端应用程序专门处理某些字符:特别是当您按下回车键时,它会发送一个换行符。大多数 shell 会在此时执行输入缓冲区的内容。这通常是您想要的,但也可能不是。同时,这意味着如果您粘贴到终端中的任何内容中有换行符,它们也会运行输入缓冲区的内容。
有时发现突然终端打开了括号粘贴模式,为什么终端会打开括号粘贴模式呢?其实大部分情况都不是我们主动开启的,是由个别软件在无意中将括号粘贴模式开启的。当开启了括号粘贴模式粘贴的字符串收尾会多了一对字符:00~ xxx 01~
,一般情况下我们把括号粘贴模式关闭就可以了。
解决方案
只需在终端关闭括号粘贴模式即可:
printf "\e[?2004l"
那如果想主动开启括号粘贴模式该如何操作呢?也只需在终端开启括号粘贴模式即可:
printf "\e[?2004h"
评论