2010-01-18 3 views
1

Если курсор находится где-то в очень длинной функции, есть ли способ сообщить Vim пользователю, в какой функции он редактирует?Как определить функцию в Vim?

Кстати, я использую taglist, но, похоже, что taglist не обновляет автоматически, где вы находитесь, даже если вы переместили курсор на другую функцию.

ответ

5

Плагин taglist предоставляет эту функцию. Функция, в которой находится курсор, автоматически подсвечивается в списке функций taglist.

Убедитесь, что Tlist_Auto_Highlight_Tag не равно 0, чтобы включить эту функцию.

'updatetime' определяет время отсутствия активности, которое должно пройти до taglist выделяет текущую функцию. Значение по умолчанию - 4 секунды.

:help taglist.txt See section "Highlighting the current tag"

Как быстро испытания: Тип: TlistHighlightTag заставить taglist выделить текущую функцию. Если это работает, я полагаю, что вы отключили автоматическое выделение в любом способе (см. Tlist_Auto_Highlight_Tag).

2

В дополнение к ответу Хаби, если вы хотите сделать это без использования taglist, вы можете легко определить функцию, которая будет работать. Это зависит от того, какого языка вы программируете в, но для C-подобных языков, вы можете сделать это:

nmap ,f call ShowFuncName() 
" Show the name of the current function (designed for C/C++, Perl, Java etc) 
fun! ShowFuncName() 
    let lnum = line(".") 
    let col = col(".") 
    echohl ModeMsg 
    echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW')) 
    echohl None 
    call search("\\%" . lnum . "l" . "\\%" . col . "c") 
endfun 

Положите это в вашем vimrc, а затем нажмите ,е, чтобы увидеть текущую функцию.

Взятый с here.