2016년 11월 7일 월요일

VIM 7.4 버전의 버그 하나

VIM 검색 모드를 사용할 때 대소문자 구분을 해제(set ignorecase)하면 소문자 또는 대문자만을 이용하더라도 대소문자를 구분하지 않고 모두 검색할 수 있다.



그리고 PCRE에서는 정규표현식 문자 클래스를 이용해도 이런 특성은 그대로 유지된다.



그런데 VIM 정규표현식은 다르다. 문자 클래스를 이용하면 범위 지정에 사용된 알파벳이 소문자 또는 대문자인가에 따라 대소문자를 구분한다.



수 년 동안 이런 결과를 PCRE와 구분되는 VIM 정규표현식만의 특징으로 알고 있었다. 그런데 지난 주 강의 중에 PCRE와 VIM 환경의 정규표현식 문자 클래스는 이런 차이가 있다면서 자신있게 예시를 보여주는데 어라? VIM 환경에서 대소문자 구분을 하지 않는 것 아닌가? (순간 식은땀ㅜㅜ)

그동안 잘 모르고 있었다면서 얼버무리고 말았는데 나중에 테스트를 해보니 -를 이용해서 검사 범위를 전체로 지정할 때만 대소문자 구분을 한다는 사실을 알게 되었다. 즉 -를 이용하지 않거나, -를 이용하더라도 전체 범위를 지정하지 않으면 대소문자 구분을 하지 않는다는 얘기.




왜 그동안 몰랐을까? 아마도 알파벳 검사 범위 지정할 때 [a-z] 형식이 아닌, 다른 형식이 필요한 상황이 없었나보다. 기능 한 번 변태같다면서 궁시렁대다 올해 9월에 배포된 8.0 버전에서 테스트해보니 7.4 버전의 변태같은 현상은 사라졌다.


결국 의도된 기능이 아닌 버그였던 모양. 최근 탈고한 책에도 관련 내용이 있어서 부랴부랴 수정했다. 강의할 때마다 느끼는 거지만 참 많이 배운다.

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스