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

时间:2010-03-02 01:01:29

标签: python vim indentation

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

Autoindent在一般情况下表现相当不错,但是当我开始一个新行并输入'#'来输入评论时,Vim会为我排队。

例如,如果有

def foo():

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

def foo():
    pass

但是,如果不是键入pass,而是键入#,它会自动显示

def foo():
# comment

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

我的.vimrc文件如下。有人知道为什么会这样吗?

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

5 个答案:

答案 0 :(得分:55)

设置smartindent会使Vim的行为与您描述的一样,而使用nosmartindent(这是我倾向于使用的),它的行为就像您更喜欢它。

更新:来自smartindent上的文档:

  

当键入“#”作为新行中的第一个字符时,缩进为   该行被删除,'#'放在第一列。缩进   恢复下一行。如果你不想这样,请使用它   mapping:“:inoremap#X ^ H#”,其中^ H是用CTRL-V CTRL-H输入的。   使用“>>”时命令,以'#'开头的行不会移位   右。

似乎就是这样。


更新:可能没有必要打扰以下......我会留在这里以获取额外的信息价值。 ; - )

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

答案 1 :(得分:17)

虽然Michał的帖子解释了smartindent的作用,但你可以做得更好,而不仅仅是关闭它。您可以根据自己的喜好配置它,或者更好的是,让Vim为您选择更好的缩进。使用vimrc中的以下代码而不是其他缩进设置:

filetype indent on

Vim会自动为python使用正确的缩进插件。这比仅仅不缩减#行更好 - 几乎所有内容都应该正确缩进。

答案 2 :(得分:6)

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

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

答案 3 :(得分:3)

由于某些未知原因,上述行为是在cindent开启时引起的。关掉它固定它给我。上述其他修正案都没有帮助。

答案 4 :(得分:-1)

如果您安装此脚本,您将获得正确的 python(pep8)缩进:

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