Как избежать ошибки отступа после изменения табуляции в Vim? - PullRequest
3 голосов
/ 19 мая 2009

Раньше у меня было 8 пробелов в Vim. Затем я изменил на 4 пробела, но теперь всякий раз, когда я добавляю строку в какой-то код, который я написал до перехода на 4 пробела, это выдает ошибку несоответствия отступов, даже если все выстраивается хорошо. Есть ли способ избежать этой проблемы?

Ответы [ 4 ]

9 голосов
/ 19 мая 2009

Вы изменили только опцию табуляции?

Я использую 4 пробела (заполняйте пробелами, когда я нажимаю на вкладку, чтобы вставить фактическое нажатие на вкладку ctrl-v tab). Вот настройки, связанные с вкладкой .vimrc:

" tabs
set tabstop=4
set shiftwidth=4
set expandtab

Когда вы заполняете табуляцию пробелами, вы всегда вставляете пробелы вместо табуляции, и ваш код всегда будет выглядеть одинаково.

Когда вы используете вкладки, каждый инструмент отображает вкладку по-разному, и вы тратите свое время на настройку количества мест, которые должны отображаться для вкладки (8,4,3.5) вместо выполнения продуктивной работы.

Или выберите один из них (из табло справки vim 7.1):

    Note: Setting 'tabstop' to any other value than 8 can make your file
    appear wrong in many places (e.g., when printing it).


    There are four main ways to use tabs in Vim:
    1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
       (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
       will use a mix of tabs and spaces, but typing <Tab> and <BS> will
       behave like a tab appears every 4 (or 3) characters.
    2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
       'expandtab'.  This way you will always insert spaces.  The
       formatting will never be messed up when 'tabstop' is changed.
    3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
       |modeline| to set these values when editing the file again.  Only
       works when using Vim to edit the file.
    4. Always set 'tabstop' and 'shiftwidth' to the same value, and
       'noexpandtab'.  This should then work (for initial indents only)
       for any tabstop setting that people use.  It might be nice to have
       tabs after the first non-blank inserted as spaces if you do this
       though.  Otherwise aligned comments will be wrong when 'tabstop' is
       changed.
7 голосов
/ 19 мая 2009

Вы сделали :%retab ...?

3 голосов
/ 19 мая 2009

Для кода на Python лучше всего использовать следующее:

:set tabstop=8
:set shiftwidth=4
:set expandtab

Таким образом, вы по-прежнему используете «отраслевой стандарт» 8 вкладок, но вы не будете помещать ни одну из них в свой файл. Это также должно поддерживать ваш старый код в чистоте, хотя вам придется вернуться назад и вручную переместить все, что осталось со временем. Вам определенно захочется: переустановить все тоже.

Если вы хотите заменить все на 4 пробела, сделайте

:set tabstop=4
:retab
:set tabstop=8

Это переопределит все, используя пробелы по 4 пробела на вкладке, и вернет вас к нормальным значениям по умолчанию.

Очевидно, что это зависит от мнения, но в моей книге используются вкладки, которые устанавливаются на что-то другое, чем то, что вы получаете, когда просматриваете файл, что вызывает проблемы.

2 голосов
/ 19 мая 2009

Лучший способ визуализировать несоответствие: установить список, который будет отображать проблемы с пробелами.

set listchars=tab:>-,trail:-,nbsp:+ "This is terminal friendly but you can make fancy
set list

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

Я также дважды проверил руководство по стилю под "Разметка кода". есть опция python -tt, которую вы можете использовать, как указано в http://www.python.org/dev/peps/pep-0008/., которая будет выдавать предупреждения и ошибки, если вы смешиваете табуляции с пробелами.

Вы можете включить это в свое модульное тестирование. Кажется, что pep рекомендует 4 пробела для более нового кода. Вы можете рассмотреть возможность изменения, если вы намереваетесь внести свой вклад в проекты с открытым исходным кодом.

также, чтобы убрать лишние пробелы в eol

nnoremap <leader>wd :%s/\s\+$//<cr>
...