2013-09-21 2 views
0

Время от времени идентификация внутри моих скриптов python внезапно становится, я полагаю, вы могли бы сказать, что она повреждена. Идентификация внезапно изменится, что приведет к сбою моих программ.Поврежденный отступ VIM?

Если я смотрю файл с помощью cat, я вижу, что идентификация неверна. Но в VIM это проявляется как прекрасное. Вот выходы и настройки,

Любые идеи ???

через 'кошки -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 
+1

Звучит как смешанные пространства и вкладки для меня. Проверьте это. – Veedrac

+2

попробуйте ': retab' и посмотрите, исправляет ли он это. – Rob

+0

и используйте ': set list', чтобы увидеть непечатаемые символы, такие как вкладки и пробелы. – robertklep

ответ

3

Это смотрят как будто у вас смешанные пространства и вкладки. Код выглядит по-разному в vim и в cat -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 
0

Особенно в Python, пробельные важно, и вы не должны смешивать вкладки и пробелы. Даже если вы тщательно настроили свои настройки отступа в Vim (и, возможно, даже включили modelines в каждый файл, чтобы установить отступ), другие пользователи, редактирующие этот файл, могут не заботиться так сильно.

Поэтому я написал IndentConsistencyCop plugin, который проверяет отступ и жалуется, когда он несовместим. Страница плагина имеет ссылки на альтернативные плагины.

+0

Утилита' pep8' тоже делает это. – janos

Смежные вопросы