2010-10-06 24 views
5

aşağıdaki minimum kaynak dosyasını adres: bozukNeden etags bozuk bir TAGS dosyası oluşturuyor?

$ etags path/xx/yy/fooBar.c 
$ cat TAGS 


path/xx/yy/fooBar.c,25 
void this_is_a_test(1,0 

Ama find yoluyla ETAGların çalıştırırsanız/Etiketler dosyasını xargs: Böyle ETAGların çalıştırırsanız

$ cat path/xx/yy/fooBar.c 
void this_is_a_test(void) 
{ 
} 

ok çalışır

$ 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 

Dosya adı fBoBar.c - bogus!

find . -name '*.[ch]' | xargs etags gibi bir şey yaparak TAGS oluşturabilmek istiyorum. Ama bunu yaptığımda dosya isimlerinin çoğunu yozlaştırıyor.

Bunun neden böyle başarısız olduğunu ve/veya çalışmasını sağlamak için ne yapabilirim?

Ubuntu Lucid. Etags, emacs23-bin ortak 23.1 + 1-4ubuntu7'dir.

Düzenleme:

fschmitt sorusuna cevaben:

$ etags $(find . -name fooBar.c) 
$ cat TAGS 


path/xx/yy/fBoBar.c,25 
void this_is_a_test(1,0 

Yeni bilgi:

Ben sadece orijinal Söz konusu iki kullanımlar arasındaki fark üzerinde olduğunu fark Yoldaki önde gelen .. Ve e-postaları etags ./path/xx/yy/fooBar.c gibi çağırırsam, dosyayı bozar. Bu nedenle, geçici çözümlerin etags'ın önde gelen etiketlerine sahip olmadığından emin olun. (Dokümantasyon neredeyse tam olarak benim kullanım deseni açıklar çünkü Belki de bu ETAG'ları bir hata söz konusudur.)

cevap

1

Yukarıdaki orijinal soruda iki kullanım arasındaki farkın önde olduğunu fark ettim. yolda. Ve etags ./path/xx/yy/fooBar.c gibi etags'ları çağırırsam, dosyayı bozar. Bu nedenle, geçici çözümlerin etags'ın önde gelen etiketlerine sahip olmadığından emin olun. (Dokümantasyon neredeyse tam olarak benim kullanım deseni açıklar çünkü Belki de bu ETAG'ları bir hata söz konusudur.)

+1

, sen --recurse seçeneğiyle (.c ve .h sadece) tüm dosyaları alabilirsiniz: 'ETAGların --recurse .', en azından http: //ctags.sourceforge. net/ctags-5.8. –

+0

@fearless_fool: Teşekkürler! Bu seçenek, emacs ile gelen etags'ta mevcut değildir, ancak bunu bilmek, coşkulu mesajlara geçmek istememi sağlar. – bstpierre

+0

Herhangi bir dezavantaja sahip olup olmadığını bilmiyorum, ama 'pwd -name $' ı bul. * .c '-o -name' * .h '| xargs etags'? Bu şekilde mutlak yollar etags'a teslim edilir. –

0

Sen stdin'den okumak için bunu elde etmek ETAG'ları sonra - gerekir:

find . -name fooBar.c | xargs etags - 

DÜZENLEME:

Hata! Tüm sorumu gerçekten okumuş olmalıydım. Dosya isimlerini neden bozduğunu bilmiyorum. Ama yine de - :)

+0

'xargs' Stdin'den okuyan ve argümanlar olarak ETAG'ları dosyaları sağlar. Eğer xargs kullanmıyorsam, '-' ye ihtiyacım vardı ve bunu denedim, ve hala dosyayı bozar. Eğer seçici değilseniz – bstpierre

0

'u kullanmalısınız. Bu gariptir. Bunun yerine,

'u uygularsanız ne olur?

0

Bu benim yaptığım:

etags --members `find ./ | grep [ch]$` 

hth.

5

Burada aynı sorunla karşılaşıyorum.Ancak etags/emacs versiyonunu kullanmadığınıza göre% 100'lük bir oran kullanmıyoruz aynı sorun hakkında konuşuyoruz.

My ETAGların/emacs versiyonu 23.1 ve onlar bir "./" ifadesi eklenir zaman dosya adları bozulmasını ETAG'ları bir hata olduğunu düşünüyorum. Örneğin, adının bozuk olduğu ve "./" önekiyle birlikte ve olmadan TAGS dosyasını oluşturduğu belirli bir dosya aldım. Bozulma sadece "./" önekiyle gerçekleşmiştir.

Benim - sorunu aşmanın - Çözüm için 'ETAGların' dosya adlarını beslemeden önce "./" öneki kesmektir. İşte ben bunu nasıl yaparım:

find . -name '*.[hc]' -print | cut -c3- | xargs etags - 

Bu, sizin için umarım yapar!

+0

Sürümü şu sorudan geliyor: 'Etags, emacs23-bin-common 23.1 + 1-4ubuntu7'ndedir. – bstpierre

+1

Bu https://bugs.launchpad.net/ubuntu/+source/emacs23/+bug/582347 açıklanan hata olarak aynı olduğunu düşünüyorum. Düzeltme - şu an itibariyle - Ubuntu'ya taşınmamıştır. – mshamma

+0

Her neyse, geçici çözüm sizin için mi çalışıyordu? – mshamma

İlgili konular