损坏的VIM缩进?

时间:2013-09-21 07:59:33

标签: python vim

我的python脚本中的标识突然变成了,我想你可能会说损坏了。身份会突然改变,使我的程序失败。

如果我使用cat查看文件,我可以看到标识错误。但在VIM中它表现得很好。这是输出和设置,

任何想法???

通过'cat -e'

              validate_hostname = RegexValidator(regex=r'[a-zA-Z0-9-_]*\.[a-zA-Z]{2,6}',message="Enter a valid hostname.")$
           validate_hostname(host_input)$
   except ValidationError, e:$
               print type(e)$
       print str(e[0])$
       error = str(e)$

else:$
       error = "Please complete all fields."       $
   $
   print error$
   return [error,host_input,record_input]$
在VIM中

                   validate_hostname = RegexValidator(regex=r'[a-zA-Z0-9-_]*\.[a-zA-Z]{2,6}',message="Enter a valid hostname.")
                   validate_hostname(host_input)
           except ValidationError, e:
               print type(e)
               print str(e[0])
               error = str(e)
       else:
           error = "Please complete all fields."

       print error
       return [error,host_input,record_input]

我的 .vimrc 看起来像,

syntax on
se bg=dark
set tabstop=4      " insert 4 spaces when a tab is pressed
set shiftwidth=4   " change the number of space characters inserted for indentation
set expandtab      " insert spaces whenver a tab key is pressed

2 个答案:

答案 0 :(得分:3)

看起来你有混合空格和标签。代码在vimcat -e(或简称为less)中看起来有所不同,因为由于您的set tabstop=4,它们对标签使用了不同的宽度。

如果在vim中它看起来很好,那么执行:retab应该会修复它:它会用您看到的空格量替换制表符。结果看起来一样,但所有制表符都将消失。

tabstop之前获得正确的retab值非常重要。例如,如果您遇到相反的问题 - 代码在less中看起来正确但在vim中已损坏,并且在该状态下执行:retab,则会破坏Python脚本。

查看这篇关于vim标签的精彩文章:

http://vimcasts.org/episodes/tabs-and-spaces/

特别是,我认为您应该将这些设置添加到.vimrc

set softtabstop=4
set smarttab

答案 1 :(得分:0)

特别是在Python中,空白很重要,你不应该混合使用制表符和空格。即使您在Vim中仔细设置缩进设置(甚至可能在每个文件中包含 modelines 来设置缩进),编辑该文件的其他用户也可能不会那么在意。

因此,我写了IndentConsistencyCop plugin来验证缩进,并在它不一致时抱怨。插件页面包含指向其他插件的链接。