Wie kann man Javascript-Tags in vim mit tagbar + jsctags + tern_for_vim + ctags_exuberant anzeigen?

7

Ich schreibe Javascript-Code mit vim und möchte wirklich eine Gliederungsansicht für die aktuelle Javascript-Datei haben, die ich bearbeite. Ich finde, Tagbar ist das beliebte Plugin für diesen Zweck. Und damit das Javascript funktioniert, empfiehlt es in seinem Wiki, dass jsctags von Tern abhängt.

Jetzt

  1. Ich habe vim Plugins installiert: tagbar und tern_for_vim.
  2. Ich habe üppige ctags installiert und den Bin in den Pfad gestellt
  3. Ich habe jsctags installiert

Ich öffne eine js-Datei in vim und öffne die Tagbar-Gliederungsansicht, aber es werden keine Tags angezeigt.

Also versuche ich, jsctags für eine js-Datei in der Befehlszeile direkt auszuführen, trotzdem wird nichts ausgegeben.

Hat jemand diese Kombination erfolgreich zum Laufen gebracht? Kann jemand einige Gedanken teilen?

Aaron Shen
quelle
4
Also, was genau ist deine Frage? Sie haben irgendwo einige Anweisungen befolgt (wo? Was genau haben Sie getan?) Und etwas funktioniert nicht (was?), Wie Sie es erwartet haben (was haben Sie erwartet?)
Martin Tournoij
Ein Teil des Prozesses, den Aaron nicht erwähnt hat, ist das Generieren der Tags-Datei. Das könnte möglich sein, indem man etwas auf der Shell laufen lässt:jsctags *.js **/*.js
joeytwiddle
Ihre Frage ist nach Ihrer Bearbeitung besser ;-) Aber ich denke, diese Frage würde wahrscheinlich bessere Antworten erhalten, wenn Sie eine (kleine) vimrc-Datei und eine (kleine) JS-Datei einfügen würden, die das Problem deutlich machen. Dies würde den Aufwand reduzieren, den der potenzielle Antwortende benötigt, um mit der Untersuchung Ihres Problems zu beginnen ;-)
Martin Tournoij
1
@joeytwiddle Das Tagbar-Plugin verwendet die externen Tools, um eine eigene Tag-Datei zu erstellen. Sie sollten dies nicht manuell in der Befehlszeile tun müssen.
Rich
2
Ich habe Ihre Version 4 → 3 zurückgesetzt. Bitte senden Sie die Auflösung stattdessen als Selbstantwort.
200_Erfolg

Antworten:

4
:g/func/#

gibt Ihnen einen umsetzbaren Überblick über den aktuellen JavaScript-Puffer, ohne ein Plugin eines Drittanbieters zu installieren oder ein externes Programm zu benötigen.

Verwenden Sie func\|vardiese Option , um Variablendeklarationen einzuschließen.

romainl
quelle
Was meinst du mit "umsetzbar"? Oder genauer gesagt, welche Maßnahmen kann ich ergreifen und wie?
Joeytwiddle
Ich nehme an, das Tippen :[line_number]ist die offensichtliche Handlung. Ich kann auch die letzte Zeile mit ziehen /yoder alle mit löschen /d. (Ich bin gerade über den heiligen Gral gestolpert.) Gibt es eine Möglichkeit, alle Zeilen zu ziehen?
Joeytwiddle
@joeytwiddle, ja, :23<CR>ist das Offensichtliche. Sie können verwenden :g//y A, um alle Zeilen in der Ausgabe zu ziehen, um sich zu registrieren a.
Romainl
1

Ich habe eine Reihe von CTAGS-Regex-Regeln für JavaScript und CoffeeScript entwickelt. Meine Regeln beinhalten Unit-Tests, daher denke ich, dass sie zuverlässiger sind als die meisten anderen.

Hier ist mein Git-Repo, das auf dem neuesten Stand sein sollte: https://github.com/winstonwolff/ctags-javascript-coffeescript

Und hier sind die Regeln, die ich beim Schreiben dieses Beitrags verwende:

--languages=-JavaScript
--langdef=js
--langmap=js:.js
--regex-js=/^var[ \t]+([a-zA-Z0-9._$]+) = \[/\1/a,array/
--regex-js=/^var[ \t]+([a-zA-Z0-9._$]+) = \{/\1/o,object/
--regex-js=/^var[ \t]+([a-zA-Z0-9._$]+)[ \t]*=[^{\[]*$/\1/r,var/

--regex-js=/^var[ \t]+([A-Za-z0-9._$]+)[ \t]*=[ \t]*[A-Za-z0-9_$]+.extend/\1/f,function/
--regex-js=/^[ \t]*([A-Za-z0-9_$]*\.)*([A-Za-z0-9_$]+)[ \t]*[:=][ \t]*function/\2/f,function/
--regex-js=/^[ \t]*function[ \t]*([A-Za-z0-9_$]+)[ \t]*\(/\1/f,function/
--regex-js=/^[ \t]*var[ \t]+([A-Za-z0-9_$]*\.)*([A-Za-z0-9_$]+)[ \t]*=[ \t]function/\2/f,function/

--regex-js=/(jQuery|\$)\([ \t]*([^ \t]*)[ \t]*\)\.bind\([ \t]*['"](.*)['"]/\2.\3/f,function/

--regex-js=/^[ \t]*describe[ \t]*\([ \t]*["'](.*)["']/\1/f,function/
--regex-js=/^([ \t]*)(describe|context|it)[ \t]*\([ \t]*["'](.*)["']/.\1\3/f,function/
Winston
quelle