自动缩进:智能缩进和缩进表达式

5
当我编辑一个Python文件时,例如:
def my_func():
    print('Something')
    <-- CURSOR IS HERE

当我想要通过键入#添加注释时,该行会自动重新缩进到行的开头:

def my_func():
    print('Something')
#<-- CURSOR IS HERE

我发现这是由于smartindent选项的影响,所以要解决这个问题,我只需要运行:set nosi(或在我的.vimrc文件中禁用它)。
但是在Vim的帮助文档中,在:h 'smartindent'中,你可以读到以下内容:

当启用'cindent'或设置了'indentexpr'时,设置'si'无效。

但我的indentexpr选项被设置为以下内容:
:set indentexpr?
indentexpr=GetPythonIndent(v:lnum)

我应该避免使用smartindent选项,因为它似乎是一个旧的功能,并且仅适用于 C 风格的语言;

但是当我编辑 Python 文件时,我想知道为什么smartindent会产生一些效果,考虑到帮助文档中写的是什么?


当我关闭smartindent并设置indentexpr=GetPythonIndent(v:lnum)时,它表现正常,不会出现您所描述的情况。可能是某个插件正在覆盖或存在冲突的设置。 - Atri
@Atri:我问了关于何时打开smartindent的问题。我刚刚写了:set nosi解决了这个问题,但我的问题是关于Vim帮助文档的内容,它与实际行为不符。 - yolenoyer
1个回答

4

是的,它的表现方式与你所解释的一样。

在我的情况下,:echo GetPythonIndent(v:lnum) 返回 -1

:h indentexpr 中有以下说明行为的文本。

 The expression must return the number of spaces worth of indent. It
 can return "-1" to keep the current indent (this means 'autoindent' is
 used for the indent).

当我们设置si时,它将接管ai
现在:h si提供了一个解决方法:
:inoremap # X^H#

当输入Ctrl + V Ctrl + H时,表示^H。

我相信您会提供比提供的解决方法更好的解决方案。


你指出了:当GetPythonIndent返回-1时,使用si选项。谢谢! - yolenoyer
很高兴我的回答对您有所帮助。 - dlmeetei

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