Jak wyszukiwać bez rozróżniania wielkości liter w Vimie


1650

Chciałbym wyszukać duże litery, na przykład PRAWO AUTORSKIE w pliku. Próbowałem przeprowadzić wyszukiwanie takie jak:

/copyright/i    # Doesn't work

ale to nie działa. Wiem, że w Perlu, jeśli podam iflagę jako regex, zmieni ona regex w regex bez rozróżniania wielkości liter. Wygląda na to, że Vim ma swój własny sposób na wskazanie wyrażenia regularnego bez rozróżniania wielkości liter.

Odpowiedzi:


2106

Możesz użyć \csekwencji ucieczki w dowolnym miejscu wzorca. Na przykład:

/\ccopyrightlub /copyright\cnawet/copyri\cght

Aby to zrobić odwrotność (Sprawa wrażliwe dopasowanie), użyj \C(kapitał C) zamiast.


516
Ponadto \cmogą pojawić się w dowolnym miejscu na wzór, więc jeśli wpiszesz wzorzec, a następnie zdecydować chciałeś wyszukiwanie bez uwzględniania wielkości liter, wystarczy dodać \cna końcu.
Alok Singhal

268
Lubię dodawać set ignorecasedo wyszukiwania vimrc bez rozróżniania wielkości liter i mogę użyć wyszukiwania z rozróżnianiem wielkości liter, \Cpodobnego do tego, o którym wspomniał @AlokSinghal.
Nick McCurdy,

163
Są też takie, set smartcasektóre automatycznie przełączą się na wyszukiwanie z rozróżnianiem wielkości liter, jeśli użyjesz wielkich liter.
Zaz

82
Po prostu chcę dodać do komentarza Zaz. set smartcasedotyczy tylko wtedy, gdy set ignorecasejest już aktywny. Przez chwilę mnie to zaskoczyło. Zobacz Porady Vima .
Tan Wang

12
@coderMe, To wielkie litery, w \cprzeciwieństwie do\C
Aaron McDaid

680

Oprócz sugestii \ci ignorecaseuważam to za smartcasebardzo przydatne. Jeśli szukasz czegoś zawierającego wielkie litery, wyszukiwarka rozróżni wielkie i małe litery; jeśli szukasz czegoś czysto małych liter, wyszukiwarka nie rozróżnia wielkości liter. Możesz użyć \ci \Czastąpić to:

:set ignorecase
:set smartcase
/copyright      " Case insensitive
/Copyright      " Case sensitive
/copyright\C    " Case sensitive
/Copyright\c    " Case insensitive

Widzieć:

:help /\c
:help /\C
:help 'smartcase'

83
Problem ignorecasepolega na tym, że wpływa to na podstawienia oraz wyszukiwania. Uważam, że sensowne jest (inteligentne) wyszukiwanie bez rozróżniania wielkości liter, ale domyślnie podstawienia z rozróżnianiem wielkości liter. Ale nie wiem, jak to zrobić.
huyz

150
Warto zauważyć, że smartcasedo pracy potrzebujesz również set ignorecase. Świetna wskazówka, dzięki!
Skilldrick

12
Wierzę, że można po prostu użyć \ C w swojej wypowiedzi dla wyszukiwania zmiana, tak: :%s/lowercasesearch\C/replaceString/g. Nie tworzy to domyślnej funkcjonalności, której potrzebujesz, ale pozwala wymusić rozróżnianie wielkości liter przy zamianie, a jednocześnie czerpać korzyści ze smartcase podczas wyszukiwania.
Anthony DiSanti

23
Możesz także ustawić Iflagę na podstawienie, aby wymusić rozróżnianie wielkości liter we wzorcu. Jak :%s/lowercasesearch/replaceString/gI.
Rory O'Kane

1
Uwaga ze strony pomocy (przydatna, jeśli jesteś uzależniony jak * *):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella

291

