解决粘贴到 vim 缩进错乱问题

  1. 遇见
  2. 分析
  3. 解决问题

遇见

当我使用 vim,想要粘贴下面这段脚本到 xx.sh 文件中

#!/bin/bash
if [$1]
then
    if [ $1 == "help" ]; then
        echo -e "\033 [37m pay 参数 1 [参数 2] \033 [0m"
    else
        if [ $2 ]; then
            filename = $2
        fi
    fi
else
    echo -e "\033 [37m 缺少关键词,通过 'pay help' 查看帮助信息 \033 [0m"
fi

却出现了错乱,如下图所示
缩进乱掉

分析

vim 没有相应的程序来处理这个从其他应用复制粘贴的过程,所以 Vim 通过插入键盘输入的 buffer 来模拟这个粘贴的过程,这个时候 Vim 会以为这是用户输入的。

所以问题是:当上一行结束,光标进入下一行时 Vim 会自动以上一行的的缩进为初始位置。这样就会破坏原始文件的缩进。

解决问题

经过一番 google,发现 vim 提供了 paste 选项,进入 paste 模式后,就可以正常缩进了。

# 进入 paste 模式
:set paste

# 退出 paste 模式
:set nopaste

缩进正常

如果不想每次都执行这个命令,可以在 ~/.vimrc 中添加一行配置 set pastetoggle=<F12> ,这样就可以通过 F12 快速在 paste 模式中切换。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com

×

喜欢就点赞,疼爱就打赏