Ctags: gtags respektieren die .ctags-Datei nicht

Erstellt am 8. Dez. 2017  ·  25Kommentare  ·  Quelle: universal-ctags/ctags

Ich habe Globals mit Universal-Ctags gebaut. Ich konnte überprüfen, dass ich beim Ausführen von ctags --version die universal-ctags-Version bekomme und keine andere.

Ich habe eine .ctags-Datei erstellt, die Folgendes enthält:

-exclude=foo

Beim Ausführen von gtags sehe ich nicht, dass die .ctags-Datei respektiert wird. Stattdessen können Sie einfach Tags für alles im Arbeitsverzeichnis extrahieren.

Was mache ich falsch?

Alle 25 Kommentare

Universal-ctags liest keine .ctags. Siehe Abschnitt FILES der ctags.1-Manpage.

Beziehst du dich darauf?

/ctags.cnf (on MSDOS, MSWindows only)
/etc/ctags.conf
/usr/local/etc/ctags.conf
$HOME/.ctags
$HOME/ctags.cnf (on MSDOS, MSWindows only)
.ctags
ctags.cnf (on MSDOS, MSWindows only)

If any of these configuration files exist, each will be expected to contain a set of default options which are read in the order listed when ctags starts, but before the CTAGS environment variable is read or any command line options are read. This makes it possible to set up site-wide, personal or project-level defaults. It is possible to compile ctags to read an additional configuration file before any of those shown above, which will be indicated if the output produced by the --version option lists the "custom-conf" feature. Options appearing in the CTAGS environment variable or on the command line will override options specified in these files. Only options will be read from these files. Note that the option files are read in line-oriented mode in which spaces are significant (since shell quoting is not possible). Each line of the file is read as one command line parameter (as if it were quoted with single quotes). Therefore, use new lines to indicate separate command-line arguments.

Ich sehe .ctags als eine der Möglichkeiten!

Vermutlich meinte er die aktuelle Manpage .

Danke codebrainz für die Antwort. Also habe ich diese Datei erstellt:
/pathtorepo/ctags.d/.ctags

das enthält das -R --excludes, das ich brauche.

Wenn Sie diesen Befehl aus dem Repos-Verzeichnis ausführen:

ctags --verbose

Es sagt mir, dass es Eingaben erwartet.

Wenn ich es tue

ctags --vertbose --options=ctags.d/.ctags

es macht das Richtige und extrahiert Tags aus allen Repositorys außer den Excludes in der .ctags-Datei.

Was mache ich falsch?

Ich benötige ctags, um ctags.d/.ctags (oder jede benötigte Datei) zu respektieren, wenn nur "ctags" ausgeführt wird.

Der Grund ist, dass ich ggtags in Emacs verwende und ggtags erfordert, dass ggtags Seite an Seite mit ctags arbeiten.

Im Grunde möchte ich also in einen Zustand gelangen, in dem ich einfach "gtags" in der Eingabeaufforderung ausführen kann und es automatisch:

  1. Verwenden Sie Universal-Ctags
  2. respektiert universal-ctags (ctags.d/.ctags) Datei

Wie kann ich das machen?

Wie wäre es mit /pathtorepo/.ctags.d/exclude.ctags ?
Sehen Sie sich den Quellbaum von universal-ctags selbst an. Darin finden Sie das Verzeichnis .ctags.d.
https://github.com/universal-ctags/ctags/tree/master/.ctags.d

Entschuldigung, dass ich meinen Kommentar wiederholt aktualisiert habe.

u-ctags müssen /pathtorepo/.ctags.d/exclude.ctags laden, wenn u-ctags unter /pathtorepo ausgeführt werden.
Fühlen Sie sich frei, dies erneut zu öffnen, wenn u-ctags Ihre exclude.ctags nicht lädt.

masatake, danke für die antwort. Es scheint, dass die Ausschlussdatei abgeholt wird, aber ich habe ein paar Fragen:

  1. dies parst die nicht ausgeschlossenen Dateien:
    ctags --verbose --options=.ctags
    aber das geht nicht:
    ctags --verbose
    Obwohl es heißt, dass es die Ausschlussdatei aufgenommen hat, erhalte ich diese Meldung:

