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:
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.
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
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
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