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

如何配置Vim使其仅在上一行末尾带冒号时才触发自动缩进

Vim编辑YAML文件自定义缩进配置方案

本配置可实现仅在上一行末尾存在冒号时,YAML文件才自动触发换行缩进的需求。

配置步骤

  • 打开你的Vim配置文件,默认路径为:
    • Vim:~/.vimrc
    • Neovim:~/.config/nvim/init.vim
  • 将以下代码添加到配置文件末尾:
" 开启文件类型检测与缩进插件(如已配置可忽略本行)
filetype plugin indent on

" 自定义YAML缩进规则组
augroup yaml_custom_indent
  autocmd!
  " 仅对YAML文件应用自定义缩进表达式
  autocmd FileType yaml setlocal indentexpr=GetYamlCustomIndent()
augroup END

function! GetYamlCustomIndent()
  " 获取上一行内容
  let l:prev_line = getline(v:lnum - 1)
  " 去除上一行首尾空白
  let l:prev_trimmed = trim(l:prev_line)

  " 上一行为空时缩进为0
  if l:prev_trimmed == ''
    return 0
  endif

  " 上一行以冒号结尾时,缩进+2(YAML标准缩进单位)
  if l:prev_trimmed =~# ':$'
    return indent(v:lnum - 1) + 2
  else
    " 其余情况和上一行缩进保持一致
    return indent(v:lnum - 1)
  endif
endfunction
  • 保存配置文件后重启Vim,或在当前Vim窗口执行:source 你的配置文件路径使配置立即生效。

配置说明

  • 规则仅对YAML格式文件生效,不会干扰其他类型文件的缩进逻辑
  • 默认缩进单位为2空格,如需调整可修改代码中+ 2的数值,比如改为+ 4即可使用4空格缩进
  • 如果需要同时支持列表项(- 开头的行)自动缩进,可将判断条件行修改为if l:prev_trimmed =~# ':$\|^-\s'
  • 如此前配置过其他YAML缩进相关规则,需先删除旧配置避免逻辑冲突

内容的提问来源于stack exchange,提问作者Élodie Petit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:54:03