Domanda

I principalmente uso vim / gvim come editor e sto guardando utilizzando una combinazione di LXR (il riferimento Linux Croce) e sia cscope o noreferrer ctags per esplorare i sorgenti del kernel. Tuttavia, non ho mai usato né cscope o ctags e vorrei sapere perché si potrebbe scegliere uno sopra l'altro prendendo in considerazione il mio uso di vim come editor principale.

È stato utile?

Soluzione

ctags permette due funzioni: consente di passare da chiamate di funzione alle loro definizioni, e il completamento Omni. Il primo significa che quando ci si trova su una chiamata a un metodo, colpendo g] o CTRL-] salterà al luogo in cui il metodo viene definito o implementato. La seconda caratteristica significa che quando si digita o foo. foo->, e se foo è una struttura, allora verrà mostrato un menu pop-up con il completamento di campo.

cscope ha anche la prima caratteristica - usando set cscopetag - ma non l'ultimo. Tuttavia cscope aggiunge inoltre la possibilità di accedere a qualsiasi dei luoghi in cui viene chiamata una funzione pure.

Quindi, per quanto riguarda saltare una base di codice è interessato, ctags saranno sempre e solo vi condurrà verso il luogo in cui è implementata la funzione, mentre cscope può mostrare dove una funzione è chiamata anche.

Perché si dovrebbe scegliere uno sopra l'altro? Beh, io uso entrambi. ctags è più facile da impostare, più veloce da eseguire e se vi interessa soltanto saltare in un modo che vi mostrerà meno linee. Si può solo eseguire :!ctags -R . e g] funziona. Consente, inoltre, che omni cosa completa.

Cscope è grande per basi di codice più grandi, sconosciute. Il set up è un dolore perché cscope ha bisogno di un file contenente un elenco di nomi di file da analizzare. Anche in vim, per impostazione predefinita non ci sono combinazioni di tasti impostati - è necessario eseguire manualmente :cscope blah blah

.

Per risolvere il problema pugno Ho un cscope_gen.sh script bash che assomiglia a questo:

#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp'  \
> cscope.files

# -b: just build
# -q: create inverted index
cscope -b -q

Questo cerca per il codice che mi interessa, crea la lista cscope.files e crea il database. In questo modo posso correre. ":! Cscope_gen.sh" invece di dover ricordare tutti i passaggi creati

I mappa di ricerca cscope a Ctrl-Spazio x 2 con questo frammento, che mitiga l'altro aspetto negativo di cscope:

nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>

questo cscope_maps.vim plug che imposta un gruppo di attacchi simili. Non riesco mai a ricordare che cosa significano tutte le opzioni, quindi tendono ad attenersi a ctrl-spazio.

Quindi, per concludere: ctags è più facile da configurare e funziona senza fare molto altro per lo più, è di vitale importanza per la omni-completa anche. cscope offre più funzionalità se si deve mantenere una grande e per lo più sconosciuti base di codice, ma richiede lavoro più delle gambe.

Altri suggerimenti

Io ero nella stessa situazione qualche mese fa ...

La mancanza di precisione di ctags è un dolore in un .., e trovo cscope molto meglio per tutte le macro roba relativi (e ci sono un sacco di macro nel kernel linux) ..

concernente l'utilizzo, che in realtà è semplice ... basta digitare cscope -R alla radice del vostro kernel e quindi non hai niente di cui preoccuparsi .. (voglio dire, se si desidera solo per scoprire che è perfetto .. .)

Poi, le combinazioni di tasti sono tutti basati su Ctrl- \ (è possibile rimappare se siete allergici a Ctrl), si utilizza principalmente s e g ....,

Lo sviluppo del kernel, non ho bisogno così tanto il completamento ....

In ogni caso, andare per cscope, questo è molto più conveniente, precisa.

Hmm ... probabilmente si dovrebbe usare etags invece di ctags ...

Se si utilizza cscope, allora si può vedere catene di chiamata, cioè, che chiama questa funzione e che funziona fa questa chiamata di funzione?

Non sono sicuro se questo può essere fatto utilizzando etags / ctags ...

Questa è solo una caratteristica ... che dire scoprire il file che contiene una particolare definizione di funzione? Questo si ottiene solo in cscope.

Io uso sia e cscope etags, sono entrambi buoni per cose diverse, soprattutto quando si lavora con una grande base di codice, come ad esempio il kernel Linux. In realtà, ho iniziato ad usare cscope e etags quando ho iniziato a lavorare con il kernel Linux / Xen.

LXR non è grande, perché è necessario fare clic, andare oltre la rete, ecc, mentre è possibile costruire le basi di dati cscope e tag sul vostro codice del kernel e non c'è bisogno di andare oltre la rete (a differenza di LXR).

Suggerisci gtags globali di utilizzo. Potrebbe utilizzare Vim plug gen_tags di integrare gtags con vim.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top