Come eseguire la ricerca senza distinzione tra maiuscole e minuscole in Vim


1650

Vorrei cercare una parola maiuscola, ad esempio COPYRIGHT in un file. Ho provato a eseguire una ricerca come:

/copyright/i    # Doesn't work

ma non funziona. So che in Perl, se do la ibandiera in una regex, la regex si trasforma in una regex senza distinzione tra maiuscole e minuscole. Sembra che Vim abbia il suo modo di indicare una regex insensibile al maiuscolo / minuscolo.

Risposte:


2107

È possibile utilizzare la \csequenza di escape in qualsiasi punto del pattern. Per esempio:

/\ccopyrighto /copyright\co anche/copyri\cght

Per eseguire l'inverso ( corrispondenza tra maiuscole e minuscole ), utilizzare invece \C(maiuscola C).


516
Inoltre, \cpuò apparire in qualsiasi punto del modello, quindi se si digita un modello e poi si decide che si desidera una ricerca senza distinzione tra maiuscole e minuscole, è sufficiente aggiungere un \calla fine.
Alok Singhal,

269
Mi piace aggiungere set ignorecaseper la ricerca senza distinzione tra maiuscole e minuscole nel mio vimrc e posso usare \Cper fare una ricerca con distinzione tra maiuscole e minuscole simile a quella menzionata da @AlokSinghal.
Nick McCurdy,

164
C'è anche set smartcaseche passerà automaticamente a una ricerca con distinzione tra maiuscole e minuscole se usi lettere maiuscole.
Zaz,

83
Voglio solo aggiungere al commento di Zaz. set smartcasesi applica solo quando set ignorecaseè già attivo. Sono rimasto sconcertato per un po '. Vedi Suggerimenti Vim .
Tan Wang,

12
@coderMe, È la capitalizzazione, \ccontro\C
Aaron McDaid,

680

Oltre ai suggerimenti per \ce ignorecase, trovo smartcasemolto utile. Se cerchi qualcosa che contiene caratteri maiuscoli, eseguirà una ricerca con distinzione tra maiuscole e minuscole; se cerchi qualcosa di puramente minuscolo, eseguirà una ricerca senza distinzione tra maiuscole e minuscole. Puoi usare \ce \Csovrascrivere questo:

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

Vedere:

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

83
Il problema ignorecaseè che riguarda sia le sostituzioni che le ricerche. Trovo che abbia senso effettuare ricerche (intelligenti) senza distinzione tra maiuscole e minuscole ma sostituzioni con distinzione tra maiuscole e minuscole per impostazione predefinita. Ma non c'è modo di farlo che io sappia.
huyz,

150
Vale la pena notare che per smartcasefunzionare, è necessario anche set ignorecase. Ottimo consiglio, grazie!
Skilldrick,

12
Credo che si potrebbe utilizzare un \ C nella vostra espressione di ricerca per le sostituzioni, in questo modo: :%s/lowercasesearch\C/replaceString/g. Questo non crea la funzionalità predefinita che desideri, ma ti consente di forzare la distinzione tra maiuscole e minuscole per le sostituzioni, pur beneficiando della smartcase durante la ricerca.
Anthony DiSanti,

23
È inoltre possibile impostare il Iflag su una sostituzione per forzare la sequenza in maiuscolo / minuscolo. Come :%s/lowercasesearch/replaceString/gI.
Rory O'Kane,

1
Nota dalla pagina di aiuto (utile se sei "*" dipendente come me):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella

291

Puoi impostare l' icopzione in Vim prima della ricerca:

:set ic

Per tornare alle ricerche con distinzione tra maiuscole e minuscole, utilizzare:

:set noic

ic è una scorciatoia per ignorecase


anche la tua unica opzione se sei abbastanza sfortunato da usare ancora Vi invece di Vim. \cnon funziona in vi.
bluppfisk,

61

È possibile emettere il comando

:set ignorecase

e successivamente le tue ricerche non faranno distinzione tra maiuscole e minuscole.


50

Per alternare tra ricerca maiuscole e minuscole e ricerca insensibile, utilizzo questa mappatura nel mio .vimrc

nmap <F9> :set ignorecase! ignorecase?


15
Sì, ma ignorecase?mostra lo stato corrente della bandiera. (nella riga di comando)
Boris Brodski il

1
Grazie! Per me, questa è la risposta più utile sulla pagina: un modo per alternare rapidamente tra le due modalità a seconda di ciò che stai cercando in quel preciso momento.
Ben Hillier,

31

Puoi usare vimrcquesti comandi:

  • set ignorecase - Tutte le tue ricerche non fanno distinzione tra maiuscole e minuscole
  • set smartcase - La tua ricerca farà distinzione tra maiuscole e minuscole se contiene una lettera maiuscola

È necessario impostare ignorecasese si desidera utilizzare ciò che smartcasefornisce.

Di recente ho scritto un articolo sui comandi di ricerca di Vim (sia il comando integrato che i migliori plugin per effettuare ricerche in modo efficiente).


1
Sembra che set smartcasenon esegua ricerche senza distinzione tra maiuscole e minuscole se non uso lettere maiuscole ... è normale?
Caneta,

1
Ok, leggi qui sotto che devi sia impostare ignorecase che smartcase per farlo funzionare. Mi dispiace per quello!
Caneta,

24

Come altri hanno suggerito:

:set ic

Ma il bello è che puoi attivare o disattivare queste modalità con:

:set ic!

18

inserisci questo comando nel tuo file vimrc

set ic 

fai sempre una ricerca senza distinzione tra maiuscole e minuscole


4
Non so perché, ma il mio vim è impostato su maiuscole e minuscole per impostazione predefinita, per contrastare questo. usare set noic.
user1510539

18

Il buon vecchio vim[grep]comando ..

:vimgrep /example\c/ &
  • \c per maiuscole e minuscole
  • \C per maiuscole e minuscole
  • % è cercare nel buffer corrente

inserisci qui la descrizione dell'immagine


Cannot open file "&"
Vitaly Zdanevich,

Immagino che intendessero %invece di %.
Remo

15

Preferisco usare \calla fine della stringa di ricerca:

/copyright\c

10

Come menziona @huyz, a volte il comportamento desiderato sta usando ricerche senza distinzione tra maiuscole e minuscole ma sostituzioni con distinzione tra maiuscole e minuscole. La mia soluzione per questo:

nnoremap / /\c
nnoremap ? ?\c

Con quello sempre quando si preme /o ?si aggiungerà \cper la ricerca senza distinzione tra maiuscole e minuscole.


1
Non è un cattivo suggerimento, ma ti impedisce di utilizzare l' smartcaseopzione?
Trebor Rude,

Sembra che sarebbe finita la sostituzionesmartcase
Matthew Woo,

4

Vim ha 2 modalità

Modalità 1.edit

  1. modalità normale (Esc)

La ricerca funzionerà per la modalità normale

/ \ c per maiuscole e minuscole

/ \ c cerca


Che dire della modalità visiva?
user202729

3

È possibile impostare ignorecaseper impostazione predefinita, eseguirlo nella shell

echo "set ic" >> ~/.vimrc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.