سؤال

لديّ ملف مصدر الحد الأدنى التالي:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top