Vim自动删除Python注释的缩进
我在用Vim编辑Python脚本。
自动缩进一般来说效果不错,但当我开始新的一行并输入'#'来写注释时,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 个回答
你可以尝试一个只针对Python文件的选项:
autocmd BufRead *.py inoremap # X<c-h>#<space>
虽然Michał的帖子解释了smartindent的作用,但你可以做得比仅仅关闭它要好得多。你可以根据自己的喜好进行更多的配置,或者更好的是,让Vim为你选择更合适的缩进方式。只需在你的vimrc文件中添加以下内容,而不是其他的缩进设置:
filetype indent on
这样,Vim就会自动为Python使用合适的缩进插件。这比仅仅不对#行进行缩进要好得多——几乎所有的内容都应该正确缩进。
把 smartindent
设置为开启后,Vim 的表现就像你描述的那样,而如果设置为 nosmartindent
(这是我通常使用的设置),它的表现就会像你希望的那样。
更新:关于 smartindent
的文档说明:
当你在新的一行输入 '#' 作为第一个字符时,这一行的缩进会被去掉,'#' 会被放在第一列。下一行的缩进会恢复。如果你不想要这个效果,可以使用这个映射命令:":inoremap # X^H#",其中 ^H 是通过 CTRL-V 然后按 CTRL-H 输入的。当使用 ">>" 命令时,以 '#' 开头的行不会向右移动。
就这样。
更新:可能没必要去管下面的内容……我把它留在这里是为了增加一些信息价值。;-)
如果设置 nosmartindent
还是没有帮助,或许你可以使用 :set
命令——不带任何参数——来获取你当前 Vim 会话中所有设置的列表,然后把它粘贴到某个地方(比如 Pastie)。我记得还有其他一些选项会影响自动缩进。