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.