Конец движения блока Python

13

Мне нужно движение, которое перемещается в конец / начало блока Python, и мне нужно другое движение, которое перемещается в начало / конец предыдущего / следующего метода / класса (все комбинации).

Я пробовал vim-indent-object, python-mode, chapa, vim-python-object и т. Д. Ни один из них не поддерживает конец блока, и ни один из них не поддерживает все комбинации вышеуказанных движений.

Я помню , когда - то давно у меня был плагин , который при условии ]], [[, ][и []движения на главную страницу / конец предыдущего / следующего метода / класса, но я не могу найти его в моем каталоге подключен (поиск «] [» и «[]» в моем подключенном каталоге и проанализировал все вхождения, но не нашел ничего, что определяло бы «] [» или «[]»).

Вы знаете плагин, который я использовал? Знаете ли вы какой-либо плагин, который обеспечивает эту функциональность?

Sassan
источник
3
[[и ]]предоставлены по умолчанию Python ftplugin.
romainl
1
@romainl Спасибо за информацию, я знаю о том [[, ]], (, ), {и }. [[и ]]полезны в некоторых случаях , но моя главная проблема мне нужно []и ][или что - то подобное, что обеспечивает переход к концу следующего / предыдущего метода / класса.
Сасан
1
@muru спасибо, это ]eрешает большинство моих проблем, однако некоторые отображения в этом плагине, похоже, нарушены, ]vили ]>я постараюсь исправить их в развилке и опубликовать. Хотя мне все еще интересно, что за плагин предоставил, ][и []это было действительно полезно.
Сасан

Ответы:

11

С недавним обновлением (ноябрь 2017 г.) $VIMRUNTIME/ftplugin/python.vimдля языка Python теперь доступны следующие специфичные для ft движения.

  • [[ Перейти назад к началу текущего / предыдущего верхнего уровня
  • [] Перейти назад к концу предыдущего верхнего уровня
  • ][ Перейти к концу текущего верхнего уровня
  • ]] Прыгайте вперед, чтобы начать следующий уровень
  • [m Перейти назад к началу текущего / предыдущего метода / области
  • [M Перейти назад к концу предыдущего метода / области
  • ]M Перейти вперед к концу текущего / следующего метода / области
  • ]m Перейти к началу следующего метода / области

Пример файла Python

class previous:             # [[[[

    def method_first:
        pass
    # ...

    def method_last:
        pass                # []

class current:              # [[ or [m...[m[m

    def method_first:       # [[]m or [m...[m
        pass                # [[]M or [M...[M
    # ...

    def method_previous:    # [m[m
        pass                # [M

    def method_current:     # [m
        # CURSOR <---------------------------
        pass                # ]M

    def method_next:        # ]m
        pass                # ]M]M
    # ...

    def method_last:        # ][[m or ]m...]m
        pass                # ][   or ]M...]M

class previous:             # ]]   or ]m...]m]m

    def method_first:
        pass
    # ...

def global_func:            # ]]]]
    pass

Это обновление должно быть включено, если ваш уровень обновления vim по крайней мере 8.0.1256.

Если вы не можете обновить, но хотите использовать эту функцию, вы можете установить самую последнюю версию в ~/.vimкаталог:

$ curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.vim/ftplugin/python.vim

Плагин Pythonsense

Этот плагин обеспечивает аналогичные движения, но немного изменен:

В стандартной версии Vim 8.0 "движения" класса (" ]]", " [[" и т. Д.) Находят блоки, которые начинаются с первого столбца, независимо от того, являются ли они классовыми или функциональными блоками, в то время как его движения метода / функции (" [m", " ]m" и т. д.) найти все блоки в любом отступе независимо от того, являются ли они классовыми или функциональными блоками. Напротив, движения класса «Pythonsense» работают над нахождением всех и только определений классов, независимо от их уровня отступа, в то время как его движения метода / функции работают с поиском всех и только определений метода / функции, независимо от их уровня отступа.

Все подробности и примеры приведены по адресу https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions .

Hotschke
источник
Я должен подождать, пока неовим принесет этот патч.
Sassan
1
Я думаю, на данный момент вы можете установить его вручную curl https://raw.githubusercontent.com/vim/vim/master/runtime/ftplugin/python.vim --create-dirs -o ~/.config/nvim/ftplugin/python.vim.
Хотчке