He construido globales con universal-ctags. Pude verificar que al ejecutar ctags --version obtengo la versión universal-ctags y no ninguna otra.
He creado un archivo .ctags que contiene:
-exclude=foo
Al ejecutar gtags, no veo que respete el archivo .ctags. en su lugar, simplemente sigue adelante y extrae etiquetas para todo en el directorio de trabajo.
¿Qué estoy haciendo mal?
Universal-ctags no lee .ctags. Consulte la sección ARCHIVOS de la página de manual de ctags.1.
¿Se refiere a esto?
/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.
¡Veo .ctags como una de las posibilidades!
Presumiblemente, se refería a la página de manual actual .
Gracias codebrainz por responder. Entonces creé este archivo:
/pathtorepo/ctags.d/.ctags
que incluye la -R - excluye lo que necesito.
Al ejecutar este comando desde el directorio repos:
ctags --verbose
Me dice que está esperando información.
Cuando lo hago
ctags --vertbose --options = ctags.d / .ctags
hace lo correcto y extrae etiquetas de todos los repositorios excepto las exclusiones en el archivo .ctags.
¿Qué estoy haciendo mal?
Necesito ctags para respetar ctags.d / .ctags (o cualquier archivo que requiera) cuando solo ejecuto "ctags".
La razón es que estoy usando ggtags dentro de emacs y ggtags requiere que ggtags trabaje junto con ctags.
Básicamente, quiero llegar a un estado en el que pueda hacer "gtags" en el símbolo del sistema y automáticamente:
¿Cómo puedo hacer eso?
¿Qué tal /pathtorepo/.ctags.d/exclude.ctags?
Vea el árbol de origen de universal-ctags. Puede encontrar el directorio .ctags.d en él.
https://github.com/universal-ctags/ctags/tree/master/.ctags.d
Perdón por actualizar mi comentario repetidamente.
u-ctags debe cargar /pathtorepo/.ctags.d/exclude.ctags cuando se ejecuta u-ctags en / pathtorepo.
No dude en volver a abrir esto si u-ctags no carga su exclude.ctags.
masatake, gracias por la respuesta. Parece que se está recogiendo el archivo de exclusión, pero tengo un par de preguntas:
ctags: No se han especificado archivos. Prueba "ctags --help".
¿Pero por qué? ¿No debería actuar como:
ctags --verbose --options = .ctags
y simplemente analizar todo en el directorio actual excepto las exclusiones?
Acerca de 1. Necesito la información sobre el medio ambiente para responder a la pregunta.
Soy malo en inglés. Espero que el siguiente resultado le diga todo lo que necesita.
Por favor, compruebe que realmente está usando u-ctags.
$ ./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 carga archivos que tienen .ctags
como sufijo bajo ./.ctags.d.
$ ls -l .ctags.d
-rw-r--r--. 1 jet jet 104 Oct 14 02:46 exclusion.ctags
--verbose
opción
$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Se puede especificar un directorio o archivo con --options
. Si se proporciona un directorio,
se cargan los archivos que tienen .ctags
como sufijo bajo el directorio.
Sin embargo, el mismo archivo no se carga dos veces.
$ ./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
Un archivo sin el sufijo no se carga a menos que se especifique explícitamente el archivo con --options.
$ 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...
Eso es todo. Por favor, consulte la página del manual. Si la página de manual no está bien escrita, considere hacer una solicitud de extracción y muéstreme cómo podemos mejorarla.
Aproximadamente a las 2, lo siento, pero no sé bien sobre gtags.
Creo que recibiremos este tipo de preguntas repetidamente. ¿Qué puedo hacer antes de recibir la pregunta?
Si todavía carga $ HOME / .ctags, no obtendrá esta pregunta. La compatibilidad es excelente y no veo por qué dejas de cargar ese archivo. La confirmación ce0617a7be7a4d33a09ac60f21b8a9ce26690853 cambió esto sin decir el motivo.
Ahora tendré que mover mis archivos y actualizar mis grabaciones sobre archivos de configuración.
La confirmación es parte de # 1519, por lo que la razón se describe allí.
Romper la compatibilidad es una mala idea. Sin embargo, lo haré una vez, solo una vez (espero) cuando lance la versión inicial de u-ctags. Creo que el último es el formato de archivo de etiquetas. Lo más importante lo hace @ b4n. Lo que tengo que hacer es assigning version 3 tags file format
y hacer un documento para ello.
Tengo el mismo problema que el póster original, usando ~/.ctags.d/*.ctags
y (localmente) ./.ctags.d/*.ctags
.
Estoy usando GNU Global 6.6.3, compilado con soporte Universal Ctags. GTAGSCONF
apunta a la ruta de instalación predeterminada gtags.conf
y GTAGSLABEL
es new-ctags
.
También miré el código fuente en /plugin-factory/exuberant-ctags.c
Global (usado para llamar Universal Ctags; comenzando desde la línea 193) pero parecía que Universal Ctags se llamaba sin opción que deshabilitara la carga de .ctags.d/*.ctags
.
Si prefiero informar esto a los desarrolladores globales, por favor dímelo y lo haré. :)
Reproducir:
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
¿Qué tal llamar a ctags directamente como:
$ new-ctags --version
$ new-ctags -o - JULIA-FILE
¿Obtienes el resultado esperado?
Sí, llamar a Universal Ctags ( uctags
en mi máquina; GTAGSLABEL
no es el nombre del binario) funciona directamente a la perfección, con o sin el archivo .ctags especificado a través de --options
.
Entonces, Universal Ctags usa los archivos ~ / .ctags.d pero de alguna manera este comportamiento no se transfiere a Global.
Por favor, no use --options. uctags debe cargar ~ / .ctags.d / julia.ctags y ./.ctags.d/julia.ctags sin especificar --options.
Entonces, lo que me gustaría que corrieras es:
$ uctags --version
$ uctags -o - JULIA-FILE
Me gustaría ver la salida del comando.
Por cierto, ¿usas ctags en GNU / Linux?
Lo siento, no estaba claro. uctags
usa el contenido de ~/.ctags.d
como se desee, incluso si no doy la bandera --options
. Sin embargo, si utilizo gtags
con uctags
como backend, ~/.ctags.d
_no_ se utiliza.
Sí, lo estoy usando en GNU / Linux, específicamente en Ubuntu. El resultado es el siguiente:
$ 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
Editar: Versión más nueva compilada de Universal Ctags, la salida se mantuvo igual.
La salida no muestra la función greet
que usé en el ejemplo para reproducir más arriba . Esto se debe a un analizador desactualizado en la rama a la que lo vinculé; simplemente sustituya global greet
con global square
y aún así no dará salida.
ok Como programa independiente, uctags funciona bien.
Estás usando GNU / Linux. ¡Bien! Te puedo ayudar mucho más.
Instale el paquete strace. No conozco bien Ubuntu, pero apt-get puede ser el comando para instalar strace.
Entonces corre
$ strace -s 4096 -f -e execve,execveat gtags
Me gustaría ver la salida.
ok Como programa independiente, uctags funciona bien.
¡Sí, funciona maravillosamente de forma independiente!
Estás usando GNU / Linux. ¡Bien! Te puedo ayudar mucho más.
Lo siento, no mencioné eso antes.
$ 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 +++
La salida de strace le dice a gtags que no llamó a uctags.
Muchísimas gracias. Lamento molestarme.
¡Entonces escriba al desarrollador de GLOBAL!
¡gracias de nuevo! Los Ctags universales son geniales. :)
Oye, lo intenté un poco. No estoy seguro de si debería escribirte a ti oa Shigio.
GNU Global usa la configuración langmap
en el archivo GTAGSCONF para filtrar los archivos gtags
procesos y también pasa esa configuración a Universal Ctags.
En un momento, agregué la extensión de archivo para Julia (.jl) a la configuración global, sin embargo, Universal Ctags se detuvo con la advertencia:
Idioma desconocido "[lista de mapas de idioma]"
El problema surge porque Universal Ctags primero analiza sus argumentos y luego carga las opciones en .ctags.d
. Modifiqué Global para pasar explícitamente --options=[...].ctags
_antes_ de que pase la opción --langmap
.
Después de eso, todo funcionó perfectamente una vez más y obtengo las tablas globales.
Como dije, no estoy seguro de si esto es algo que desea cambiar (para que los archivos .ctags.d
se procesen antes que los argumentos de Universal Ctags) o si debo presentar un informe a Global.
El problema surge porque Universal Ctags primero analiza sus argumentos y luego carga las opciones en .ctags.d.
No lo implementé.
Solo unas pocas excepciones, Universal-ctags carga .ctags.d / *. Ctags y luego analiza las opciones de cmdline.
Como escribí en la página de manual ctags-optlib.7, puede usar la opción --_ echo = MSG para comprender y depurar cómo u-ctags carga los archivos de configuración.
[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
Consulte la página de manual de ctags.1. No entiendo por qué quiere pasar --options to ctags.
Poner julia.ctags en ~ / .ctags.d puede ser suficiente para su propósito. u-ctags carga julia.ctags automáticamente. Por lo tanto, no tiene que especificar --options explícitamente.
Bien, acabo de probar de nuevo y ya no recibo ningún error. Perdón una vez más por molestarte.