Como fazer pesquisa sem distinção entre maiúsculas e minúsculas no Vim


1650

Gostaria de procurar uma palavra em maiúscula, por exemplo, COPYRIGHT em um arquivo. Eu tentei realizar uma pesquisa como:

/copyright/i    # Doesn't work

mas não funciona. Eu sei que em Perl, se eu der o isinalizador em uma regex, ela transformará a regex em uma regex que não diferencia maiúsculas de minúsculas. Parece que o Vim tem sua própria maneira de indicar uma regex que não diferencia maiúsculas de minúsculas.

Respostas:


2107

Você pode usar a \csequência de escape em qualquer lugar do padrão. Por exemplo:

/\ccopyrightou /copyright\cou mesmo/copyri\cght

Para fazer o inverso ( correspondência sensível a maiúsculas e minúsculas ), use \C(C maiúsculo).


516
Além disso, \cpode aparecer em qualquer lugar do padrão; portanto, se você digitar um padrão e decidir que deseja uma pesquisa sem distinção entre maiúsculas e minúsculas, basta adicionar uma \cno final.
Alok Singhal

269
Eu gosto de adicionar pesquisas sem distinção set ignorecaseentre maiúsculas e minúsculas no vimrc e posso usar \Cpara fazer uma pesquisa com distinção entre maiúsculas e minúsculas semelhante ao que o @AlokSinghal mencionou.
Nick McCurdy

164
Há também o set smartcaseque mudará automaticamente para uma pesquisa que diferencia maiúsculas de minúsculas se você usar letras maiúsculas.
Zaz

83
Só quero adicionar ao comentário de Zaz. set smartcaseaplica-se apenas quando set ignorecasejá estiver ativo. Fiquei perplexo nisso por um tempo. Consulte Dicas do Vim .
Tan Wang

12
@coderMe, é a capitalização, \ccontra #\C
Aaron McDaid

680

Bem como as sugestões para \ce ignorecase, acho as smartcasemuito úteis. Se você procurar algo que contenha caracteres maiúsculos, ele fará uma pesquisa com distinção entre maiúsculas e minúsculas; se você procurar algo puramente em minúsculas, fará uma pesquisa sem distinção entre maiúsculas e minúsculas. Você pode usar \ce \Csubstituir isso:

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

Vejo:

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

83
O problema ignorecaseé que isso afeta as substituições e as pesquisas. Acho que faz sentido ter pesquisas (inteligentes) que não diferenciam maiúsculas de minúsculas, mas substituições que diferenciam maiúsculas de minúsculas por padrão. Mas não há como fazer isso que eu saiba.
huyz

150
Vale a pena notar que, para smartcasetrabalhar, você também precisa set ignorecase. Ótima dica, obrigado!
Skilldrick 28/03/12

12
Eu acredito que você poderia usar apenas a \ C em sua expressão de busca para substituições, como esta: :%s/lowercasesearch\C/replaceString/g. Isso não cria a funcionalidade padrão que você deseja, mas permite forçar a diferenciação entre maiúsculas e minúsculas para substituições, enquanto ainda se beneficia da smartcase ao pesquisar.
Anthony DiSanti 15/10/12

23
Você também pode definir o Isinalizador em uma substituição para forçar o padrão a fazer distinção entre maiúsculas e minúsculas. Like :%s/lowercasesearch/replaceString/gI.
Rory O'Kane

1
Nota da página de ajuda (útil se você é "*" viciado como eu):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella

291

Você pode definir a icopção no Vim antes da pesquisa:

:set ic

Para voltar às pesquisas que diferenciam maiúsculas de minúsculas, use:

:set noic

ic é uma abreviação de ignorecase


também é sua única opção se você tiver azar de usar o Vi em vez do Vim. \cnão funciona no vi.
bluppfisk 12/12/19

61

Você pode emitir o comando

:set ignorecase

e depois disso, suas pesquisas não diferenciam maiúsculas de minúsculas.


50

Para alternar entre pesquisa sensível a maiúsculas e minúsculas, eu uso esse mapeamento no meu .vimrc

nmap <F9> :set ignorecase! ignorecase?


15
Sim, mas ignorecase?mostra o estado atual da bandeira. (na linha de comando)
Boris Brodski 22/01

1
Obrigado! Para mim, esta é a resposta mais útil da página: uma maneira de alternar rapidamente entre os dois modos, dependendo do que você está procurando no momento exato.
Ben Hillier

31

Você pode usar em seus vimrccomandos:

  • set ignorecase - Todas as suas pesquisas não diferenciam maiúsculas de minúsculas
  • set smartcase - Sua pesquisa fará distinção entre maiúsculas e minúsculas se contiver uma letra maiúscula

Você precisa definir ignorecasese deseja usar o que smartcasefornece.

Escrevi recentemente um artigo sobre os comandos de pesquisa do Vim (tanto comando embutido quanto os melhores plugins para pesquisar com eficiência).


1
Parece que set smartcasenão realiza pesquisas sem distinção entre maiúsculas e minúsculas se eu não usar letras maiúsculas ... isso é normal?
caneta 21/02

1
Ok, basta ler abaixo que você precisa definir o ignorecase e o smartcase para que funcione. Me desculpe por isso!
caneta 21/02

24

Como outros sugeriram:

:set ic

Mas o interessante é que você pode alternar esses modos com:

:set ic!

18

coloque este comando no seu arquivo vimrc

set ic 

sempre faça pesquisa sem distinção entre maiúsculas e minúsculas


4
Não sei por que, mas meu vim está definido como sem distinção entre maiúsculas e minúsculas por padrão, para combater isso. use set noic.
user1510539

18

O bom e velho vim[grep]comando ..

:vimgrep /example\c/ &
  • \c caso insensitivo
  • \C para maiúsculas e minúsculas
  • % é procurar no buffer atual

insira a descrição da imagem aqui


Cannot open file "&"
Vitaly Zdanevich

Eu acho que ele quis dizer em %vez de %.
oarfish

15

Eu prefiro usar \cno final da string de pesquisa:

/copyright\c

10

Como o @huyz menciona, às vezes o comportamento desejado é usar pesquisas que não diferenciam maiúsculas de minúsculas, mas substituições que diferenciam maiúsculas de minúsculas. Minha solução para isso:

nnoremap / /\c
nnoremap ? ?\c

Com isso sempre quando você pressiona /ou ?ele adiciona \cuma pesquisa que não diferencia maiúsculas de minúsculas.


1
Não é uma sugestão ruim, mas impede você de usar a smartcaseopção?
Trebor rude

Parece que desde que \ c substituismartcase
Matthew Woo

4

Vim tem 2 modos

Modo 1.edit

  1. modo normal (Esc)

A pesquisa funcionará no modo normal

/ \ c para distinção entre maiúsculas e minúsculas

/ \ c pesquisa


E o modo visual?
user202729

3

Você pode definir ignorecasepor padrão, executar isso no shell

echo "set ic" >> ~/.vimrc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.