Bagaimana melakukan pencarian case-sensitive di Vim

1650

Saya ingin mencari kata huruf besar, misalnya HAK CIPTA dalam file. Saya mencoba melakukan pencarian seperti:

/copyright/i    # Doesn't work

tetapi tidak berhasil. Saya tahu bahwa di Perl, jika saya memberikan ibendera ke regex, itu akan mengubah regex menjadi regex case-insensitive. Tampaknya Vim memiliki caranya sendiri untuk menunjukkan regex case-insensitive.

Haiyuan Zhang
sumber

Jawaban:

2107

Anda dapat menggunakan \curutan pelarian di mana saja dalam pola. Sebagai contoh:

/\ccopyrightatau /copyright\catau bahkan/copyri\cght

Untuk melakukan kebalikannya ( pencocokan sensitif huruf besar -kecil), gunakan \C( huruf kapital C).

Chinmay Kanchi
sumber
516
Juga, \cdapat muncul di mana saja di dalam pola, jadi jika Anda mengetik pola dan kemudian memutuskan Anda ingin pencarian case-sensitive, tambahkan saja \cdi akhir.
Alok Singhal
269
Saya suka menambahkan set ignorecaseuntuk pencarian case-insensitive di vimrc saya, dan saya bisa gunakan \Cuntuk melakukan pencarian case-sensitive mirip dengan apa yang @AlokSinghal sebutkan.
Nick McCurdy
164
Ada juga set smartcaseyang secara otomatis akan beralih ke pencarian case-sensitive jika Anda menggunakan huruf kapital apa pun.
Zaz
83
Hanya ingin menambahkan komentar Zaz. set smartcasehanya berlaku ketika set ignorecasesudah aktif. Saya bingung tentang ini untuk sementara waktu. Lihat Tips Vim .
Tan Wang
12
@coderMe, Ini huruf kapital, \cversus\C
Aaron McDaid
680

Serta saran untuk \cdan ignorecase, saya menemukan smartcasesangat berguna. Jika Anda mencari sesuatu yang mengandung karakter huruf besar, itu akan melakukan pencarian case sensitif; jika Anda mencari sesuatu huruf kecil, itu akan melakukan pencarian case sensitif. Anda dapat menggunakan \cdan \Cmenimpa ini:

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

Lihat:

:help /\c
:help /\C
:help 'smartcase'
DrAl
sumber
83
Masalahnya ignorecaseadalah bahwa itu mempengaruhi substitusi serta pencarian. Saya menemukan bahwa masuk akal untuk memiliki pencarian (pandai) yang tidak peka terhadap huruf besar tetapi penggantian case-sensitive secara default. Tapi saya tahu tidak ada cara untuk melakukan itu.
huyz
150
Perlu dicatat bahwa untuk smartcasebekerja, Anda juga perlu set ignorecase. Tip yang bagus, terima kasih!
Skilldrick
12
Saya percaya Anda hanya bisa menggunakan \ C dalam ekspresi pencarian Anda untuk substitusi, seperti ini: :%s/lowercasesearch\C/replaceString/g. Ini tidak membuat fungsionalitas default yang Anda inginkan, tetapi memungkinkan Anda untuk memaksa sensitivitas huruf untuk penggantian sambil tetap mendapatkan manfaat dari smartcase saat mencari.
Anthony DiSanti
23
Anda juga dapat mengatur Ibendera pada substitusi untuk memaksa pola menjadi case-sensitive. Seperti :%s/lowercasesearch/replaceString/gI.
Rory O'Kane
1
Catatan dari halaman bantuan (berguna jika Anda "*" kecanduan seperti saya):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella
291

Anda dapat mengatur icopsi di Vim sebelum pencarian:

:set ic

Untuk kembali ke pencarian case-sensitive gunakan:

:set noic

ic adalah singkatan ignorecase

Nathan Fellman
sumber
juga satu-satunya pilihan Anda jika Anda cukup beruntung masih menggunakan Vi, bukan Vim. \ctidak bekerja di vi.
bluppfisk
61

Anda bisa mengeluarkan perintah

:set ignorecase

dan setelah itu pencarian Anda akan menjadi case-sensitive.

Paolo Tedesco
sumber
50

Untuk beralih antara pencarian case sensitif dan tidak sensitif saya menggunakan pemetaan ini di .vimrc saya

nmap <F9> :set ignorecase! ignorecase?

vbd
sumber
15
Ya, tetapi ignorecase?menunjukkan kepada Anda keadaan bendera saat ini. (di baris perintah)
Boris Brodski
1
Terima kasih! Bagi saya, ini adalah jawaban yang paling berguna di halaman: cara untuk dengan cepat beralih di antara dua mode tergantung pada apa yang Anda cari pada saat yang tepat.
Ben Hillier
31

Anda dapat menggunakan vimrcperintah-perintah itu:

  • set ignorecase - Semua pencarian Anda akan peka terhadap huruf besar-kecil
  • set smartcase - Pencarian Anda akan peka huruf besar-kecil jika mengandung huruf besar

Anda perlu mengatur ignorecasejika Anda ingin menggunakan apa yang smartcasedisediakan.

Baru - baru ini saya menulis sebuah artikel tentang perintah pencarian Vim (baik perintah bawaan dan plugin terbaik untuk mencari secara efisien).

Matthieu
sumber
1
Tampaknya set smartcasetidak melakukan pencarian case sensitif jika saya tidak menggunakan huruf besar ... apakah itu normal?
caneta
1
Ok, baca saja di bawah ini bahwa Anda harus menyetel ignorecase dan smartcase agar berfungsi. Maaf soal itu!
caneta
24

Seperti yang disarankan orang lain:

:set ic

Tapi yang paling keren adalah Anda dapat beralih mode seperti itu dengan:

:set ic!
Thomas
sumber
18

letakkan perintah ini di file vimrc Anda

set ic 

selalu melakukan pencarian case-sensitive

WALID BELRHALMIA
sumber
4
Saya tidak tahu mengapa tetapi vim saya disetel ke case-insensitive secara default, untuk melawan ini. gunakan set noic.
user1510539
18

vim[grep]Perintah lama yang bagus ..

:vimgrep /example\c/ &
  • \c untuk case sensitive
  • \C untuk case sensitif
  • % adalah mencari di buffer saat ini

masukkan deskripsi gambar di sini

Mick
sumber
Cannot open file "&"
Vitaly Zdanevich
Saya kira dia yang mereka maksudkan %alih-alih %.
oarfish
15

Saya lebih suka menggunakan \cdi akhir string pencarian:

/copyright\c
Nick Tsai
sumber
10

Seperti @huyz menyebutkan kadang-kadang perilaku yang diinginkan menggunakan pencarian case-insensitive tetapi penggantian case-sensitive. Solusi saya untuk itu:

nnoremap / /\c
nnoremap ? ?\c

Dengan itu selalu ketika Anda menekan /atau ?itu akan menambah \cpencarian case-sensitive.

pbogut
sumber
1
Bukan saran yang buruk, tetapi apakah itu mencegah Anda menggunakan smartcaseopsi?
Trebor Rude
Sepertinya itu akan menggantikansmartcase
Matthew Woo
4

Vim memiliki 2 mode

1.edit mode

  1. mode normal (Esc)

Pencarian akan bekerja untuk mode normal

/ \ c untuk case sensitif

/ \ c pencarian

Gowthaman D
sumber
Bagaimana dengan mode visual?
user202729
3

Anda dapat mengatur ignorecasesecara default, jalankan ini di shell

echo "set ic" >> ~/.vimrc
Steely Wing
sumber