a-zA-Z 이상의 문자를 포함하는 단어 일치


15

단어를 일치시키기 위해 사용할 수 있습니다

\v(\w+)

vim 도움말에서 :h \w:

\ w 단어 문자 : [0-9A-Za-z_]

이것은 설명서에 설명 된대로 정확하게 작동합니다. 그러나, 나는 넘어 문자가 포함 된 단어와 일치 할 a-z, 예를 들어 prästgården을 . prästgården\v(\w+) 에 대해 정규 표현식 을 일치 시키면 세 개의 일치 항목이 생성됩니다.

prästgården
^^ ^^^ ^^^^

넘어 문자를 포함하는 단어를 일치시키는 방법 a-z? 내 로케일은 영어로 설정되어 있으며 가능하면 그대로 유지하고 싶습니다.

편집 : 단어가 단일 로케일에 속하지 않을 수 있습니다 (예 :

prästgården
treść

POSIX 문자 클래스 (예 : [[:alpha:]]\+이 경우)는 여기에서 원하는대로 수행해야하지만 Vim 문서 ( :help regex) 에 따르면 "이 항목은 8 비트 문자에만 작동합니다." 여기서는 OS X 10.8의 Vim 7.3에서 작동하지만 Linux의 Vim 7.3은 작동하지 않으므로이 Vim에 대해 Apple 고유의 것이 있다고 가정합니다. 또한 Perl이 매우 우수한 유니 코드 지원을 제공하지만 Vim Perl 바인딩을 통해이를 수행하는 것도 실패 함을 알 수 있습니다. 외부 Perl 스크립트로 전환해야 할 수 있으므로 완전한 유니 코드 지원을 켤 수 있습니다.
워렌 영

그건 그렇고, Perl과 함께라면 \p{Word}POSIX 문자 클래스 대신에 사용하고 싶습니다 . Perl의 POSIX 문자 클래스 처리에는 많은 예외 사례가 있으며, 대신 유니 코드 속성을 사용할 때 피할 수 있습니다.
워렌 영

답변:


9

Vim (버전 7.3 현재)은 패턴에서 비 ASCII 문자 지원과 관련하여 매우 제한적입니다. 특히 \wASCII 문자 만 일치하며 유용성이 제한됩니다.

유니 코드를 지원하는 몇 가지 문자 클래스 패턴이 있습니다. 당신이 관심의에 \I, 어떤 문자와 문자, 플러스 전반적으로 일치 _하고 @. 적어도 데비안 스퀴즈 (UTF-8 로켈에서)에는 오류가 있습니다. 예를 들어 ×과는 ÷문자로 일치하지만, 모든 라틴 문자가 제대로 recognied 것 같다 악센트. 적어도 ASCII 부분에 대해서는 옵션을 \I통해 구성 할 수 있습니다 isident.

심각한 유니 코드 지원을 원하면 외부 도구를 사용해야합니다. 예를 들어 perl -C -e '/\p{L}/'UTF-8 문자를 일치 시키려면 (UTF-8 로케일 가정)



2

키릴 어에도 적용됩니다.

\v\k

키릴 문자로 조금 더 복잡하고 실패

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

문서 .

Vim 7.4에서 테스트되었습니다.


나는 [=l=]목록 ł(예 : złoty) 등을 추가 할 것입니다. 그러나 이것은 이미 러시아어에 실패합니다. 어쨌든 공유해 주셔서 감사합니다.
Marco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.