解决麒麟系统使用vi编辑器粘贴内容时行后出现[201~问题
在麒麟系统(以及大多数 Linux 发行版)中使用 vi 或 vim 编辑器时,粘贴文本后出现 [201~、[200~ 等字符,这不是编码乱码问题,而是终端的“括号化粘贴”(Bracketed Paste)功能与 Vim 配置冲突导致的。
1. 问题原因
现代终端模拟器(如 GNOME Terminal、Konsole、Xshell、SecureCRT等)支持一种名为 Bracketed Paste Mode 的功能。
- 当你粘贴文本时,终端会在内容头部发送转义序列
ESC [ 200 ~,在尾部发送ESC [ 201 ~。 - 目的是告诉应用程序:“这是一次完整的粘贴操作,不要对中间的内容进行自动缩进或语法分析”。
- 冲突点:如果你的 Vim 版本较旧,或者未正确识别终端类型,Vim 无法解析这些控制序列,会将它们当作普通文本显示出来,因此你看到了
[201~和[200~。
2. 解决方案
请按照以下顺序尝试解决,通常方法一即可彻底解决。
方法一:在 Vim 中禁用括号化粘贴识别(推荐)
通过设置 Vim 选项,忽略终端发送的粘贴标记序列。
临时生效(当前会话):
在 Vim 的命令模式下(按 Esc),输入以下命令并回车:
1 | :set t_BE= |
解释:t_BE 是 Vim 中用于定义“结束括号化粘贴”序列的选项。将其设置为空,Vim 就会忽略终端发送的 201~ 标记。
永久生效(写入配置文件):
编辑用户级 Vim 配置文件:
1
vi ~/.vimrc
在文件中添加以下行:
1
set t_BE=
保存退出(
:wq)。下次打开 Vim 时该问题将不再出现。
方法二:使用 Vim 的 paste 模式(解决格式错乱+乱码)
如果你不仅看到 [201~,还发现粘贴后的代码缩进错乱(如每行前多出空格),应使用 Vim 专用的粘贴模式。该模式会自动处理括号化粘贴序列。
操作步骤:
在 Vim 命令模式下,先启用粘贴模式:
1
:set paste
按
i进入插入模式,然后进行粘贴(右键或Ctrl+Shift+V)。粘贴完成后,按
Esc退出插入模式,并关闭粘贴模式:1
:set nopaste
优化体验(设置快捷键):
为了避免每次手动输入命令,可以在 ~/.vimrc 中添加快捷键映射:
1 | vim" 按 F10 切换 paste 模式 |
这样只需按 F10 即可在“正常模式”和“粘贴模式”之间切换。
方法三:检查并更新 Vim 版本
较新版本的 Vim(8.0+)和 Neovim 已经原生支持 Bracketed Paste,能自动识别并隐藏这些标记。如果上述方法无效,可能是 Vim 版本过旧或终端兼容性问题。
检查当前 Vim 版本:
1
vim --version
如果版本较低,建议更新:
1
2
3
4bashsudo apt update
sudo apt install vim
# 或者在麒麟 V10 上使用 dnf
sudo dnf install vim-enhanced
3. 如何区分是“编码乱码”还是“控制序列乱码”?
- 控制序列乱码(本题情况):
- 特征:出现明确的数字和波浪号,如
[200~、[201~、[D、[C等。 - 原因:终端控制指令未被解析。
- 解决:设置
t_BE=或使用paste模式。
- 特征:出现明确的数字和波浪号,如
- 编码乱码:
- 特征:出现问号
???、方块□□□、或完全不可读的怪异字符(如“锟斤拷”)。 - 原因:文件编码(GBK/UTF-8)与终端/Vim 编码设置不匹配。
- 解决:检查
locale设置,或在 Vim 中设置set encoding=utf-8、set fileencodings=utf-8,gbk。
- 特征:出现问号
4.总结
对于麒麟系统中 Vim 粘贴出现 [201~ 的问题,最直接有效的修复是在 ~/.vimrc 中添加 **set t_BE=。如果同时伴有缩进错乱,请配合使用 :set paste** 模式。
- Title: 解决麒麟系统使用vi编辑器粘贴内容时行后出现[201~问题
- Author: 𝓓𝓸𝓷
- Created at : 2026-11-04 11:37:55
- Updated at : 2026-11-04 11:41:30
- Link: https://www.zhangdong.me/vim-201.html
- License: This work is licensed under CC BY-NC-SA 4.0.
