我正在使用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
答案 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)缩进: