Neovim自动缩进细微差别

3
我刚刚从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'
····
< p > a 的声明手动缩进了一步,但第二行被自动缩进到相同的级别。这里我用一系列 · 字符表示自动缩进。

Neovim 与此行为相匹配。然而,Neovim 尝试在块或在此情况下在 Python 中声明字典时变得有点聪明:

def example_neovim():
    b = {
············

请注意,Neovim没有自动缩进这一行。如果它有,它将具有与b声明相同的4个空格缩进。相反,Neovim添加了额外的两个缩进,使总缩进为12个空格。
很明显,它的意图是再添加一个缩进。
def example_neovim_intention():
    c = {
········

如何配置Neovim以实现以下功能:

  1. 与vim的行为相匹配,只需自动缩进到相同的级别。
  2. 在声明诸如字典等内容时仅添加单个(而非双倍)额外缩进。

2
这也让我有点疯狂。我确保进入一个无需配置的环境进行测试,但仍然遇到了同样的问题。 - trevdev
2个回答

2
我遇到了完全相同的问题,我使用VIM已经有一段时间了,最近我转向了NeoVim。
除了“python”之外的其他语言都可以自动缩进。我发现这篇文档非常有用:https://neovim.io/doc/user/indent.html#ft-python-indent
:h ft-python-indent

NeoVim会检查该变量g:python_indent,如果没有定义,默认值将被创建,类似于这样(NeoVim 0.8.2):

{
  'disable_parentheses_indenting': v:false,
  'closed_paren_align_last_line': v:true,
  'searchpair_timeout': 150,
  'continue': 'shiftwidth() * 2',
  'open_paren': 'shiftwidth() * 2',
  'nested_paren': 'shiftwidth()'
}

将以下属性continueopen_parenclosed_paren_align_last_line更改为如下。

{
  'disable_parentheses_indenting': v:false,
  'closed_paren_align_last_line': v:false,
  'searchpair_timeout': 150,
  'continue': 'shiftwidth()',
  'open_paren': 'shiftwidth()',
  'nested_paren': 'shiftwidth()'
}

另一种方法(推荐)

这种方法可以更轻松地解决奇怪的缩进问题。

安装nvim-treesitter/nvim-treesitter并打开tree-sitter的缩进功能。

require('nvim-treesitter/nvim-treesitter').setup {
  ...
  indent = { enable = true },
  ...
}

做得好 - 这比我的解决方案好多了。 - dsclose
1
nvim-treesitter对Python缩进存在错误。 - chenzhongpu
无论我尝试了什么,缩进都不起作用。在我将树状解析器配置中的缩进注释掉之后,它开始起作用了。 - Oleg Baranovsky
3
nvim-treesitter缩进仍然非常有问题。没有任何缩进比它提供的更令人烦恼。 - Alex K

0
问题在于neovim默认启用了文件类型缩进:
:filetype
filetype detection:ON  plugin:ON  indent:ON

将以下内容添加到我的neovim init文件中,即可恢复基本的自动缩进功能:
filetype indent off

这是不令人满意的。 我怀疑文件类型检测与我拥有的某些其他缩进配置冲突(或加倍),但自从禁用它以来,我没有遗漏它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接