Autoindent:smartindent和indentexpr

时间:2016-02-02 14:43:13

标签: vim auto-indent

当我编辑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风格的语言;

但是我想知道为什么smartindent在我编辑python文件时会有什么影响,考虑一下帮助中写的是什么?

1 个答案:

答案 0 :(得分:2)

是的,它的行为方式与您解释的相同。

在我的情况下,devenv.exe /safemode devenv.exe /resetskippkgs devenv.exe /installvstemplates devenv.exe /resetsettings devenv.exe /resetuserdata 会返回: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

其中^ H输入为 Ctrl + V Ctrl + H

我相信你会有比解决方案更好的解决方案