Отступ в Vim Python меняет семантику кода - PullRequest
2 голосов
/ 14 декабря 2011

Я пытаюсь выучить vim :-) Возникли серьезные проблемы с автоматическим отступом, меняющим смысл моего кода на Python.Есть ли способ получить все преимущества автоматического отступа, не сталкиваясь с поведением, подобным приведенному ниже?

Я начинаю с файла python:

me@host:/tmp$ cat pytest.py 
if False:
    print('Never',
          'print this line')

print 'Always print this line.'

Автоматический отступ с vim pytest.py, gg=G, :wq

О, я испортил свой сценарий:

me@host:/tmp$ cat pytest.py 
if False:
    print('Never',
            'print this line')

    print 'Always print this line.'

Пытаясь сохранить это действительно ванильно:

me@host:/tmp$ cat ~/.vimrc 
filetype plugin on
filetype indent on
autocmd FileType python set sw=4
autocmd FileType python set ts=4
autocmd FileType python set sts=4
autocmd FileType python set textwidth=79

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

Да, не делай этого.

Смысл autoindent в VIM состоит в том, чтобы редактор угадал, куда должны идти пробелы в соответствии с правилами форматирования языка. Тем не менее:

enter image description here

Пробелы в Python важны, как вы знаете. Как сказал бы доктор: Тогда не делай этого.

2 голосов
/ 14 декабря 2011

Настройка автоматического отступа в vim - это просто вопрос соответствия ваших настроек tabstop, shiftwidth, softtabstop и expandtab файлу, который вы редактируете.Я использую этот плагин:

http://freecode.com/projects/vindect

, который работает с этими настройками из редактируемого вами файла python и гарантирует, что vim ведет себя правильно, даже если вам случится редактировать файл другого пользователя, которыйустанавливает их пустое пространство не так, как вы.

РЕДАКТИРОВАТЬ: Если вы хотите сделать полный повторный отступ исходного файла Python (вместо gg = G), вам понадобится специальный реиндентер, такой как этот:http://svn.python.org/projects/doctools/trunk/utils/reindent.py, который можно легко превратить в команду vim.

...