2013-08-06 10 views
5

mi ritrovo spesso a leggere il codice C di altro sviluppatore contenente espressioni comevim: visualizzare il tipo di C aggregata (struct/union) membri, anche quando nidificato

ptr->member1.member2[i].another_member.final_member = 42; 

e che hanno bisogno di scoprire che tipo final_member è. Di solito quello che faccio è rintracciare la catena di tipi usando i tag C, partendo dalla dichiarazione di ptr e scavando nella catena dei membri. Questo è ingombrante e spesso sono bloccato da qualche parte grattandomi la testa, chiedendomi "Qual è stato il prossimo membro della catena?" A peggiorare le cose, un semplice grep per final_member nell'albero di origine genera troppi falsi positivi a causa del riutilizzo del nome in più di una struttura.

C'è un modo per farmi dare la risposta direttamente? Sono disposto ad installare qualsiasi plug-in e persino a digitare alcuni caratteri mentre il cursore si trova su final_member o selezionare l'intera espressione :-) Le soluzioni non GUI preferite.

+0

questo è C++ '->' diritto – aaronman

+3

@aaronman No, C, fin da K & R :-) – Jens

+0

Eh ho anche se C non hanno avuto la '- 'operatore>', immagino che non – aaronman

risposta

0

Ti suggerisco di usare il plugin clang_complete (o qualche altro plugin alimentato da clang) per il completamento. Ti darà puro completamento del codice C/C++/Objective-C dal compilatore reale, non brutto metodo per tag. Ogni voce nel menu di completamento ha anche il tipo di campo (è quello che stai cercando)

Omnicipompleto fallisce spesso su espressioni complicate. Clang funziona alla grande, dato che è un compilatore davvero fantastico.

+0

Ok, l'ho installato. I possibili completamenti dopo un '->' o '.' mostrano il tipo. Ma si può fare questo per visualizzare il tipo anche senza completare effettivamente, cioè quando il nome utente è già completo, ad esempio, chiamando una funzione? – Jens

+0

Dovresti quindi posizionare il cursore alla fine del nome della funzione e premere Ctrl + X Ctrl + U. Questo in realtà mostrerà il menu di completamento con menuitem singolo. –

+0

Va bene, ho fatto una mappatura per la modalità di comando: 'mappa T hei ' che fa il trucco. Ma questo mi mette in modalità di inserimento (se aggiungo '' il popup scompare dopo un secondo). C'è un modo per mostrare il completamento dalla modalità di comando e farlo svanire con il prossimo evento della stampa dei tasti? – Jens

2

Se sto lavorando a un progetto con diverse strutture nidificate, aggiungo preview all'opzione completeopt.

In combinazione con l'eccellente plug-in omnicppcomplete, viene visualizzata una piccola finestra che consente di selezionare una voce nel menu di completamento. Quella finestra scratch mostra alcune proprietà del tag selezionato. Tra le altre cose contiene il modello di ricerca per il tag che, nel caso di un membro struct, solitamente contiene il suo tipo di dati.