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

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

Autoindent在一般情况下工作得非常好,但是当我开始一个新行并input'#'来input注释时,Vim将忽略这个行。

例如,如果有

def foo(): 

我按回车,Vim就会正常缩进

 def foo(): pass 

但是,如果不inputpass ,我键入# ,它会自动取消

 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 

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

更新:从smartindent文档:

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

这似乎是。


更新:可能不需要打扰以下…我将留在这里为额外的信息价值。 😉

如果设置nosmartindent不起作用,也许可以使用:set命令 – 不带任何参数 – 获取Vim会话中所有有效设置的列表,然后将其粘贴到某处(也许在Pastie上 )。 据我所知,还有一些影响自动缩进的选项。

虽然Michał的文章解释了smartindent的作用,但你可以做得比只关掉它好很多。 您可以根据自己的喜好进行更多configuration,或者更好地让Vim为您select更好的缩进。 在vimrc中使用下面的代码来代替其他的缩进设置:

 filetype indent on 

Vim会自动使用适当的缩进插件python。 这样做比仅仅不去除一个#行更好 – 几乎所有东西都应该正确缩进。

您可以尝试仅用于python文件的选项:

 autocmd BufRead *.py inoremap # X<ch>#<space> 

由于某些未知的原因,上述行为是由于我曾经参与过。 把它关掉为我固定。 上述其他修复无一帮助。

如果你安装这个脚本,你将得到正确的 python(pep8)缩进:

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