Cách thực hiện tìm kiếm không nhạy cảm trong Vim


1650

Tôi muốn tìm kiếm một từ viết hoa, ví dụ: BẢN QUYỀN trong một tệp. Tôi đã thử thực hiện một tìm kiếm như:

/copyright/i    # Doesn't work

nhưng nó không hoạt động. Tôi biết rằng trong Perl, nếu tôi đưa icờ thành regex, nó sẽ biến regex thành regex không phân biệt chữ hoa chữ thường. Dường như Vim có cách riêng để chỉ ra một biểu thức không phân biệt chữ hoa chữ thường.

Câu trả lời:


2107

Bạn có thể sử dụng \cchuỗi thoát bất cứ nơi nào trong mẫu. Ví dụ:

/\ccopyrighthoặc /copyright\cthậm chí/copyri\cght

Để thực hiện nghịch đảo ( khớp trường hợp nhạy cảm ), sử dụng \C(viết hoa C) thay thế.


516
Ngoài ra, \ccó thể xuất hiện bất cứ nơi nào trong mẫu, vì vậy nếu bạn nhập một mẫu và sau đó quyết định bạn muốn tìm kiếm không phân biệt chữ hoa chữ thường, chỉ cần thêm một \cở cuối.
Alok Singhal

269
Tôi muốn thêm set ignorecasevào tìm kiếm không phân biệt chữ hoa chữ thường trong vimrc của tôi và tôi có thể sử dụng \Cđể thực hiện tìm kiếm phân biệt chữ hoa chữ thường giống như những gì @AlokSinghal đã đề cập.
Nick McCurdy

164
Cũng set smartcasecó thể tự động chuyển sang tìm kiếm phân biệt chữ hoa chữ thường nếu bạn sử dụng bất kỳ chữ in hoa nào.
Zaz

83
Chỉ muốn thêm vào bình luận của Zaz. set smartcasechỉ áp dụng khi set ignorecaseđã hoạt động. Tôi đã bối rối về điều này trong một thời gian. Xem Mẹo Vim .
Tân Vương

12
@coderMe, đó là viết hoa, \cso với\C
Aaron McDaid

680

Cũng như những gợi ý cho \cignorecase, tôi thấy smartcaserất hữu ích. Nếu bạn tìm kiếm thứ gì đó chứa các ký tự viết hoa, nó sẽ thực hiện tìm kiếm phân biệt chữ hoa chữ thường; nếu bạn tìm kiếm một cái gì đó hoàn toàn bằng chữ thường, nó sẽ thực hiện một tìm kiếm không nhạy cảm. Bạn có thể sử dụng \c\Cghi đè lên điều này:

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

Xem:

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

83
Vấn đề với ignorecasenó là nó ảnh hưởng đến sự thay thế cũng như tìm kiếm. Tôi thấy rằng nó có ý nghĩa để có các tìm kiếm không phân biệt chữ hoa chữ thường nhưng thay thế theo trường hợp theo mặc định. Nhưng không có cách nào để làm điều đó mà tôi biết.
huyz

150
Đáng lưu ý rằng smartcaseđể làm việc, bạn cũng cần set ignorecase. Mẹo tuyệt vời, cảm ơn!
Skilldrick

12
Tôi tin rằng bạn chỉ có thể sử dụng \ C trong biểu thức tìm kiếm của mình để thay thế, như thế này : :%s/lowercasesearch\C/replaceString/g. Điều này không tạo ra chức năng mặc định mà bạn mong muốn, nhưng nó cho phép bạn buộc phân biệt chữ hoa chữ thường để thay thế trong khi vẫn được hưởng lợi từ smartcase khi tìm kiếm.
Anthony DiSanti

23
Bạn cũng có thể đặt Icờ thay thế để buộc mẫu phải phân biệt chữ hoa chữ thường. Thích :%s/lowercasesearch/replaceString/gI.
Rory O'Kane

1
Lưu ý từ trang trợ giúp (hữu ích nếu bạn nghiện "*" như tôi):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella

291

Bạn có thể đặt ictùy chọn trong Vim trước khi tìm kiếm:

:set ic

Để quay lại tìm kiếm phân biệt chữ hoa chữ thường, hãy sử dụng:

