gpt4 book ai didi

vim - 如何在开括号后设置自动缩进

转载 作者:行者123 更新时间:2023-12-03 09:33:54 27 4
gpt4 key购买 nike

当我键入一个左括号后跟一个换行符时,我希望光标自动缩进一个制表符值 - 与打开大括号或左方括号的方式相同。出于某种原因,它缩进了两个制表符值。

我对让它对 .dart 文件正常工作特别感兴趣。

这是我的 .vimrc:

set tabstop=2
set softtabstop=2
set shiftwidth=2
set autoindent
set expandtab

我错过了什么?谢谢你。

最佳答案

所以 vim 中有几个缩进选项(请参阅 :h C-indenting 以获得更好的理解)
还有一篇关于 vimways 的很棒的文章 https://vimways.org/2019/indentation-without-dents/ ( 强烈推荐 )

1. smartindent 这是最简单的一个它没有做太多见:h 'smartindent'

An indent is automatically inserted:

  • After a line ending in '{'.
  • After a line starting with a keyword from 'cinwords'.
  • Before a line starting with '}' (only with the "O" command).


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 会调用它来知道它需要插入多少缩进

The result should be the number of spaces of indentation (or -1 for keeping the current indent) To honor the user’s choice of 'shiftwidth' return indentlvl * shiftwidth()



所以正如你在这里看到的,这是一个非常强大的选项,你可以用它做很多事情我建议阅读关于 vimways 的文章

这里的大部分内容都是我用 vim 文档和文章复制的,所以全部归功于 vim-doc 和 阿克塞尔·福斯曼 文章作者

或者您可以使用插件

或者

您可以复制缩进功能并进行一些修改: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 =~# '^\s*@.*$'
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

关于vim - 如何在开括号后设置自动缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59700770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com