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.