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)缩进: