解决 vim 粘贴代码时缩进混乱
后知后觉 暂无评论

在使用 vim 高版本的时候(6.0 及以上)会发现粘贴大段有格式或者缩进的文本信息时会导致格式混乱。

背景

在终端 vim 中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加。

之前的解决方案就是在本地粘贴传输,或者使用其他编辑器,比如 nano, 或者卸载 vim 使用 vi 进行操作。

实际上的原因是终端把粘贴的文本存入 Keyboard Buffer (键盘缓存)中,vim 则把这些内容作为用户的键盘输入来处理。导致在遇到换行符的时候,如果开启了自动缩进,就会默认的把上一行缩进插入到下一行的开头,最终使插入的文本格式混乱。

解决

既然了解了问题原因,解决方案有两种:

  • 取消自动缩进

    在命令模式下,使用 :set nosmartindent:set noautoindent 取消自动缩进,然后再粘贴即可。
    完成后再开启自动缩进 :set smartindent:set autoindent,以上命令都可使用简写,比如 :set si
    更完整的说明可参考 man 手册或者 vim 的内置帮助程序 :help smartindent 查看相应说明。

  • 使用粘贴模式

    vim 的工作模式中,有一个专属的 Paste (粘贴)模式。在该模式下,可将文本原本的文本粘贴到 vim 中,以避免一些格式错误。
    可以通过 :set paste 进入粘贴模式 :set nopaste 退出该模式。


附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。