所以在vim中有几个缩进选项(请参见:h C-indenting
以获得更好的理解)
此外,vimways上有一篇很棒的文章https://vimways.org/2019/indentation-without-dents/(强烈推荐)
1. smartindent
这是最简单的选项,它并没有做太多事情,请参阅:h 'smartindent'
自动插入缩进:
- 在以'{'结尾的行后。
- 在以'cinwords'中的关键字开头的行后。
- 在以'}'开头的行前(仅使用“O”命令)。
2. cindent
请参阅:h cindent
,它可以覆盖smartindent
,这就是您目前正在体验的内容(您想要更改的内容)
3. indentexpr
,这是真正的东西,它非常强大,大多数插件都使用此选项,但问题是如何使用它。
类似这样的东西。
setlocal indentexpr=GetMyCustomIndent()
" Only define the function once
if exists("*GetMyCustomIndent") | finish | endif
function! GetMyCustomIndent()
return 0
endfunction
你可以创建一个函数,vim会调用它以确定需要插入多少缩进空格。
结果应该是缩进空格的数量(或-1表示保持当前缩进)。为了尊重用户对'shiftwidth'的选择,返回indentlvl * shiftwidth()。
因此,正如您在这里所看到的,这是非常强大的选项,您可以使用它做很多事情。我建议阅读vimways上的文章。
这里的大部分内容都是从vim文档和文章中复制而来,因此全部归功于vim-doc和文章作者Axel Forsman。
或者您可以使用插件
或者
您可以复制那里的缩进功能并进行一些修改 :p https://github.com/dart-lang/dart-vim-plugin/blob/master/indent/dart.vim
function! DartIndent()
" Default to cindent in most cases
let indentTo = cindent(v:lnum)
let previousLine = getline(prevnonblank(v:lnum - 1))
let currentLine = getline(v:lnum)
" Don't indent after an annotation
if previousLine =~
let indentTo = indent(v:lnum - 1)
endif
" Indent after opening List literal
if previousLine =~# '\[$' && !(currentLine =~# '^\s*\]')
let indentTo = indent(v:lnum - 1) + &shiftwidth
endif
return indentTo
endfunction
inoremap <silent> (<cr> (<cr>)<up><end><cr><tab>
。 - builder-7000