Отображение квадратных скобок [[
, ]]
, [m
, ]m
и аналогичные
$VIMRUNTIME/ftplugin/python.vim
сейчас (2018) перераспределяет все встроенные отображения, задокументированные в :h ]]
и :h ]m
для языка Python. Отображения:
]] Jump forward to begin of next toplevel
[[ Jump backwards to begin of current toplevel (if already there, previous toplevel)
]m Jump forward to begin of next method/scope
[m Jump backwords to begin of previous method/scope
][ Jump forward to end of current toplevel
[] Jump backward to end of previous of toplevel
]M Jump forward to end of current method/scope
[M Jump backward to end of previous method/scope
Следующий пример исходного кода с комментариями иллюстрирует различные сопоставления
class Mapping: # [[[[
def __init__(self, iterable):
pass
def update(self, iterable):
pass
__update = update # []
class Reverse: # [[ or [m[m
def __init__(self, data): # [m
self.data = data
self.index = len(data) # [M
def __iter__(self): # <--- CURSOR
return self # ]M
def __next__(self): # ]m
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index] # ][
class MappingSubclass(Mapping): # ]] or ]m]m
def update(self, keys, values):
pass
Отображения были добавлены и улучшены в коммитах abd468ed0 (2016-09-08), 01164a6546b4 (2017-11-02) и 7f2e9d7c9cd (2017-11-11).
Если у вас еще нет новой версии этого файла, вы можете скачать ее и поместить в ~/.vim/ftplugin/python.vim
. Эта папка имеет приоритет перед $VIMRUNTIME/ftplugin
.
До того, как эти сопоставления были добавлены в $VIMRUNTIME
, существовал плагин python-mode
, который обеспечивает [[
, ]]
, [M
и ]M
. Кроме того, python-mode
также определяет текстовые объекты aC
, iC
, aM
и iM
:
Этот плагин vim предоставляет движения, аналогичные встроенным:
2.4 Vim motion ~
*pymode-motion*
Support Vim motion (See |operator|) for python objects (such as functions,
class and methods).
`C` — means class
`M` — means method or function
*pymode-motion-keys*
========== ============================
Key Command (modes)
========== ============================
[[ Jump to previous class or function (normal, visual, operator)
]] Jump to next class or function (normal, visual, operator)
[M Jump to previous class or method (normal, visual, operator)
]M Jump to next class or method (normal, visual, operator)
aC Select a class. Ex: vaC, daC, yaC, caC (normal, operator)
iC Select inner class. Ex: viC, diC, yiC, ciC (normal, operator)
aM Select a function or method. Ex: vaM, daM, yaM, caM (normal, operator)
iM Select inner func. or method. Ex: viM, diM, yiM, ciM (normal, operator)
========== ============================
Этот плагин обеспечивает аналогичные движения, но немного изменен:
Стандартные движения класса "Vim" ("]", "[[" и т. Д.) Vim 8.0 находят блоки, начинающиеся с первого столбца, независимо от того, являются ли они классовыми или функциональными блоками, в то время как его метод Движения / function ("[m", "] m" и т. д.) находят все блоки в любом отступе независимо от того, являются ли они классовыми или функциональными блоками. Напротив, движения класса "Pythonsense" работают над нахождением всех и только определений классов, независимо от их уровня отступа, в то время как его движения метода / функции работают с поиском всех и только определений методов / функций, независимо от их уровня отступа.
Все подробности и примеры приведены на https://github.com/jeetsukumaran/vim-pythonsense#stock-vim-vs-pythonsense-motions.
Кроме того, этот плагин определяет текстовые объекты ic/ac
(класс), if/af
(функция), id/ad
(строка документации).
Для обсуждения текстовых объектов для Python см. Какой самый быстрый способ выбрать функцию Python через VIM? .