Vim自动删除Python注释中的缩进
我正在使用Vim并编辑Python脚本。Vim自动删除Python注释中的缩进
Autoindent在一般情况下工作得很好,但是当我开始一个新行并键入'#'来输入注释时,Vim将为我排除这些内容。
例如,如果有
def foo():
和我按enter键,Vim会缩进正确
def foo():
pass
但是,如果不是打字pass
,I型#
,它会自动unindents
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
设置上使Vim的行为像你描述的我,而用nosmartindent
(这是我倾向于使用)smartindent
它像你更喜欢它。
更新:从上smartindent
文档:
当输入“#”作为一个新行的第一个字符,缩进的 该行被删除,“#”被放在第一柱。下一行将恢复缩进 。如果你不想要这个,使用映射:“:inoremap#X^H#”,其中^ H是用CTRL-V CTRL-H输入的。 使用“>>”命令时,以'#'开头的行不会右移 。
这似乎是它。
更新:可能不需要打扰以下...我会留在这里为附加的信息价值。 ;-)
如果设置nosmartindent
没有帮助,也许你可以使用:set
命令 - 无参数 - 获得的所有设置列表中的效果在你的Vim会话,然后将其粘贴的地方(上Pastie也许)。据我所知,还有一些影响自动缩进的选项。
我很难用CTRL-V CTRL-H得到这个答案中提出的^ H,但是我发现'inoremap#X
尽管Michał的文章解释了smartindent的功能,但您可以做得比只关闭它好很多。您可以根据自己的喜好进行更多的配置,或者更好地让Vim为您选择更好的缩进。随着你的vimrc,而不是其他缩进设置如下:
filetype indent on
Vim会自动使用正确的缩进插件蟒蛇。这比仅仅不去除缩进#行更好 - 几乎所有东西都应该正确缩进。
Jefromi, 我不明白你的答案。 vim已经在选择python缩进插件 - 问题在于插件发生了不合逻辑的缩进,完全消除了缩进。所以你提出的解决方案不能解决问题中所解释的问题。 – 2010-03-02 11:42:18
'smartindent'将导致行初始''''不管'filetype indent'是否被打开。所以,你必须设置'nosmartindent'来解决问题。 – 2010-03-02 13:07:38
啊,对。我应该澄清:我的意思是使用filetype indent *而不是其他缩进设置。 – Cascabel 2010-03-02 17:00:33
你可以尝试的选项只对Python文件:
autocmd BufRead *.py inoremap # X<c-h>#<space>
如果你安装了这个剧本,你会得到适当蟒(PEP8)缩进:
对于一些未知原因上述行为是由于我在cindent
上造成的。把它关掉为我固定。上述其他修复无一帮助。
原因在于C代码中的约定(cindent是为什么)是取代以'#'开头的proprocessor指令。所以,这对C有帮助,但对Python来说却是一个大问题。 – 2015-02-06 18:05:35
对于搜索引擎:dedent,outdent。 – naught101 2014-04-09 01:11:11