ctags: Keine Dateien angegeben. Versuchen Sie es mit "ctags --help".

Aber warum? Sollte es nicht so wirken:
ctags --verbose --options=.ctags
und einfach alles im aktuellen Verzeichnis analysieren, außer den Ausnahmen?

  1. Wie bekomme ich Gtags, verwende Universal-Ctags und nimm die Ausschlussdatei auf?
    Wenn ich gtags ausführe, wird alles analysiert und die Datei exclude.ctags ignoriert, obwohl global erstellt wurde --with-universal-ctags

Über 1. Ich benötige die Informationen über die Umgebung, um die Frage beantworten zu können.

Ich bin schlecht in Englisch. Ich hoffe, die folgende Ausgabe sagt Ihnen alles, was Sie brauchen.

Bitte überprüfen Sie, ob Sie wirklich u-ctags verwenden.

$ ./ctags --version | grep Universal
Universal Ctags 0.0.0(248cffc9), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.

u-ctags lädt Dateien mit .ctags als Suffix unter ./.ctags.d.

$  ls -l .ctags.d
-rw-r--r--. 1 jet jet 104 Oct 14 02:46 exclusion.ctags

--verbose Option

$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...

Ein Verzeichnis oder eine Datei kann mit --options . Wenn ein Verzeichnis angegeben ist,
Dateien mit .ctags als Suffix unter dem Verzeichnis werden geladen.
Dieselbe Datei wird jedoch nicht zweimal geladen.

$ ./ctags --verbose --options=.ctags.d 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/exclusion.ctags: already considered

Eine Datei ohne das Suffix wird nicht geladen, es sei denn, die Datei wird explizit mit --options angegeben.

$ touch ./.ctags.d/please-load-me
$ ./ctags --verbose  2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
$ mv ./.ctags.d/please-load-me ./.ctags.d/please-load-me.ctags
$ ./ctags --verbose  2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/please-load-me.ctags: reading...

Das ist alles. Bitte lesen Sie die Manpage. Wenn die Manpage nicht gut geschrieben ist, stellen Sie bitte einen Pull-Request und zeigen Sie mir, wie wir sie verbessern können.

Ungefähr 2, es tut mir leid, aber ich kenne mich mit Gtags nicht gut aus.

Ich denke, wir werden diese Art von Fragen immer wieder bekommen. Was kann ich tun, bevor ich die Frage bekomme?

Wenn Sie immer noch $HOME/.ctags laden, erhalten Sie diese Frage nicht. Die Kompatibilität ist großartig, und ich verstehe nicht, warum Sie aufhören, diese Datei zu laden. Der Commit ce0617a7be7a4d33a09ac60f21b8a9ce26690853 hat dies ohne Angabe von Gründen geändert.

Jetzt muss ich meine Dateien verschieben und meine Aufzeichnungen über Konfigurationsdateien aktualisieren.

Der Commit ist Teil von #1519, daher wird der Grund dort beschrieben.

Die Kompatibilität zu unterbrechen ist eine schlechte Idee. Ich werde es jedoch einmal tun, nur einmal (hoffe ich), wenn die erste Version von u-ctags veröffentlicht wird. Ich denke, das letzte ist das Tag-Dateiformat. Das Wichtigste wird von @b4n erledigt. Was ich tun muss, ist assigning version 3 tags file format und ein Dokument dafür zu erstellen.

