Vim 会自动删除 Python 注释上的缩进

我正在使用 Vim 并编辑 Python 脚本。

自动缩进通常工作得很好,但是当我开始一个新行并键入“ #”来输入注释时,Vim 会为我取消缩进。

例如,如果有

def foo():

我按回车键 Vim 就会正确缩进

def foo():
pass

但是,如果我输入 #而不是 pass,它会自动取消缩进

def foo():
# comment


class Thing():
def __init__(self):
pass
# comment line gets unindented all the way

my .vimrc file follows. anyone know why this is happening?

set tabstop=4
set smartindent
set shiftwidth=4
set expandtab
set backspace=indent,eol,start
set scrolloff=3
set statusline=%f%m%r%h%w\ [%Y\ %{&ff}]\ [%l/%L\ (%p%%)]
set laststatus=2
10693 次浏览

smartindent设置为可以让 Vim 的行为像您为我描述的那样,而对于 nosmartindent(我倾向于使用它) ,它的行为就像您希望的那样。

更新: 来自 smartindent的文档:

在新行中键入“ #”作为第一个字符时,缩进为 该行被删除,“ #”被放在第一列。缩进 如果您不需要这个,请使用这个 映射: “ : inoremap # X ^ H #”,其中用 CTRL-V CTRL-H 输入 ^ H。 使用“ > >”命令时,以“ #”开头的行不会移位 对。

看来就是这样了。


Update: Probably no need to bother with the following... I'll leave it here for the added informational value. ;-)

如果设置 nosmartindent没有帮助,也许您可以使用 :set命令——没有参数——来获取 Vim 会话中有效的所有设置的列表,然后将其粘贴到某个地方(也许在 馅饼上)。据我所知,还有一些其他选项会影响自动缩进。

虽然 Micha 的帖子解释了 smart indent 的功能,但是你可以做得比关掉它好得多。您可以根据自己的喜好来配置它,或者让 Vim 为您选择更好的缩进。在 vimrc 中使用以下设置代替其他缩进设置:

filetype indent on

Vim 将自动为 python 使用适当的缩进插件。这比不去缩进 # 行要好得多——几乎所有东西都应该正确缩进。

您可以只为 python 文件尝试一个选项:

autocmd BufRead *.py inoremap # X<c-h>#<space>

如果你安装这个脚本,你会得到 适当的 python (pep8)缩进:

Http://www.vim.org/scripts/script.php?script_id=974

For some unkown reason the above behavior was caused when i had cindent on. Turning it off fixed it for me. None of the other fixes above helped.