Есть ли способ заставить == работать в vim для переопределения кода Python? - PullRequest
4 голосов
/ 05 декабря 2011

Допустим, у меня есть следующий код Python:

if conditionOne():
    if conditionTwo():
        foo = bar
        foo += 1
        bar -= 2

Если позже я удалю conditionTwo, я бы хотел сделать отступ в трех строках блока, чтобы он выглядел согласованным со всем моим другим кодом.Обычно я бы просто набрал =% (мой основной язык - C ++), но здесь это не сработает, поэтому я попробовал 3== в первой строке блока.Это привело к этому:

if conditionOne():
    foo = bar
        foo += 1
        bar -= 2

Это не то, что я искал.Я мог бы пойти с 3<< и получить лучший результат, но я обычно не использую эту команду.Я бы предпочел не запоминать специальные команды отступов только для Python.В духе Не заставляйте меня думать , есть ли способ заставить фильтры = работать с кодом Python, как я ожидаю?

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

В то время как в C или C ++ отступы программы не влияют на ее поведение, в Python это действительно может произойти, поскольку отступы являются частью управления потоком.

Поэтому в Python программа с другим отступом будет иметь другое поведение, и для редактора невозможно угадать, хотел ли разработчик сделать отступ для строки (во внутренней области видимости) или нет.

Следовательно, функции автоматического отступа вашего редактора предназначены для работы с C-подобными языками, а не с Python.

0 голосов
/ 05 декабря 2011

Если вы используете плагин vim-indent-object , вы можете сделать следующее, чтобы удалить строку и сделать отступ в блоке:

  • С курсором на условном: <iidd
  • С курсором в любом месте блока: <aidd

Имея это в виду, может быть, вы могли бы :nmap =% <ii и :nmap == <ai и удалить условное выражение по своему желанию. Это не идеальное решение, но мне кажется, что это достойная альтернатива.

...