and*_*lei 75 python vim indentation
我正在使用Vim并编辑Python脚本.
Autoindent在一般情况下表现相当不错,但是当我开始一个新行并输入'#'来输入评论时,Vim会对我说明这一点.
例如,如果有
def foo():
Run Code Online (Sandbox Code Playgroud)
然后按回车键,Vim会正确缩进
def foo():
pass
Run Code Online (Sandbox Code Playgroud)
但是,如果不是打字pass,我输入#,它会自动显示
def foo():
# comment
class Thing():
def __init__(self):
pass
# comment line gets unindented all the way
Run Code Online (Sandbox Code Playgroud)
我的.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
Run Code Online (Sandbox Code Playgroud)
Mic*_*zyk 57
设置smartindent使得Vim的行为就像你为我描述的那样,而对于nosmartindent(我倾向于使用它),它的行为就像你喜欢它一样.
更新:来自以下文档smartindent:
当键入"#"作为新行中的第一个字符时,该行的缩进将被删除,"#"将放在第一列中.缩进将在下一行中恢复.如果您不想这样,请使用以下映射:":inoremap#X ^ H#",其中使用CTRL-V CTRL-H输入^ H. 使用">>"命令时,以"#"开头的行不会向右移动.
这似乎是它.
更新:可能没有必要打扰以下......我会留在这里为增加的信息价值.;-)
如果设置nosmartindent没有帮助,也许您可以使用:set命令 - 没有参数 - 来获取Vim会话中生效的所有设置的列表,然后将其粘贴到某处(也许在Pastie上).据我记忆,还有一些影响自动缩进的选项.
Cas*_*bel 18
虽然Michał的帖子解释了smartindent的作用,但你可以做得更好,而不仅仅是关闭它.您可以根据自己的喜好配置它,或者更好的是,让Vim为您选择更好的缩进.使用vimrc中的以下代码而不是其他缩进设置:
filetype indent on
Run Code Online (Sandbox Code Playgroud)
Vim会自动为python使用正确的缩进插件.这比仅仅不缩减#行更好 - 几乎所有内容都应该正确缩进.
您可以只为python文件尝试一个选项:
autocmd BufRead *.py inoremap # X<c-h>#<space>
Run Code Online (Sandbox Code Playgroud)