Ich habe das gleiche Problem wie das ursprüngliche Poster, wobei sowohl ~/.ctags.d/*.ctags als auch (lokal) ./.ctags.d/*.ctags .
Ich verwende GNU Global 6.6.3, kompiliert mit Universal Ctags-Unterstützung. GTAGSCONF zeigt auf den standardmäßigen gtags.conf Installationspfad und GTAGSLABEL ist new-ctags .

Ich habe auch den Quellcode in Globals /plugin-factory/exuberant-ctags.c durchgesehen (wird verwendet, um Universal Ctags aufzurufen; ab Zeile 193), aber es schien, als würde Universal Ctags ohne Option aufgerufen, die das Laden von .ctags.d/*.ctags deaktivieren würde .

Wenn ich dies eher den globalen Entwicklern melden sollte, sagen Sie es mir bitte und ich werde dies tun. :)

Fortpflanzen:

git clone -b tests --single-branch https://github.com/janEbert/julia-ctags.git
cd julia-ctags
mkdir -p ~/.ctags.d
mkdir -p .ctags.d
ln -s $PWD/ctags ~/.ctags.d/julia.ctags  # or cp if you want to be safe
ln -s $PWD/ctags ./.ctags.d/julia.ctags
gtags
global greet  # returns nothing

Wie wäre es, ctags direkt aufzurufen, wie:

$ new-ctags --version
$ new-ctags -o - JULIA-FILE

Erhalten Sie ein erwartetes Ergebnis?

Ja, das direkte Aufrufen von Universal Ctags ( uctags auf meinem Computer; GTAGSLABEL ist nicht der Name der Binärdatei) funktioniert perfekt, mit oder ohne die über --options angegebene .ctags-Datei.
Universal Ctags verwendet also die ~/.ctags.d-Dateien, aber irgendwie wird dieses Verhalten nicht auf Global übertragen.

Bitte verwenden Sie keine --options. uctags sollten ~/.ctags.d/julia.ctags und ./.ctags.d/julia.ctags ohne Angabe von --options laden.

Also, was ich möchte, dass Sie laufen, ist:

$ uctags --version
$ uctags -o - JULIA-FILE

Ich möchte die Befehlsausgabe sehen.

Übrigens, verwenden Sie Ctags unter GNU/Linux?

Entschuldigung, ich war nicht klar. uctags verwendet den Inhalt von ~/.ctags.d wie gewünscht, auch wenn ich das --options Flag nicht angebe. Wenn ich jedoch gtags mit uctags als Backend verwende, wird ~/.ctags.d _nicht_ verwendet.

Ja, ich verwende es unter GNU/Linux, insbesondere unter Ubuntu. Die Ausgabe ist die folgende:

$ uctags --version
Universal Ctags 0.0.0(1a94658c), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jul 29 2019, 13:42:51
  URL: https://ctags.io/
  Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +packcc
$ uctags -o - testfile.jl
CtagsTest   testfile.jl /^module CtagsTest$/;"  f
ImmutablePoint  testfile.jl /^struct ImmutablePoint{T}$/;"  f
MutablePoint    testfile.jl /^mutable struct MutablePoint{T}$/;"    f
addcoment   testfile.jl /^addcoment(string::AbstractString, comment, spaces=1) = begin  # Maybe write without `begin`?$/;"  f
addone! testfile.jl /^function addone!(x::T) where {T <: Number}$/;"    f
deprecated_returnsquarepower    testfile.jl /^deprecated_returnsquarepower() = 2.0$/;"  f
multiply    testfile.jl /^multiply(x, y) = x * y$/;"    f
multiply    testfile.jl /^multiply(x, y...) = begin$/;" f
printgreeting   testfile.jl /^    function printgreeting(x)$/;" f
square  testfile.jl /^function square(x)$/;"    f

Bearbeiten: Neuere Version von Universal Ctags kompiliert, Ausgabe blieb gleich.

Die Ausgabe zeigt nicht die Funktion greet , die ich im Beispiel verwendet habe, um weiter oben zu reproduzieren. Dies liegt an einem veralteten Parser in dem Zweig, mit dem ich Sie verlinkt habe – ersetzen Sie einfach global greet durch global square und es gibt immer noch keine Ausgabe.

ok Als eigenständiges Programm funktioniert uctags gut.

Sie verwenden GNU/Linux. Gut! Ich kann dir viel mehr helfen.

Bitte installieren Sie das strace-Paket. Ich kenne Ubuntu nicht gut, aber apt-get kann der Befehl sein, um strace zu installieren.

Dann renne

$ strace -s 4096 -f -e execve,execveat gtags

Ich möchte die Ausgabe sehen.

ok Als eigenständiges Programm funktioniert uctags gut.

Ja, es funktioniert wunderbar eigenständig!

Sie verwenden GNU/Linux. Gut! Ich kann dir viel mehr helfen.

Entschuldigung, dass ich das nicht früher erwähnt habe.

$ strace -s 4096 -f -e execve,execveat gtags
execve("/usr/local/bin/gtags", ["gtags"], 0x7ffe7e8d0fe8 /* 83 vars */) = 0
strace: Process 2210 attached
[pid  2210] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c855b0 /* 84 vars */) = 0
strace: Process 2211 attached
[pid  2211] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c97410 /* 84 vars */) = 0
[pid  2210] +++ exited with 0 +++
[pid  2209] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2210, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
[pid  2211] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2211, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++

