Credo che Vim passi al primo tag nel file dei tag per impostazione predefinita. Se lo preferisci puoi selezionarne uno diverso: usa :tj
(simile a: tselect, ma salta automaticamente se c'è una sola corrispondenza) o Ctrl-]
seguito da :tn
).
L'unico modo per modificare l'impostazione predefinita è modificare l'ordine del file di tag, ma non credo che ctags offra un'opzione della riga di comando per farlo.
Non è così difficile come sembra che sia necessario uno script che apra il file di tag, lo smista dal "tipo" di tag e lo scriva nuovamente. Il "tipo" nel tag è un singolo carattere che descrive se si tratta di una funzione (f), una funzione prototipo (p), una macro, un nome enumerato ecc ecc ecc. Se stai usando Linux, potrebbe, in teoria, , essere semplice come:
#!/bin/sh
ctags -R -f - . | tac > tags
Dal tac
inverte l'ordine delle righe in un file, questo verrà messo automaticamente la definizione prima. Tuttavia, diventa un po 'più complicato in quanto l'intestazione deve essere mantenuta e Vim preferisce che il file dei tag sia ordinato, quindi è meglio passare attraverso il file e ordinare sulla prima voce (il nome del tag) in ordine forward e poi tipo in ordine inverso. Pertanto, qualcosa di più complicato potrebbe essere migliore.
Mi scuso per la spina senza vergogna, ma ho scritto un plug-in Vim che (indirettamente) fa quello che ti serve. È inteso per aggiungere molti gruppi di evidenziazione extra per cose come nomi di funzioni, macro, enumerazioni ecc. Tuttavia, una delle altre cose che fa è riordinare il file di tag in modo che l'implementazione della funzione venga prima della dichiarazione della funzione, quindi raggiungere ciò che vuoi (ho avuto lo stesso bisogno di te). Se non si desidera alcuna funzionalità di evidenziazione, è probabile che si possa eliminarla abbastanza facilmente: è un programma python piuttosto semplice e uno script Vim ancora più semplice ed è disponibile da my site.
Sembra promettente, lo controllerò - grazie. –
Per me, questo mi dà solo due dichiarazioni anticipate (in file diversi) di funzioni che condividono il nome. Ma non mostra l'implementazione della funzione. – frankster
Wow. Questa è la vita che cambia. – Praxeolitic