Możesz ustawić tę icopcję w Vimie przed wyszukiwaniem:

:set ic

Aby wrócić do wyszukiwania z rozróżnianiem wielkości liter, użyj:

:set noic

ic jest skrótem od ignorecase


także twoją jedyną opcją, jeśli masz pecha, by nadal używać Vi zamiast Vima. \cnie działa w vi.
bluppfisk,

61

Możesz wydać polecenie

:set ignorecase

a potem w wyszukiwaniu nie będzie rozróżniana wielkość liter.


50

Aby przełączyć między rozróżnianiem wielkości liter a wyszukiwaniem niewrażliwym, używam tego mapowania w moim .vimrc

nmap <F9> :set ignorecase! ignorecase?


15
Tak, ale ignorecase?pokazuje aktualny stan flagi. (w wierszu poleceń)
Boris Brodski

1
Dziękuję Ci! Dla mnie jest to najbardziej przydatna odpowiedź na stronie: sposób szybkiego przełączania się między tymi dwoma trybami w zależności od tego, czego szukasz w danym momencie.
Ben Hillier

30

W vimrctych poleceniach możesz użyć :

  • set ignorecase - Wszystkie wyszukiwania będą rozróżniać małe i wielkie litery
  • set smartcase - W wyszukiwaniu rozróżniana jest wielkość liter, jeśli zawiera wielką literę

Musisz ustawić, ignorecasejeśli chcesz korzystać z tego, co smartcasezapewnia.

Niedawno napisałem artykuł o poleceniach wyszukiwania Vima (zarówno wbudowanych poleceń, jak i najlepszych wtyczek do wydajnego wyszukiwania).


1
Wygląda na to, że set smartcasenie przeprowadzam wyszukiwania bez rozróżniania wielkości liter, jeśli nie używam wielkich liter ... czy to normalne?
caneta

1
Ok, po prostu przeczytaj poniżej, że musisz ustawić ignorowanie i smartcase, aby działało. Przepraszam za to!
caneta

24

Jak sugerowali inni:

:set ic

Ale fajne jest to, że możesz przełączać takie tryby za pomocą:

:set ic!

18

umieść to polecenie w pliku vimrc

set ic 

zawsze wykonuj wyszukiwanie bez rozróżniania wielkości liter


4
Nie wiem dlaczego, ale mój vim jest ustawiony domyślnie na wielkość liter, aby temu zaradzić. użyć set noic.
user1510539,

18

Stare dobre vim[grep]polecenie…

:vimgrep /example\c/ &
  • \c dla bez rozróżniania wielkości liter
  • \C dla rozróżniania wielkości liter
  • % jest wyszukiwanie w bieżącym buforze

wprowadź opis zdjęcia tutaj


Cannot open file "&"
Witalij Zdanevich,

Myślę, że %zamiast tego mieli na myśli %.
Oarfish


10

Jak wspomniałem @huyz, czasem pożądanym zachowaniem jest wyszukiwanie bez rozróżniania wielkości liter, ale zamiana z uwzględnieniem wielkości liter. Moje rozwiązanie tego:

nnoremap / /\c
nnoremap ? ?\c

Dzięki temu zawsze, gdy klikniesz /lub ?dodasz \cwyszukiwanie bez rozróżniania wielkości liter.


1
Nie jest to zła sugestia, ale czy uniemożliwia ci skorzystanie z tej smartcaseopcji?
Trebor Rude

Wygląda na to, że zastąpiłoby to csmartcase
Matthew Woo

4

Vim ma 2 tryby

1. tryb edycji

  1. tryb normalny (Esc)

Wyszukiwanie będzie działać w trybie normalnym

/ \ c dla rozróżniania wielkości liter

Wyszukiwanie / \ c


Co z trybem wizualnym?
user202729

3

Możesz ustawić ignorecasedomyślnie, uruchom to w powłoce

echo "set ic" >> ~/.vimrc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.