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.

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).


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'

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


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.


50

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

nmap <F9> :set ignorecase! ignorecase?


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).


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!

18

letakkan perintah ini di file vimrc Anda

set ic 

selalu melakukan pencarian case-sensitive


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


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

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.


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


Bagaimana dengan mode visual?
user202729

3

Anda dapat mengatur ignorecasesecara default, jalankan ini di shell

echo "set ic" >> ~/.vimrc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.