Die Ausgabe von strace teilt mit, dass gtags keine uctags aufgerufen haben.

Vielen Dank. Es tut mir leid, Ärger zu machen.
Dann schreiben Sie an den Entwickler von GLOBAL!
Danke noch einmal! Universelle Ctags sind großartig. :)

Hey, ich habe ein bisschen rumprobiert. Ich bin mir nicht sicher, ob ich dir oder Shigio schreiben soll.

GNU Global verwendet langmap Einstellungen in der GTAGSCONF Datei, um die Dateien zu filtern, die gtags verarbeitet und übergibt diese Einstellungen auch an Universal Ctags.

Irgendwann hatte ich die Dateierweiterung für Julia (.jl) zur globalen Konfiguration hinzugefügt, Universal Ctags stoppte jedoch mit der Warnung:
Unbekannte Sprache "[Liste der Langmaps]"

Das Problem entsteht, weil Universal Ctags zuerst seine Argumente analysiert und dann die Optionen in .ctags.d lädt. Ich habe Global so geändert, dass --options=[...].ctags explizit übergeben wird, _bevor_ es die Option --langmap übergibt.
Danach hat wieder alles perfekt funktioniert und ich bekomme die Global-Tabellen.

Wie gesagt, ich bin mir nicht sicher, ob Sie dies ändern möchten (damit die .ctags.d Dateien vor den Argumenten an Universal Ctags verarbeitet werden) oder ob ich einen Bericht an Global senden soll.

Das Problem entsteht, weil Universal Ctags zuerst seine Argumente analysiert und dann die Optionen in .ctags.d lädt.

Ich habe das nicht umgesetzt.
Nur mit wenigen Ausnahmen lädt Universal-ctags .ctags.d/*.ctags und analysiert dann die cmdline-Optionen.
Wie ich in der ctags-optlib.7-Manpage geschrieben habe, können Sie die Option --_echo=MSG verwenden, um zu verstehen und zu debuggen, wie u-ctags Konfigurationsdateien lädt.

 [yamato@slave]~% ls ~/.ctags.d 
config.ctags
[yamato@slave]~% cat ~/.ctags.d/config.ctags
--_echo=hello from dot-ctags


[yamato@slave]~% u-ctags --_echo="hello from cmdline" --_force-quit
u-ctags: Notice: hello from dot-ctags
u-ctags: Notice: hello from cmdline

Siehe ctags.1-Manpage. Ich verstehe nicht, warum Sie --options an Ctags übergeben möchten.
Es kann für Ihren Zweck ausreichen, julia.ctags in ~/.ctags.d zu platzieren. u-ctags lädt julia.ctags automatisch. Sie müssen --options also nicht explizit angeben.

Okay, ich habe gerade nochmal getestet und bekomme auch keinen Fehler mehr. Entschuldigung noch einmal, dass ich Sie belästigt habe.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

songouyang picture songouyang  ·  15Kommentare

cweagans picture cweagans  ·  8Kommentare

blueyed picture blueyed  ·  4Kommentare

JulienPivard picture JulienPivard  ·  16Kommentare

fabiensabatie picture fabiensabatie  ·  3Kommentare