2013-03-15 23 views
6

Ho bisogno di aiuto per impostare ctags, jsctags e la barra di tag in modo da avere un ambiente di modifica Javascript utilizzabile. Ho installato tutto ma non riesco a farmi un'idea di come funzionano ctags e jscags, quindi non so come configurare correttamente. Ho fatto un po 'di giro Google, ma le informazioni sono piuttosto infrante e mancano di coerenza. Ho ricevuto un errore simile a questo post, ctags and tagbar configuration are out of sync. Sono su OS X mountain lion e iterm2.ctags, jsctags/doctorjs, Tagbar passo dopo passo

Qualsiasi aiuto sarebbe molto apprezzato. Le istruzioni passo passo sarebbero eccellenti.

Thx.

risposta

5

In primo luogo, è necessario comprendere che jsctags e ctags probabilmente non saranno mai in sincrono. Anche se hai solo una funzione semplice, entrambi i programmi possono generare informazioni leggermente diverse. Pertanto si consiglia di utilizzare uno o l'altro ma non entrambi.

In secondo luogo, AFAIK, TagBar non deve essere configurato per utilizzare jsctags anziché ctags. Se si sta facendo JavaScript, verrà automaticamente impostato su jsctags se disponibile. TagBar non dovrebbe lamentarsi se hai un jsctags funzionante.

In terzo luogo, per le proprie funzionalità tag-correlati (:tag, :tselect, <C-]>, ecc), Vim basa solo sulla presenza di una o più fisici tags file. Se questi file sono generati da ctags, jsctags o whatevertags non è un problema se vengono generati correttamente.

E ora arriviamo al quarto punto in cui si trova realmente il dolore: né Tagbar né il suo vecchio cugino TagList utilizzano effettivamente un file fisico tags. Toccano direttamente ctags o jsctags senza nemmeno tentare di utilizzare o aggiornare alcun file esistente tags. Per questo motivo, e il fatto che TagBar si occupi solo del buffer corrente, il tuo file fisico tags (e quindi le funzionalità relative ai tag di Vim) e TagBar sono quasi sicuramente non sincronizzati. Anche se usi lo stesso indicizzatore.

Quindi ... vi consiglio di utilizzare sia ctags o jsctags e dimenticare nulla di sincronizzazione tag correlati di Tagbar e Vim roba in quanto entrambe le cose sono completamente separati:

  • Usa Tagbar a capisci/naviga nel tuo attuale buffer.

  • Utilizzare le funzionalità relative ai tag di Vim per spostarsi all'interno del progetto.


Pensieri casuali ...

  • Per Vim di rilevare il vostro tags file (s) in modo semplice, si dovrebbe mettere questa riga nel vostro ~/.vimrc:

    set tags=./tags,tags;/ 
    

    ./tags mezzi "cerca un file tags nella directory del file corrente", tags significa "cercare un file tags nella directory di lavoro", ;/ significa "continua a cercare su e su fino a raggiungere /".

  • The TagBar wiki parla di un bug in jsctags, assicurarsi che non ci si interessi da esso.

  • jsctags è meglio di ctags quando si scrive un codice JavaScript "moderno" con molte callback e funzioni autoeseguite. Se il tuo JavaScript è più tradizionale, potrebbe essere sufficiente ctags.

+0

romainl, grazie per la spiegazione. Penso che abbia funzionato jsctags ma la barra di tag ha mostrato solo variabili, metodi, chiusure, ecc. Senza breakdown/gerarchia, come un albero di oggetti, o riferimenti a librerie esterne (richiede (..)). È così che dovrebbe essere? Forse ctags può fare un lavoro migliore? Il valore più grande potrebbe essere il cursore su una variabile e andare al file sorgente che lo definisce. Spero di avere un senso. – 1001b

+0

Si suppone che si disponga di una vista gerarchica con ambito. Jsctags dovrebbe fare un lavoro migliore per lo scope rispetto ai ctags, quindi quello che descrivi sembra un bug in jsctags menzionato nel wiki di TagBar. Dovresti provare il tracker dei problemi su Github per un aiuto più mirato, temo. Se si dispone di un file 'tag' aggiornato, premendo' 'con il cursore su una variabile si dovrebbe saltare alla definizione. Vedi [this] (https://github.com/romainl/dotvim/blob/master/vimrc#L174) per un comando più JS-friendly. – romainl

+0

Thx di nuovo. La linea di rimappatura è molto utile. Come organizzi normalmente il tuo file di tag (o come si chiama il comando jsctags)? La natura contorta della struttura delle dipendenze in JS rende le cose meno intuitive. Ad esempio, i moduli di base sono nel nodo ma i file di progetto sono in un percorso diverso ... A proposito, mi succede l'ambito dei tag ... La soluzione proposta, secondo il wiki, non è praticabile in quanto richiede downgrade node.js! Qualche altra soluzione? Di nuovo. – 1001b

Problemi correlati