لماذا تقوم ETAGs بإنشاء ملف علامات تالفة؟
سؤال
لديّ ملف مصدر الحد الأدنى التالي:
$ cat path/xx/yy/fooBar.c
void this_is_a_test(void)
{
}
إذا قمت بتشغيل etags مثل هذا ، فهو يعمل بشكل جيد:
$ etags path/xx/yy/fooBar.c
$ cat TAGS
path/xx/yy/fooBar.c,25
void this_is_a_test(1,0
ولكن إذا قمت بتشغيل etags عبر Find/xargs ، يتم تالف ملف العلامات:
$ find . -name fooBar.c
./path/xx/yy/fooBar.c
$ find . -name fooBar.c | xargs etags
$ cat TAGS
path/xx/yy/fBoBar.c,25
void this_is_a_test(^?1,0
لاحظ أن اسم الملف يظهر أعلاه باسم fbobar.c - زائفة!
أحب أن أكون قادرًا على إنشاء علامات عن طريق القيام بشيء مثل find . -name '*.[ch]' | xargs etags
. لكنه يفسد معظم أسماء الملفات عندما أفعل ذلك.
أي فكرة عن سبب فشلها مثل هذا ، و/أو ما يمكنني فعله لجعله يعمل؟
أوبونتو لوسيد. ETAGS من EMACS23-BIN-Common 23.1+1-4ubuntu7.
يحرر:
رداً على سؤال FSCHMITT:
$ etags $(find . -name fooBar.c)
$ cat TAGS
path/xx/yy/fBoBar.c,25
void this_is_a_test(1,0
معلومات جديدة:
لقد لاحظت للتو أن الفرق بين الاستخدامات في سؤالي الأصلي أعلاه هو الرائد .
على الطريق. وإذا اتصلت بـ etags مثل etags ./path/xx/yy/fooBar.c
, ، يفسد الملف. لذا فإن الحل البديل هو التأكد من أن Args لـ etags ليس لديهم علامات قيادة. (ربما يكون هذا خطأ في etags ، لأن الوثائق تصف نمط الاستخدام الخاص بي بالضبط.)
المحلول 2
لقد لاحظت للتو أن الفرق بين الاستخدامات في سؤالي الأصلي أعلاه هو الرائد. على الطريق. وإذا استدعت etags مثل etags ./path/xx/yy/foobar.c ، فإنه يفسد الملف. لذا فإن الحل البديل هو التأكد من أن Args لـ etags ليس لديهم علامات قيادة. (ربما يكون هذا خطأ في etags ، لأن الوثائق تصف نمط الاستخدام الخاص بي بالضبط.)
نصائح أخرى
أواجه هنا نفس المشكلة. ومع ذلك ، بالنظر إلى أنك لم تقدم إصدار ETAGS/EMACS الخاص بك باستخدام ، فأنا لست بنسبة 100 ٪ نتحدث عن نفس المشكلة.
الإصدار etags/emacs الخاص بي 23.1 وأعتقد أن هناك خطأ في etags التي تفسد أسماء الملفات عندما تكون مسبوقة بـ "./". على سبيل المثال ، التقطت ملفًا محددًا تم تالفه وإنشاء ملف العلامات الخاص به مع بادئة "./" وبدون "./". حدث الفساد فقط مع بادئة "./".
بلدي - الالتفاف على المشكلة - الحل هو قطع "./" بادئة قبل تغذية أسماء الملفات إلى "etags". إليكم كيف أفعل ذلك:
find . -name '*.[hc]' -print | cut -c3- | xargs etags -
هذا يعمل بالنسبة لي آمل أن يكون لك!
أنت بحاجة إلى -
بعد etags للحصول عليها للقراءة من stdin:
find . -name fooBar.c | xargs etags -
تعديل:
عفوًا ، كان يجب أن أقرأ السؤال برمته. لا أعرف لماذا يفسد أسماء الملفات. ولكن لا يزال يتعين عليك استخدام -
:)
هذا غريب. ماذا يحدث اذا كنت تفعل
etags `find . -name '*.c'` `find . -name '*.h'`
في حين أن؟
هذا ما افعله:
etags --members `find ./ | grep [ch]$`
HTH.