解决 Vim 粘贴缩进错乱问题

今天各种实验我的vim,发现一个问题就是我把从vim外的复制粘贴到vim里时,缩进完全无解错乱恶心,好在,强大的网友给出了很完美的答案

参考原贴:解决粘贴到终端 Vim 缩进错乱

以下内容是个人的一些整理

方法一

Via vincent178

当Vim的自动缩进打开的时候,你粘贴到终端Vim的code会出现缩进错乱的情况。当然这个问题只是出现在从其他应用里面复制内容,并且不是用的MacVim或者Gui Vim的时候.

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

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

好在Vim提供了past和pastetoggle选项,你只要把这一行加入你的vimrc文件。

set pastetoggle=<F2>

还有更高级的

nnoremap <F2> :set invpaste paste?<CR>
imap <F2> <C-O>:set invpaste paste?<CR>
set pastetoggle=<F2>

第一行的作用是在命令模式下,按F2会在状态栏显示paste
第二行的作用是在insert模式下,按F2会在状态栏显示paste

这样可以在状态栏中显示paste,不赖吧。。。

方法二

via nightire (Albert Yu)

`autocmd InsertEnter * set local paste`
`autocmd InsertLeave * set local nopaste`

这个的效果呢,就是当你进入 Insert 模式的时候自动开启 paste,此时你从外面复制粘贴进来的东西就会保持原有队形了。之后你回到 Normal 模式的时候,Vim 会自动关闭paste

这个比较适合不喜欢按快捷键的纯粹懒人,不过请小心,一直处于 paste 开启的状态下虽然不影响基本的功能,但是可能会影响其他的插件正常工作哦!

最好的办法还是使用键位映射在你需要粘贴的时候手动开启 paste,不过可以保留离开时自动 nopaste 的功能,省点事儿,因为有时候你开启 paste 复制完,然后退出 Insert 时忘记了 nopaste,那么下次再进入 Insert 的时候还是 paste 的。

不过实际使用中最好把 autocmd 的命令用一个自定义的 augroup 包起来,并在最开始用 autocmd! 重置一下,以避免重复修改 .vimrc造成的 autocmd 重载多次。

具体的作法我放个图:
在这里插入图片描述
截图里还给了一个有用的设置,让从 Insert 模式下离开的时候没有延迟,Vim 默认的设置会有点迟钝的感觉。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值