:set noic

ic là tốc ký cho ignorecase


cũng là lựa chọn duy nhất của bạn nếu bạn không may mắn vẫn sử dụng Vi thay vì Vim. \ckhông làm việc trong vi.
bluppfisk

61

Bạn có thể ra lệnh

:set ignorecase

và sau đó các tìm kiếm của bạn sẽ không phân biệt chữ hoa chữ thường.


50

Để chuyển đổi giữa tìm kiếm phân biệt chữ hoa và chữ thường, tôi sử dụng ánh xạ này trong .vimrc

nmap <F9> :set ignorecase! ignorecase?


15
Có, nhưng ignorecase?cho bạn thấy trạng thái hiện tại của cờ. (trong dòng lệnh)
Boris Brodski

1
Cảm ơn bạn! Đối với tôi, đây là câu trả lời hữu ích nhất trên trang: một cách để nhanh chóng chuyển đổi giữa hai chế độ tùy thuộc vào những gì bạn đang tìm kiếm tại thời điểm chính xác.
Ben Hillier

30

Bạn có thể sử dụng trong vimrccác lệnh đó:

  • set ignorecase - Tất cả các tìm kiếm của bạn sẽ không phân biệt chữ hoa chữ thường
  • set smartcase - Tìm kiếm của bạn sẽ phân biệt chữ hoa chữ thường nếu nó chứa một chữ cái viết hoa

Bạn cần đặt ignorecasenếu bạn muốn sử dụng những gì smartcasecung cấp.

Gần đây tôi đã viết một bài viết về các lệnh tìm kiếm Vim (cả hai lệnh được xây dựng và các plugin tốt nhất để tìm kiếm hiệu quả).


1
Có vẻ như set smartcasekhông thực hiện tìm kiếm không phân biệt chữ hoa chữ thường nếu tôi không sử dụng chữ in hoa ... điều đó có bình thường không?
caneta

1
Ok, chỉ cần đọc dưới đây là bạn phải đặt cả ignorecase và smartcase để nó hoạt động. Xin lỗi vì điều đó!
caneta

24

Như những người khác đề xuất:

:set ic

Nhưng điều thú vị là Bạn có thể chuyển đổi các chế độ như vậy với:

:set ic!

18

đặt lệnh này trong tập tin vimrc của bạn

set ic 

luôn luôn tìm kiếm trường hợp không nhạy cảm


4
Tôi không biết tại sao nhưng vim của tôi được đặt thành không phân biệt chữ hoa chữ thường để chống lại điều này. sử dụng set noic.
dùng1510539

18

Lệnh cũ tốt vim[grep]..

:vimgrep /example\c/ &
  • \c cho trường hợp không nhạy cảm
  • \C cho trường hợp nhạy cảm
  • % là tìm kiếm trong bộ đệm hiện tại

nhập mô tả hình ảnh ở đây


Cannot open file "&"
Vitaly Zdanevich

Tôi đoán anh ấy có ý %thay vì %.
oarfish

15

Tôi thích sử dụng \cở cuối chuỗi tìm kiếm:

/copyright\c

10

Như @huyz đề cập đôi khi hành vi mong muốn là sử dụng các tìm kiếm không phân biệt chữ hoa chữ thường nhưng thay thế phân biệt chữ hoa chữ thường. Giải pháp của tôi cho điều đó:

nnoremap / /\c
nnoremap ? ?\c

Với điều đó luôn luôn khi bạn nhấn /hoặc ?nó sẽ thêm \ccho tìm kiếm không phân biệt chữ hoa chữ thường.


1
Không phải là một gợi ý xấu, nhưng nó có ngăn bạn sử dụng smartcasetùy chọn không?
Trebor Rude

Có vẻ như nó sẽ được ghi đèsmartcase
Matthew Woo

4

Vim có 2 chế độ

Chế độ 1.edit

  1. chế độ bình thường (Esc)

Tìm kiếm sẽ hoạt động ở chế độ bình thường

/ \ c cho trường hợp nhạy cảm

/ \ c tìm kiếm


Còn chế độ trực quan thì sao?
dùng202729

3

Bạn có thể đặt ignorecasemặc định, chạy cái này trong shell

echo "set ic" >> ~/.vimrc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.