Ctags: gtags لا تحترم ملف .ctags

تم إنشاؤها على ٨ ديسمبر ٢٠١٧  ·  25تعليقات  ·  مصدر: universal-ctags/ctags

لقد قمت ببناء الكرات الأرضية باستخدام علامات عالمية. يمكنني التحقق من أنه عند تنفيذ ctags - الإصدار أحصل على إصدار Universal-ctags وليس أي إصدار آخر.

لقد قمت بإنشاء ملف .ctags يحتوي على:

-exclude=foo

عند تنفيذ علامات gtags لا أرى أنها تحترم ملف .ctags. بدلاً من ذلك ، ما عليك سوى المضي قدمًا واستخراج العلامات لكل شيء في دليل العمل.

ما الخطأ الذي افعله؟

ال 25 كومينتر

لا يقرأ Universal-ctags .ctags. انظر قسم FILES في صفحة الدليل 1 ctags.

تقصدون بذلك؟

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

أرى علامات .tag كأحد الاحتمالات!

من المفترض أنه كان يقصد صفحة الرجل الحالية .

شكرا codebrainz على الرد. لذلك قمت بإنشاء هذا الملف:
/pathtorepo/ctags.d/.ctags

الذي يتضمن -R - يستثني ما أحتاجه.

عند تنفيذ هذا الأمر من دليل repos:

ctags - مطول

يخبرني أنه يتوقع مدخلات.

عندما أفعل

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

يفعل الشيء الصحيح ويستخرج العلامات من جميع الريبو باستثناء المستبعدين في ملف .ctags.

ما الخطأ الذي افعله؟

أحتاج إلى ctags لاحترام ctags.d / .ctags (أو أي ملف يتطلبه) عند تنفيذ "ctags" فقط.

السبب هو أنني أستخدم ggtags داخل emacs و ggtags تتطلب عمل ggtags جنبًا إلى جنب مع ctags.

لذلك أرغب في الوصول إلى حالة يمكنني فيها فقط عمل "علامات gtags" في موجه الأوامر ويتم ذلك تلقائيًا:

  1. استخدم علامات عامة
  2. يحترم ملف Universal-ctags (ctags.d / .ctags)

كيف أقوم بذلك؟

ماذا عن /pathtorepo/.ctags.d/exclude.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 بتحميل علامة الاستبعاد الخاصة بك.

ماساتاكي ، شكرًا على الرد. يبدو أنه يتم التقاط ملف الاستثناءات ولكن لدي سؤالان:

  1. هذا يوزع الملفات غير المستبعدة:
    ctags - overbose --options = .ctags
    لكن هذا لا:
    ctags - مطول
    على الرغم من أنها تقول إنها التقطت ملف الاستبعاد ، لكنني أتلقى هذه الرسالة:

ctags: لم يتم تحديد ملفات. جرب "ctags --help".

لكن لماذا؟ ألا يجب أن يتصرف مثل:
ctags - overbose --options = .ctags
وفقط تحليل كل شيء في الدليل الحالي باستثناء يستبعد؟

  1. كيفية الحصول على علامات gtags تستخدم علامات Universal-ctags وتلتقط ملف الاستبعاد الخاص به؟
    عندما أقوم بتنفيذ علامات gtags ، فإنها تحلل كل شيء وتتجاهل ملف الاستبعاد.

حول 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

لا يتم تحميل ملف بدون اللاحقة ما لم يتم تحديد الملف مع الخيارات - بشكل صريح.

$ 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's /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.

من فضلك ، لا تستخدم الخيارات. يجب أن تقوم علامات uctags بتحميل ~ / .ctags.d / julia.ctags و ./.ctags.d/julia.ctags بدون تحديد --options.

إذن ما أريدك أن تديره هو:

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

أود أن أرى إخراج الأمر.

راجع للشغل ، هل تستخدم ctags في جنو / لينكس؟

آسف ، لم أكن واضحا. يستخدم 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 جيدًا.

أنت تستخدم جنو / لينكس. حسن! استطيع مساعدتك اكثر

من فضلك ، قم بتثبيت حزمة الدعامة. لا أعرف Ubuntu جيدًا ولكن ، قد يكون apt-get هو الأمر لتثبيت strace.

ثم اركض

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

أود أن أرى الإخراج.

حسنًا كبرنامج قائم بذاته ، يعمل uctags جيدًا.

نعم ، إنه يعمل بشكل مستقل بذاته!

أنت تستخدم جنو / لينكس. حسن! استطيع مساعدتك اكثر

آسف لم أذكر ذلك في وقت سابق.

$ 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!
شكرا لك مرة أخرى! Universal Ctags رائعة. :)

مهلا ، لقد حاولت قليلا. لست متأكدًا مما إذا كان يجب أن أكتب لك أو Shigio.

يستخدم GNU Global إعدادات langmap في ملف GTAGSCONF لفلترة الملفات gtags وعمليات تمرير هذه الإعدادات أيضًا إلى Universal Ctags.

لقد أضفت في وقت ما امتداد الملف لـ Julia (.jl) إلى التكوين العالمي ، ومع ذلك ، توقف Universal Ctags مع التحذير:
لغة غير معروفة "[list of langmaps]"

نشأت المشكلة لأن Universal Ctags يوزع أولاً وسيطاته ثم يقوم بتحميل الخيارات الموجودة في .ctags.d . لقد قمت بتعديل Global لتمرير --options=[...].ctags _ قبل أن يمر الخيار --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 man page. لا أفهم سبب رغبتك في تمرير - خيارات لعلامات ctags.
قد يكون وضع julia.ctags على ~ / .ctags.d كافيًا لغرضك. تقوم u-ctags بتحميل julia.ctags تلقائيًا. لذلك لا يتعين عليك تحديد - الخيارات بشكل صريح.

حسنًا ، لقد اختبرت للتو مرة أخرى ولم أعد أتلقى أي خطأ بعد الآن. آسف مرة أخرى لإزعاجك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات