MacOS下iterm粘贴时会被自动加上00~和01~的问题
当我们在MacOS下,从浏览器或非终端应用中复制内容到iterm终端里面的时候,经常会发现这段内容的前后会被加上00~和01~。很多时候会烦恼,但这其实是iterm的一个粘贴分界符(Bracketed Paster Mode)的功能。
1. 为什么会加上00~和01~?
这两个字符序列 (00~ 和 01~) 是 iTerm2 或其他兼容终端模拟器(如Vim、Emacs、Bash/Zsh等)启用的 粘贴分界符模式 (Bracketed Paste Mode) 的标志。
- 00~ (或 \033[200~):表示粘贴内容的开始。
- 01~ (或 \033[201~):表示粘贴内容的结束。
这个功能主要的目的是为了安全和正确处理粘贴内容:
安全(避免恶意代码执行):当你从网页上复制一行命令(例如,一个curl命令后面跟着rm -rf /)并粘贴到终端时,如果没有分界符模式,终端会立即执行你粘贴的所有内容。分界符模式会告诉终端程序(如Bash/Zsh或文本编辑器):“现在开始,直到遇到结束标志,接收到的所有数据都是粘贴的,而不是用户键入的。” 这使得程序可以在执行前对粘贴的内容进行检查、格式化或特殊处理,从而防止意外或恶意的命令执行。
正确性(文本编辑器):在Vim或Emacs等终端文本编辑器中,如果你粘贴了多行代码,如果没有这个模式,编辑器可能会将粘贴的每一行视为用户按下了Enter键,从而错误地应用自动缩进、换行等行为。有了分界符,编辑器就知道这是一段需要原样插入的文本,从而保持代码的原始格式。
2.如何禁用它?
如果你知道你在做什么(因为这是一个安全功能),那么有以下几种方式可以禁用:
永久禁用iterm的分界符模式
这是最直接的解决办法,它会彻底禁用iTerm2向Shell发送粘贴分界符。
打开 iTerm2 Preferences (偏好设置)。
选择 Profiles (配置文件)。
选择你当前使用的配置文件(通常是 Default)。
点击 Terminal (终端) 标签页。
找到 Disable session-specific paste setting(或者类似名称,不同iTerm2版本可能略有不同),然后勾选它。或者,查找与 Bracketed Paste Mode 相关的选项,并将其禁用。
临时禁用iterm的分界符模式
粘贴前在终端输入 reset 会临时禁用iterm的分界符模式。
Comments powered by Disqus.