Как я могу исправить поведение разрыва строки в Vim для длинных строк в Python? - PullRequest
7 голосов
/ 05 октября 2011

Итак, вот мои проблемы.Допустим, у меня есть файл Python, и я набираю действительно длинную строку, как здесь:

class SomeClass(object):
  def some_method(self):
    some_variable = SomeOtherClass.some_other_method(some_parameter=some_value)

Когда я набираю это в Vim, это происходит:

class SomeClass(object):
  def some_method(self):
    some_variable =
    SomeOtherClass.some_other_method(some_parameter=some_value)

Это не просто плохой стиль, это ломает PEP8.Я бы хотел, чтобы это произошло:

class SomeClass(object):
  def some_method(self):
    some_variable = SomeOtherClass.some_other_method(
        some_parameter=some_value)

Что соответствует PEP8 .(Для целей этого обсуждения меня интересует только поведение разрыва строки, а не поведение отступа.)

Редактировать: breakat работает только в сочетании с linebreakуправлять тем, как отображаются строки.Он (по-видимому) не работает вместе с textwidth, чтобы определить, где вставляются жесткие разрывы строк.Таким образом, моя идея ниже не будет работать ...

Удивительно, но я ничего не нашел там, что другие разделяют эту проблему, что заставляет меня думать, что я делаю что-то не так.Тем не менее, моя идея состояла в том, чтобы добавить символ ( к параметру breakat (вместе с [ и {, пока я был там).

Я пробовал это;Вот вывод :set breakat:

breakat= ^I!@*-+;:,./?([{

Однако, это бесполезно.Независимо от того, что я делаю, Вим настаивает на разрыве после "=" выше.У меня такая же проблема с длинными именами функций, где она сломается сразу после def.

Вот полное содержимое моего .vimrc:

set nobackup
set nowritebackup
set noswapfile
set columns=80
set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent
set smarttab
set smartindent
set textwidth=80
set wrap
set breakat=\ ^I!@*-+;:,./?\(\[\{
filetype indent on
filetype on
filetype plugin on

(яне нужно устанавливать никаких плагинов и т. д., чтобы попытаться это выяснить.)

Кто-нибудь знает, как я могу заставить Vim подчиняться настройкам своего брейка, или любые другие мысли о том, как лучше всего справиться с этим?это поведение?

1 Ответ

3 голосов
/ 05 октября 2011

Вы не устанавливаете разрыв строки. Без этого vim игнорирует переменную breakat. Смотрите здесь для подробностей и много хорошего. Также обратите внимание, что вам нужно установить nolist, поскольку он прерывает перевод строки.

Еще одно сообщение в блоге, посвященное переносу слов здесь . Это замечает, что некоторые типы файлов не включают в себя параметры формата «t». Без этого автоматическая упаковка не происходит.

Я думаю, что самое простое, что нужно сделать, это добавить отображение для запуска :%! pythonTidy. pythonTidy - это скрипт на python, который берет код python в stdIn и выводит симпатичную версию в stdOut. С помощью этого сопоставления он позволит вам запустить его для текущего файла и заменить все содержимое переформатированной версией. Добавьте автокоманду, чтобы запускать ее всякий раз, когда вы выходите из режима вставки в файлах Python, и вы должны быть установлены.

...