Я думаю, что проблема в том, как Vim обрабатывает функцию. Из документации на [[
:
*[[*
[[ [count] sections backward or to the previous '{' in
the first column. |exclusive|
Note that |exclusive-linewise| often applies.
Если раздел где-то не определен специально для файлов Python где-то (я не уверен, что это возможно, поскольку они должны быть двухбуквенными разделами nroff), это предполагает, что в первый столбец, который не относится к файлам Python.
Я бы предложил спросить в списке рассылки Vim, есть ли какие-нибудь плагины или обходные пути для этого. В качестве альтернативы вы можете определить отображение следующим образом:
nmap gd :let varname = '\<<C-R><C-W>\>'<CR>?\<def\><CR>/<C-R>=varname<CR><CR>
Это можно сделать более элегантно с помощью функции, но это был просто быстрый взлом, который должен работать. Он сопоставляет gd
с функцией, которая устанавливает переменную 'varname' для хранения слова, на котором находится курсор, выполняет поиск назад для def, а затем ищет переменную вперед:
:let varname = " Variable setting
'\< " String start and word boundary
<C-R><C-W> " Ctrl-R, Ctrl-W: pull in the word under the cursor
\>' " Word boundary and string end
<CR> " Enter - finish this command
? " Search backwards for...
\<def\> " def but not undefined etc (using word boundaries)
<CR> " Enter - Perform search
/ " Now search forward
<C-R>= " Pull in something from an expression
varname<CR> " The expression is 'varname', so pull in the contents of varname
<CR> " Enter - perform search