Domanda

Ho il seguente file di origine minima:

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

Se corro etags come questo funziona bene:

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


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

Ma se corro etags tramite find / xargs il file è danneggiato TAGS:

$ 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

Si noti gli spettacoli nome del file in alto come fBoBar.c -! Fasullo

Mi piace essere in grado di generare i tag facendo qualcosa di simile find . -name '*.[ch]' | xargs etags. Ma sta corrompendo la maggior parte dei nomi dei file quando faccio questo.

Qualsiasi idea del perché si sta venendo a mancare in questo modo, e / o che cosa posso fare per farlo funzionare?

Ubuntu Lucid. Etags è da emacs23-bin-comune 23.1 + 1-4ubuntu7.

Modifica :

In risposta alla domanda di fschmitt:

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


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

Nuova informazioni :

Ho appena notato che la differenza tra i due usi nella mia domanda iniziale di cui sopra è la . leader sul percorso. E se chiamo etags come etags ./path/xx/yy/fooBar.c, corrompe il file. Quindi, una soluzione è quello di assicurarsi che i args a etags non hanno i tag principali. (Forse questo è un bug in etags, perché la documentazione descrive il mio modello di utilizzo quasi esattamente.)

È stato utile?

Soluzione 2

Ho appena notato che la differenza tra i due usi nella mia domanda iniziale di cui sopra è il leader. sul percorso. E se chiamo etags come etags ./path/xx/yy/fooBar.c, corrompe il file. Quindi, una soluzione è quello di assicurarsi che i args a etags non hanno i tag principali. (Forse questo è un bug in etags, perché la documentazione descrive il mio modello di utilizzo quasi esattamente.)

Altri suggerimenti

Sono di fronte qui lo stesso problema. Tuttavia dato che non hai fornito ETAG / emacs versione vostro usando io non sono al 100% per cento che stiamo parlando dello stesso problema.

I miei ETAGs / emacs versione 23.1 e penso che ci sia un bug in etags che sta corrompendo i nomi dei file quando sono preceduti da un "./". Per esempio ho preso un unico file specifico che il suo nome era stato danneggiato e ha generato il file TAGS per questo con e senza il "./" prefisso. La corruzione si è verificato solo con il "./" prefisso.

Il mio - di aggirare il problema - soluzione è quella di tagliare il "./" prefisso prima di alimentare i nomi dei file per 'etags'. Ecco come lo faccio:

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

Questo funziona per me la speranza che fa per voi!

Hai bisogno di un - dopo etags per farlo leggere da stdin:

find . -name fooBar.c | xargs etags -

Modifica

Ops, ho davvero dovuto leggere tutta la questione. Non so il motivo per cui sta corrompendo i nomi dei file. Ma si dovrebbe comunque usare -:)

Questo è strano. Che cosa succede se si fa

etags `find . -name '*.c'` `find . -name '*.h'`

, invece?

Questo è quello che faccio:

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

HTH.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top