Как сделать перенос текста совпадающим с текущим уровнем отступов в vim?

Кто-нибудь знает, как заставить vim обертывать длинные строки текста таким образом, чтобы позиция обернутого текста основывалась на отступе текущей строки? Я не хочу переформатировать свой код, просто чтобы он отображался красиво.

Например, если я установил свои настройки так, чтобы строка:

print 'ProcessorError(%r, %r, %r)' % (self.file, self.index, self.message)

отображается при завершении как:

print 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
    self.message)

то, если я напишу блок кода следующим образом:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index, self.message)

он обертывается примерно так:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
    self.message)

Я бы предпочел, чтобы он отображался как:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
            self.message)

Изменить: после прочтения ответа на "Дон Werve", похоже, что я действительно ищу вариант breakindent, но этот параметр по-прежнему находится в списке "Ожидание обновленных патчей" (см. Vim TODO). Итак, что я хотел бы знать, это самый простой способ заставить vim работать с breakindent? (Мне все равно, какую версию vim мне нужно использовать.)

Ответ 1

Вы ищете breakindent

Вы также можете обратиться к этот поток.

Ответ 2

Я спросил тот же вопрос о SuperUser, в итоге нашел этот вопрос, нашел патч и обновил патч для работы с Vim 7.2.148 от Fedora 11.

Вы можете использовать yumdownloader --source vim, чтобы получить исходный RPM. Затем добавьте строку Patch3312: и строку %patch3012 -p1 в spec файл и создайте rpm.

Ответ 3

Я рекомендую этот vimscript:

http://www.vim.org/scripts/script.php?script_id=974

"Этот отступ script для python пытается более точно сопоставить то, что предлагается в PEP 8 (http://www.python.org/peps/pep-0008.html). В частности, он обрабатывает строки продолжения, подразумеваемые открытыми (круглые скобки), [скобки] и {фигурные скобки} правильно, и отбрасывает многострочные выражения if/for/while по-разному."

Ответ 4

Я думаю, что set textwidth = 80 должен это сделать.

Ответ 5

Для управления отступом кода Python см. :h ft-python-indent. Это, например, приведет к отступу Vim в два раза больше, чем к shiftwidth, если вы сделаете новую строку, в то время как есть незакрытый палец:

let g:pyindent_open_paren = '&sw * 2'

Однако &sw * 2 по умолчанию, поэтому не уверен, почему он не работает для вас. Он работает для меня с использованием ручной новой строки или с textwidth -индуцированными символами новой строки.

Вышеуказанный параметр должен находиться в .vimrc или должен быть установлен каким-то образом, прежде чем Vim войдет в режим Python. Обязательно :setf python или что вы в противном случае находитесь в режиме Python.