2011-08-29 13 views
6

Przeważnie wyszukiwanie znaczników rozróżniających duże i małe litery jest odpowiednie. Większość używanych przez nas języków uwzględnia wielkość liter, dlatego jest to pożądane.Wyszukiwanie znaczników niewrażliwych na wielkość liter w Vim

Mam jednak DSL w moim miejscu pracy, które używa identyfikatorów niewrażliwych na wielkość liter. Generuję tagi dla tego DSL, a nawet mogę posortować je za pomocą foldcase (i ustawić odpowiednią flagę w pliku znacznika), ale Vim nadal wydaje się dopasowywać wielkość liter do identyfikatorów.

To, co chciałbym, to jeśli Vim mógłby zrozumieć tagfile 'folded case', ponieważ "ten język jest niewrażliwy na wielkość liter". Czy jest takie ustawienie?

Przypuszczam, że mógłbym włączyć ignorecase dla tego rodzaju pliku (w każdym razie wyłączam plik znaczników i zmieniam kilka innych ustawień), ale wtedy Vim szczeka na mnie, gdy sprawa nie pasuje. Po prostu uwielbiam sposób, by powiedzieć Vimowi: "hej, to nie jest rozróżniana wielkość liter, więc jest ok, nie musisz na mnie krzyczeć". Ogólnie wydaje mi się, że Vim mógłby po prostu zinterpretować intencję ze sposobu sortowania pliku z tagami, ale być może nie jest to powszechnie pożądane pragnienie ...

Odpowiedz

1

Ostatecznie po prostu zrobiłem rozwiązanie ignorecase. Mam je w moim vimrc:

autocmd BufEnter *     setlocal noignorecase 
autocmd BufEnter *.{dsl-a,dsl-b*} setlocal ignorecase 

Irytujące, ale problematyczne; Miałem nadzieję, że Vim zauważy nagłówek w pliku z tagami:

!_TAG_FILE_SORTED 2 /0=unsorted, 1=sorted, 2=foldcase/ 

Niestety wydaje się, że tak nie jest.


Wpadłem na numer drugiego dnia, który zawiera dalszą dokumentację dla mas; niektóre z wyszukiwanych przeze mnie tagów nie zostały znalezione, ale kiedy przejrzałem plik tagów, były tam.Potem zauważyłem, że nad elementem, który był pomijany, były linie, które miały te same znaki wiodące, ale potem podkreślenie; Zauważyłem, że podkreślenie sortowało przed literami i zastanawiałem się, czy to nie był problem (podkreślenie to jedna z sześciu znaków, które pojawiają się pomiędzy captial Z i małą literą A, ale jedyną, która jest ważna w identyfikatorze kompatybilnym z C).

Dla chichotów ręcznie uciekłem się do sekcji przestępczej, aby po literach pojawiły się podkreślenia. Przeanalizowałem nawet minimalny przypadek testowy i napisałem duży raport o błędzie dla błędów @ vim, a następnie postanowiłem zajrzeć do dokumentacji na znacznikach, aby "zacytować odpowiednie odniesienie". Tam został pochowany pod koniec :help tagbsearch, tj. Mało przydatny dla tych z nas, którzy są chronicznie chronieni.

Należy zauważyć, że sprawa musi być złożona na duże litery, aby to zadziałało.

Zmiana jedna linia do mojego skryptu Pythona stały mój plik Tag:

if casefold: 
    tags.sort(key=str.upper) # tag file requires case folding to be folded to upper case 
else: 
    tags.sort() 
1

To nie jest odpowiednia odpowiedź, ale mam nadzieję, że stanie się jednym!

Czy podasz więcej szczegółów? Jak, mały przykład pracy?

Oto moja próba jednego, ale nie jestem pewien, czy ilustruje to, o czym mówisz. Będę też przechowywać go w gist na wypadek, gdybyś chciał współpracować, a może wtedy razem znajdziemy odpowiedź.

tags:

blah a.txt 1 

a.txt:

bLah 

Gist of same.

Kroki do odtworzenia:

  1. prowadzony vim
  2. zrobić :set ignorecase
  3. zrobić :tag blah
  4. wiadomość otrzymujemy: "! Tag 1 z 1 lub więcej tag Korzystanie z innym przypadku"

Wygląda również na someone asked this question recently on the Vim user mailing list, ale nie widzę żadnych odpowiedzi.

+0

Tak, to jest tak blisko, jak tylko znalazłem rozwiązanie, chociaż mój plik 'tags' ma taki sam przypadek, jak plik źródłowy, który został oznaczony. To znaczy. 'tags' ma dużą literę L, ale nadal robię': tag blah' i otrzymuję komunikat "using tag with different case". To jest denerwujące. :) –

2

Jestem stosunkowo nowy w vim, ale dodaje to do mojego .vimrc i wydaje się działać dobrze dla mnie do tej pory .

+1

Możesz także po prostu ': ​​ustawić ignorowanie' w swoim '.vimrc', aby osiągnąć to samo. –