neovim 自动缩进的细微差别

neovim auto-indentation nuances

我刚从 vim 切换到 neovim。以下 vim 配置设置通过缩进获得我想要的行为:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent
set backspace=indent,eol,start

这里的相关部分是自动缩进:

set autoindent

在每个换行符上,这会导致 vim 匹配上一行的缩进:

def demo_autoindent():
    a = 'This line was manually indented'
····

a 的声明手动缩进了一步,但第二行自动缩进了同一级别。这里 我用一系列 · 个字符表示自动缩进。

Neovim 匹配此行为。然而,Neovim 试图在块方面变得更聪明,或者在这种情况下在 python:

中声明字典
def example_neovim():
    b = {
············

请注意,Neovim 不会 自动缩进此行。如果有,它将具有与 b 的声明相同的 4-space 缩进。相反,Neovim 添加了额外的 两个 缩进,使总数达到 12-spaces。

很明显,它打算做的是再增加一个缩进:

def example_neovim_intention():
    c = {
········

如何将 Neovim 配置为:

  1. 匹配 vim 的行为,只是自动缩进到同一级别。
  2. 在声明时添加一个(而不是两个)额外缩进字典。

问题是 neovim 默认启用了 filetype-indentation:

:filetype
filetype detection:ON  plugin:ON  indent:ON

将以下内容添加到我的 neovim init 中恢复了基本的 auto-indent 功能:

filetype indent off

这不能令人满意。我怀疑 file-type 检测与我拥有的其他一些缩进配置冲突(或加倍),但自从禁用它后我没有错过它。