Vim Python 代码的缩进错误(使用 python-mode 插件)

Vim getting indentation wrong for Python code (with the python-mode Plugin)

如以下截屏所示,我演示了 Vim 在向 Python 代码添加注释时的奇怪行为。在演示 1 和演示 2 之间,我只是在不同的缩进级别开始注释行(在 class 定义内)。

演示 1

演示 2

问题:

如截屏视频结尾所示,只有在插入模式下键入 : 才能正确缩进。

理想的解决方案将实现:

开始一行评论时,请正确保留缩进级别;

这听起来像是 vim 设置问题。从 vanilla vim 开始,当我创建新行时,每一行都没有缩进。如果我在 home 目录中创建一个名为 .vimrc 的文件。即 ~/.vimrc 并输入

filetype indent plugin on

在文件中,我得到了预期的缩进行为。那对你有用吗。

我的解决方案

我注释掉了下面这行,一切正常。没有对评论进行进一步的奇怪更正。 set smartindent

我的Vim的其他信息:

为了缩进,这里进行设置:

filetype plugin on
filetype indent on
set autoindent

另外,经核实python-mode并无过错。不管有没有 python-modeset smartindent 总是让我遇到问题。

初步结论:

set smartindent 效果不佳,可能是我指定的折叠方法如下。这样的设置放在C:/vim/vimfiles/ftplugin/python.vim

setlocal formatoptions=crnqj

这里是使用字符的对应关系,但是none似乎有点麻烦。

  • c: Auto-wrap 评论使用文本宽度,自动插入当前评论前导。

  • r: 在插入模式下点击<Enter>后自动插入当前评论标题。

  • n:格式化文本时,识别编号列表。这实际上使用 'formatlistpat' 选项,因此可以使用任何类型的列表。这 数字后的文本缩进用于下一行。这 默认是查找一个数字,可以选择后跟“.”、“:”、“)”、 ']' 或者 '}'。注意 'autoindent' 也必须设置。不起作用 与“ 2”一​​起使用。 示例:

    1. the first item
       wraps
    2. the second item
    
  • q:允许使用 "gq" 格式化注释。 请注意,格式化不会更改空行或包含的行 只有评论领袖。在这样一行之后开始一个新段落, 或者当评论领袖改变时。

  • j:在有意义的地方,在加入行时删除评论领导者。

参考更好的框架+回答的解决方案

简而言之,我在编辑 Python 脚本时观察到的并不是 "Python filetype" 独有的。它与符号 # 有关,又名 "hash"。