2010-01-18 5 views
1

Si le curseur se trouve quelque part dans une fonction très longue, est-il possible de laisser Vim dire à l'utilisateur dans quelle fonction il édite? Par ailleurs, j'utilise taglist mais semble que la liste de balises ne se met pas automatiquement à jour là où vous êtes, même si vous avez déplacé le curseur vers une autre fonction.Comment détecter une fonction dans Vim?

Répondre

5

Le plugin taglist fournit cette fonctionnalité. La fonction dans laquelle le curseur est actuellement positionné est automatiquement mise en surbrillance dans la liste des fonctions de la liste de balises.

Assurez-vous que Tlist_Auto_Highlight_Tag n'est pas égal à 0 pour activer cette fonctionnalité. 'Updatetime' définit le temps d'inactivité qui doit s'écouler avant que la liste de balises ne mette en évidence la fonction en cours. La valeur par défaut est 4 secondes.

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

Comme un test rapide: Type: TlistHighlightTag pour forcer taglist à mettre en évidence la fonction en cours. Si cela fonctionne, je suppose que vous avez désactivé la mise en surbrillance automatique de manière (voir Tlist_Auto_Highlight_Tag).

2

En plus de la réponse de Habi, si vous voulez le faire sans utiliser de liste de mots-clés, vous pouvez facilement définir une fonction qui fonctionnera. Cela dépend de quelle langue vous la programmation, mais pour les langages de type C, vous pouvez le faire:

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 

Mettez ça dans votre vimrc puis appuyez sur ,f voir la fonction en cours.

Extrait de here.

Questions connexes