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.

Haiyuan Zhang
źródło

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.

Chinmay Kanchi
źródło
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'
DrAl
źródło
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

Nathan Fellman
źródło
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.

Paolo Tedesco
źródło
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?

VBD
źródło
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).

Matthieu
źródło
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!
Tomasz
źródło
18

umieść to polecenie w pliku vimrc

set ic 

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

WALID BELRHALMIA
źródło
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

Mick
źródło
Cannot open file "&"
Witalij Zdanevich,
Myślę, że %zamiast tego mieli na myśli %.
Oarfish
15

Wolę używać \cna końcu ciągu wyszukiwania:

/copyright\c
Nick Tsai
źródło
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.

pbogut
źródło
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

Gowthaman D.
źródło
Co z trybem wizualnym?
user202729
3

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

echo "set ic" >> ~/.vimrc
Steely Wing
źródło