Я создал глобалы с универсальными тегами. Я мог убедиться, что при выполнении ctags --version я получаю версию universal-ctags, а не какую-либо другую.
Я создал файл .ctags, содержащий:
-exclude=foo
При выполнении gtags я не вижу, чтобы он уважал файл .ctags. вместо этого он просто извлекает теги для всего в рабочем каталоге.
Что я делаю неправильно?
Universal-ctags не читает .ctags. См. Раздел ФАЙЛЫ на странице руководства ctags.1.
Вы имеете в виду это?
/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.
Я считаю .ctags одной из возможностей!
Предположительно, он имел в виду
Спасибо codebrainz за ответ. Итак, я создал этот файл:
/pathtorepo/ctags.d/.ctags
который включает -R - исключает то, что мне нужно.
При выполнении этой команды из каталога репозиториев:
ctags --verbose
Он говорит мне, что ожидает ввода.
Когда я делаю
ctags --vertbose --options = ctags.d / .ctags
он поступает правильно и извлекает теги из всего репо, кроме исключений в файле .ctags.
Что я делаю неправильно?
Мне нужны ctags для соблюдения ctags.d / .ctags (или любого другого файла, который ему нужен) при выполнении только «ctags».
Причина в том, что я использую ggtags внутри emacs, а ggtags требует, чтобы ggtags работали бок о бок с ctags.
Итак, в основном я хочу перейти в состояние, когда я могу просто ввести «gtags» в командной строке, и он автоматически:
Как я могу это сделать?
Как насчет /pathtorepo/.ctags.d/exclude.ctags?
Посмотрите само дерево исходных текстов universal-ctags. Вы можете найти в нем каталог .ctags.d.
https://github.com/universal-ctags/ctags/tree/master/.ctags.d
Извините за повторное обновление моего комментария.
u-ctags должен загружать /pathtorepo/.ctags.d/exclude.ctags при запуске u-ctags в / pathtorepo.
Не стесняйтесь открывать его снова, если u-ctags не загружает ваш exclude.ctags.
масатаке, спасибо за ответ. Кажется, что подхватывается исключаемый файл, но у меня есть пара вопросов:
ctags: файлы не указаны. Попробуйте "ctags --help".
Но почему? Разве это не должно действовать так:
ctags --verbose --options = .ctags
и просто проанализировать все в текущем каталоге, кроме исключений?
О 1. Мне нужна информация об окружающей среде, чтобы ответить на вопрос.
Я плохо говорю по-английски. Я надеюсь, что следующий вывод может рассказать вам все, что вам нужно.
Пожалуйста, убедитесь, что вы действительно используете 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 загружает файлы с суффиксом .ctags
в ./.ctags.d.
$ ls -l .ctags.d
-rw-r--r--. 1 jet jet 104 Oct 14 02:46 exclusion.ctags
--verbose
сообщает вам, какие файлы загружены.
$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Каталог или файл можно указать с помощью --options
. Если указан каталог,
загружаются файлы с суффиксом .ctags
в каталоге.
Однако один и тот же файл не загружается дважды.
$ ./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
Файл без суффикса не загружается, если явно не указать файл с помощью --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...
Это все. См. Справочную страницу. Если справочная страница написана некорректно, подумайте о том, чтобы сделать запрос на вытягивание и показать мне, как мы можем его улучшить.
Около 2, извините, но я плохо разбираюсь в тегах gtags.
Думаю, мы будем получать такие вопросы неоднократно. Что я могу сделать, прежде чем получить вопрос?
Если вы по-прежнему загружаете $ HOME / .ctags, вы не получите этот вопрос. Совместимость отличная, и я не понимаю, почему вы перестали загружать этот файл. Коммит ce0617a7be7a4d33a09ac60f21b8a9ce26690853 изменил это без указания причины.
Теперь мне нужно переместить файлы и обновить записи о файлах конфигурации.
Коммит является частью # 1519, поэтому причина описана там.
Нарушение совместимости - плохая идея. Однако я сделаю это один раз, только один раз (надеюсь) при выпуске начальной версии u-ctags. Думаю, последний - это формат файла тегов. Самое главное сделал @ b4n. Что мне нужно сделать, это assigning version 3 tags file format
и сделать для этого документ.
У меня та же проблема, что и с исходным плакатом, при использовании ~/.ctags.d/*.ctags
и (локально) ./.ctags.d/*.ctags
.
Я использую GNU Global 6.6.3, скомпилированный с поддержкой Universal Ctags. GTAGSCONF
указывает на путь установки по умолчанию gtags.conf
а GTAGSLABEL
- это new-ctags
.
Я также просмотрел исходный код в Global /plugin-factory/exuberant-ctags.c
(используется для вызова Universal Ctags; начиная со строки 193), но похоже, что Universal Ctags вызывается без опции, которая отключила бы загрузку .ctags.d/*.ctags
.
Если я предпочитаю сообщить об этом глобальным разработчикам, сообщите мне, и я сделаю это. :)
Воспроизвести:
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
Как насчет прямого вызова ctags:
$ new-ctags --version
$ new-ctags -o - JULIA-FILE
Вы ожидаете результата?
Да, вызов Universal Ctags ( uctags
на моей машине; GTAGSLABEL
не является именем двоичного файла) напрямую работает отлично, с файлом .ctags, указанным через --options
, или без него.
Таким образом, Universal Ctags использует файлы ~ / .ctags.d, но каким-то образом это поведение не передается в Global.
Пожалуйста, не используйте --options. uctags должен загружать ~ / .ctags.d / julia.ctags и ./.ctags.d/julia.ctags без указания --options.
Итак, я бы хотел, чтобы вы запустили:
$ uctags --version
$ uctags -o - JULIA-FILE
Я хотел бы увидеть вывод команды.
Кстати, вы используете ctags в GNU / Linux?
Извините, я не понял. uctags
использует содержимое ~/.ctags.d
по желанию, даже если я не выставляю флаг --options
. Однако, если я использую gtags
с uctags
в качестве бэкэнда, ~/.ctags.d
_не_ используется.
Да, я использую его в GNU / Linux, в частности в Ubuntu. Результат следующий:
$ 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
Изменить: скомпилирована более новая версия Universal Ctags, вывод остался прежним.
В выходных данных не отображается функция greet
которую я использовал в примере для дальнейшего воспроизведения. Это связано с устаревшим парсером в ветке, с которой я вас связал - просто замените global greet
на global square
и он все равно не выдаст.
ОК Как отдельная программа, uctags работает хорошо.
Вы используете GNU / Linux. Хороший! Я могу помочь вам гораздо больше.
Пожалуйста, установите пакет strace. Я плохо знаю Ubuntu, но команда apt-get может быть командой для установки strace.
Тогда беги
$ strace -s 4096 -f -e execve,execveat gtags
Я бы хотел увидеть результат.
ОК Как отдельная программа, uctags работает хорошо.
Да, он прекрасно работает автономно!
Вы используете GNU / Linux. Хороший! Я могу помочь вам гораздо больше.
Извините, я не упомянул об этом раньше.
$ 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 +++
Вывод strace сообщает, что gtags не вызывали uctags.
Большое тебе спасибо. Прошу прощения за беспокойство.
Тогда напишите разработчику GLOBAL!
еще раз спасибо! Универсальные КТэги великолепны. :)
Эй, я немного попробовал. Не уверен, писать ли мне тебе или Шигио.
GNU Global использует настройки langmap
в файле GTAGSCONF для фильтрации файлов, обрабатываемых gtags
а также передает эти настройки в Universal Ctags.
В какой-то момент я добавил расширение файла для Julia (.jl) в глобальную конфигурацию, однако универсальные Ctags остановились с предупреждением:
Неизвестный язык "[список langmaps]"
Проблема возникает из-за того, что Universal Ctags сначала анализирует свои аргументы, а затем загружает параметры в .ctags.d
. Я модифицировал Global, чтобы явно передать --options=[...].ctags
_before_, он передает параметр --langmap
.
После этого все снова заработало отлично, и я получил глобальные таблицы.
Как я уже сказал, я не уверен, что вы хотите это изменить (чтобы файлы .ctags.d
обрабатывались до аргументов в Universal Ctags) или мне следует отправить отчет в Global.
Проблема возникает из-за того, что Universal Ctags сначала анализирует свои аргументы, а затем загружает параметры в .ctags.d.
Я так не реализовал.
За некоторыми исключениями Universal-ctags загружает .ctags.d / *. Ctags, а затем анализирует параметры cmdline.
Как я писал на странице руководства ctags-optlib.7, вы можете использовать параметр --_ echo = MSG, чтобы понять и отладить, как u-ctags загружает файлы конфигурации.
[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
См. Справочную страницу ctags.1. Я не понимаю, почему вы хотите передать --options в ctags.
Для вашей цели может быть достаточно помещения julia.ctags в ~ / .ctags.d. u-ctags автоматически загружает julia.ctags. Таким образом, вам не нужно явно указывать --options.
Хорошо, я только что снова протестировал и тоже больше не получаю ошибки. Еще раз извините за беспокойство.