vim粘贴代码缩进问题

vim

原因

很长时间以来,我以vim做为我的主要编辑器在Linux下写程序,但vim设置了smartindent之后通过终端SecureCRT连接Linux使用vim时每次粘贴代码缩进都会出现下一行代码的起始位置在上一行代码的末尾处,依此类推,你粘贴的行数越多,就越明显,如:

【国内直连ChatGPT 29元起】
国内直连ChatGPT,Plus会员每月29元起,支持最新o1模型探索更多领域,无需注册OpenAI账号。

源片段:

resources:
  limits:
    memory: 4096Mi
    cpu: 300m
  requests:
    memory: 128Mi
    cpu: 100m

复制以上的文本在设置了smartindent的情况下粘贴文本会这样

resources:
  limits:
      memory: 4096Mi
          cpu: 300m
            requests:
                memory: 128Mi
                    cpu: 100m

但你要直接在Linux母机上操作就不会有以上问题,一直懒的去找解决方法,所以一直用特别笨的方式手动调整好缩进有问题的文本,如果在使用缩进表达块的语法中比如Python,那么这个还很头疼,得对着源代码处理好每一行缩进否则程序逻辑就混乱了,特别痛苦。今天觉得这个问题得找一找原因,解决它。通过在网上搜索文档才发现SecureCRT使用vim会把粘贴的文本暂时存入键盘缓存中,然后当作用户输入的方式被vim处理,但在母机上直接操作vim时它能识别粘贴行为会避免这个问题。两种解决方案

暂时关闭smartindent

如果你在.vimrc文件中配置了set smartindent,那么在你要粘贴文本时预先执行:set nosmartindent取消智能缩进,然后再粘贴已复制的内容,粘贴结束后:set smartindent恢复智能缩进功能即可

使用paste模式

以上其实是通过临时关闭智能缩进避免粘贴内容缩进出现问题,其实还有一种模式是paste模式,你要在粘贴之前执行:set paste进入粘贴模式,然后就可以粘贴了,粘贴结束之后可以执行:set nopaste推出粘贴模式

推荐关闭smartindent

以上两种步骤都需要在粘贴时要临时操作一下,有时候代码工作着急,难免会忘了切换模式,我直接把set smartindent.vimrc中移除不使用智能缩进模式,就是在平时编码时多敲几次缩进,但不用在粘贴代码时要切换模式的麻烦操作。

分享

TITLE: vim粘贴代码缩进问题

LINK: https://www.qttc.net/497-vim-pasting-code-indent-problem.html

NOTE: 原创内容,转载请注明出自琼台博客