Vim에 검색 할 때 분음 부호 / 악센트를 무시하도록 지시하는 방법이 있습니까? 예를 들어 검색 할 수 있기를 원합니다
kočička
입력하여
/kocicka
ignorecase
및 smartcase
옵션은 매우 유용하지만, 그들은 분음 부호 / 액센트와 함께 할 아무것도하지 않는 것.
Vim에 검색 할 때 분음 부호 / 악센트를 무시하도록 지시하는 방법이 있습니까? 예를 들어 검색 할 수 있기를 원합니다
kočička
입력하여
/kocicka
ignorecase
및 smartcase
옵션은 매우 유용하지만, 그들은 분음 부호 / 액센트와 함께 할 아무것도하지 않는 것.
답변:
주석 에서 언급 한 @muru와 같이 등가 클래스 (에서 설명 됨 :help /[[
)를 사용하여 유사한 문자 세트로 평가되는 문자 클래스 표현식 인 것처럼 보입니다 (즉, 악센트 / 발음 구별 부호를 제거하면 동일합니다).
예를 들어, 찾으려면 kočička
과 kocicka
같은 패턴으로, 당신은이를 사용할 수 있습니다 :
ko[[=c=]]i[[=c=]]ka
캐릭터 [[=c=]]
의 등가 클래스는 어디에 있습니까 c
?
c
검색을 수행하는 동안 적중 할 때마다이 문자 클래스를 자동으로 삽입하려면 다음 맵핑을 사용하십시오.
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
다음과 같이 나눌 수 있습니다.
<expr>
표현식의 평가를 입력하십시오getcmdtype() =~ '[?/]'
뒤로 또는 앞으로 검색을 작성하는지 테스트'[[=c=]]'
c
이전 테스트가 성공한 경우 캐릭터 의 동등 클래스를 반환'c'
반환 c
그렇지 않으면 문자를이전 매핑에는 두 가지 단점이 있습니다.
c
캐릭터를 커버다음 <CR>
과 같이 다시 매핑하여 향상시킬 수 있습니다 .
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
<CR>
검색을 위해 패턴을 작성한 후 적중 하면 매핑은 자동으로 모든 알파벳 문자를 해당 클래스의 대응 문자로 대체합니다.
에 대한 매핑 은 인수가 아닌 시스템 매핑을 사용한다는 점을 제외하고 <CR>
는 이전에 대한 매핑과 유사합니다 . 식의 평가를 삽입 할 수 있으며 전체 명령 줄을 식의 평가로 바꿀 수 있습니다.c
<expr>
<C-\>e
<expr>
<C-\>e
/kočička
matches와 같은 반대 방향으로 가고 싶다면 대신을 kocicka
사용할 수 있습니다 . 대안 및 멀티 바이트 문자가 작동하지 않습니다 그러나 (나는 확실하지는 않지만) 효과가있는 것처럼 보이며 자신의 동등성 클래스 (예 :)도 작성하는 것으로 추측 합니다. '[[:lower:][:upper:]]'
'\a'
'[:alpha:]'
'\I'
'[^[:punct:]]'
'[А-яЁё]'
:h [[=
및:h patterns-composing
.