2014-12-05 7 views
7

ja ostatnio widziałem ten błąd, gdy uderzę makr autouzupełniania w VIM (np Ctrl-N):Jak znaleźć obrażając błąd formatu pliku w vim tagów

E431: Format error in tags file "tags"

Plik tagów jest generowana z Żywiołowy Ctags i około 1 MB. Jak znaleźć błąd powodujący wystąpienie tego błędu?

+3

W moim przypadku, tuż poniżej komunikatu o błędzie "E431", pojawił się kolejny komunikat, który określał, gdzie w pliku znaczników wystąpił błąd, np. 'Przed bajtem 63964633'. Rozwiązaniem problemu było więc otwarcie pliku znaczników za pomocą Vima i wpisanie ': go 63964633', aby przejść do bajtu, po którym wystąpił błąd. Tak się złożyło, że była to linia o długości 1404 bajtów. Usunięcie tej linii rozwiązało problem. –

Odpowiedz

4

Naprawdę długie nazwy funkcji mogą powodować ten błąd. Możesz znaleźć te funkcje, otwierając plik znaczników w vimie i szukając nazw metod dłuższych niż 50 znaków.

/^[^\t]{50,} 
+0

Dzięki. Nadal chciałbym wiedzieć, czy istnieje sposób, aby sobie z nimi poradzić.Poza tym domyślam się, że wartość 50 jest arbitralna. Wszystko dość dziwne. – mahemoff

3

Baza danych znaczników jest zorientowana na linie; po nagłówku (wiersz (y) rozpoczynający się od !_TAG_FILE_...), każda linia odpowiada znacznikowi.

Korzystając z wyszukiwania binarnego , powinieneś być w stanie szybko zlokalizować naruszające linie: Zapisz kopię pliku znaczników, usuń połowę, przetestuj. Jeśli nadal pojawia się błąd, powtórz (dopóki nie osiągniesz jednej linii). W przeciwnym razie weź drugą połowę i powtórz.

To jest ogólna technika rozwiązywania problemów; na przykład pomocne jest również zlokalizowanie problemów w wtyczkach Vima (przez wyłączenie ich połowy).

+0

Znalazłem to z tym. Dla innych czytających, znaczniki są odczytywane za każdym razem, więc wystarczy zrobić ctrl-p lub ctrl-n po zapisaniu pliku, zrobi to. Skończyło się na przejściu do góry pliku tagów, usunięciu połowy pliku i próbowaniu w Vimie. Zauważyłem, że błąd wynika z wygenerowanego pliku zasobów Rails podczas tworzenia i gdybym wizualnie sprawdził plik tagów, zauważyłbym go jako bardzo długi termin (255 znaków). – mahemoff

+0

Narzędzie tag-lint nadal byłoby miłe, ale wydaje się nie być żadnym. – mahemoff

9

Znalazłem kilka dodatkowych linii przed! _TAG_FILE_FORMAT linia w wygenerowanym pliku tagów. Kiedy usunę te dodatkowe linie, vim zacznie działać.

+2

To rzeczywiście działa dość dziwnie, teraz pytanie brzmi, jak te linie kończą się tam. Nie byłoby wielkiego przepływu pracy, gdybyśmy musieli je usuwać za każdym razem, gdy tworzymy nowy plik znaczników. Czy miałeś szczęście w znalezieniu przyczyny? – Thomas

-1

Usunięcie dodatkowych linii niezgodnych ze standardem ctags rozwiązało problem.

+2

Czy ta logika nie jest okrągła, tzn. Prowadzi do tego samego pytania, skąd wiadomo, które linie nie potwierdzają? – mahemoff

0

Rozwiązałem ten problem przez przebudowanie tagów.

Najpierw usuń wszystkie pliki znaczników, a następnie odbuduj znaczniki z projektu.

Myślę, że powodem było to, że dwa razy stworzyłem pliki znaczników, po raz pierwszy zbudowałem znaczniki dla katalogów potomnych, a następnie zbudowałem katalogi nadrzędne.

Znaczniki katalogów potomnych nie mogą zawierać informacji o katalogach nadrzędnych.

1

Myślę, że ctags ma problem z analizowaniem plików skryptów Java. Wyłączenie go z tagowania rozwiązało ten problem dla mnie.

ctags -R --exclude=*.js . 
Powiązane problemy