You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Vim在输入or/and时自动更改缩进?

解决Vim中Perl代码输入or/and时自动过度缩进的问题

问题原因

你遇到的问题是因为smartindent是针对C类语言设计的通用缩进工具,它误将Perl里的逻辑运算符or/and识别为需要开启新缩进块的关键字(类似C的if/while),所以在输入这些词时会强制调整缩进,干扰你输入order_这类前缀。

解决方案

方案一:使用Perl专用缩进规则(推荐)

禁用通用的smartindent,改用Vim内置的Perl专用缩进逻辑,这是最稳妥的方式。在你的~/.vimrc(或~/.vim/vimrc)中添加以下配置:

filetype indent on
autocmd FileType perl setlocal noautoindent nosmartindent indentexpr=PerlIndent()

这样Vim会根据Perl语言的语法规则来处理缩进,不会把or/and当成触发额外缩进的标记,输入时就和普通单词一样正常。

方案二:保留smartindent并调整关键字规则

如果你习惯使用smartindent,可以修改配置,让它不再对or/and触发特殊缩进:

autocmd FileType perl setlocal cinwords-=or,and

这条命令会从smartindent的关键字列表中移除or和and,从而避免输入它们时触发过度缩进。

验证效果

设置完成后,重启Vim或重新加载Perl文件,再测试你的场景:

  • 示例1中输入or时,不会再自动多缩进一个制表位,保持和上一行相同的缩进;
  • 示例2中输入or时,会自动恢复到外层的基础缩进,符合你的需求。

内容的提问来源于stack exchange,提问作者neniu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:06:07