VIM + Python - команда "gd" не работает должным образом - PullRequest
5 голосов
/ 17 января 2011

Я начинаю использовать VIM для программирования Python.Я столкнулся с некоторыми проблемами, надеюсь, кто-то может помочь мне с этим.

Команда "gd" должна привести вас к первому месту, где переменная определена / используется в текущей функции.Из того, что я понимаю, это то же самое, что выполнить «[[» для перехода к началу функции и затем выполнить поиск по имени переменной.

Проблема в том, что, когда я пытаюсь это сделать в функциях Python, vimнаходит первое вхождение переменной во всем файле.

Есть мысли о том, почему это происходит / как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Я думаю, что проблема в том, как 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
2 голосов
/ 17 января 2011

Я не переопределил varname в моей конфигурации Vim, и он хорошо работает, но я скомпилировал vim с python. Может в этом проблема?

У вас установлена ​​VIM версии 7.x, скомпилированная с поддержкой Python? Чтобы проверить это, введите :python print “hello, world” в VIM. Если вы видите сообщение об ошибке вроде E319: Sorry, the command is not available in this version, тогда пришло время получить новый.

...