
Vim Regular Expression
Vim에서의 RE(Regular Expression) 은 Python이나 C에서의 RE 와 조금 차이가 있다.
참고로 Vim의 RE는 backslash가 무지 많이 요구되기 때문에,
일반적으로 very magic 모드(\v)를 사용하는 게 정신건강에 좋다.
- 가급적 기호를 regular expression의 special character(meta character)로 해석하게 됨.
- backslash를 통한 escape를 안해줘도 됨.
우선 이 문서에선 기본 동작으로 설명하지만, very magic mode 가 훨씬 편하므로 반드시 very magic mode 로 사용하는 것을 연습해두기리 권함.
Python 등의 re모듈에서 기본적으로 meta character 인 다음의 문자들이 vim에선 일반 문자로 취급된다.
+ ? | ( )
때문에 이를 meta character 로 쓰려면, backslash로 escape 시켜야 함.
\+ \? \| \( \)
backslash없이 metacharacter로 동작하는 건 다음 정도임:
. ^ $ *
- period는 newline을 제외한 여러 문자들 중 하나를 의미.
- caret은 square bracket 안에선 not을 의미하고 아닌 경우엔 한 줄의 시작을 의미함.
- dollar는 한 줄의 끝을 의미.
- asterisk는 0개 이상을 나타내는 qunatifier
기본 매칭
hello
위와 같이 일반 글자의 패턴은 말 그대로 hello 문자열을 찾음.
RE의 장점은 다음의 meta characters를 통해 활용가능함.
.: period- newline (
\n)을 제외한 임의의 문자 1개를 의미: single character a.c:abc,axc등에 매칭됨.
- newline (
Quantifier
quantifier는 특정 글자나 패턴이 얼마나 반복되는지를 나타냄.
| Meaning | Vim default |
| zero or more | * |
| one or more | \+ |
| zero or one | \? |
| exactly n | \{n} |
| n or more | \{n,} |
| n to m | \{n,m} |
다음은 1개 이상의 숫자를 나타내는 패턴임:
\d\+
\d는 Vim의 RE에서 digit (숫자) 문자 하나를 의미하는 class임.
Vim Classes
다음은 Vim에서 자주 사용되는 클래스임 (사실 Python의 re에서도 많이 사용됨)
| Meaning | Pattern |
| digit | \d |
| not digit | \D |
| word char | \w |
| whitespace | \s |
| alphabet | \a |
| uppercase | \u |
| lowercase | \l |
RE에서 흔히 사용되는 Character Class는 square bracket을 이용함:
[abc]
- 이 경우,
a,b,c세 글자 중 한 글자가 있는 패턴을 의미함.
[^abc]
- 앞의 caret에 의해 not이 되어
a,b,c를 제외한 한글자가 있는 패턴이 됨.
[a-z]
- dash를 통해 범위를 표현할 수도 있으나, 이 경우 locale의 철자 순서를 따르므로 주의해야함.
- 철저한 ASCII로 동작하려면
export LANG=C또는export LANG=ANSI를 사용하는 것을 권함.
Alternation (OR)
\| 는 or로 동작함.
\(cat\|dog\)
예를 들어 다음의 pattern은 Korea와 korea에 모두 매칭됨
\(K|k\)orea
Group and Capture
Parenthesis를 사용하여 capture group을 지정하는 RE와 같으나, opening parenthesis와 closing parenthesis 앞에 backslash가 요구된다.
\(\w\+\) \(\w\+w)
- 2개의 단어를 나타내는 패턴을 의미
- 패턴을 나타낼 때 사용되는 스페이스는 구분을 의미하므로 패턴에서 스페이스 그대로를 의미하려면 backslash와 스페이스를 같이 붙여 기재하여 표현.
- 각 단어가 capture group1 과 capture group2로 캡처됨.
Vim의 :s (substitution)을 통해 다음과 같이 2개의 단어의 순서를 바꿀 수 있음.
:s/\(\w\+\) \(\w\+w)/\2 \1/
- 현재 line에서 첫 단어와 두번째 단어가 위치를 바꿈.
Anchor
Anchor는 문자 자체를 소비하지 않고(match length = 0) 특정 위치를 지정하는 특수한 문자를 가리킴.
- 매칭 위치를 찾는데만 사용됨.
- match 범위를 바꾸지는 않음
- regex engine이 현재 위치가 조건을 만족하는지 확인만 할 뿐, 매칭 결과물에 포함되지 않음.
다음이 대표적인 anchor임.
| anchor | 의미 |
^ |
줄 시작 |
$ |
줄 끝 |
\< |
단어 시작 |
\> |
단어 끝 |
Vim 전용 기능: \zs, \ze, {-}
매칭 결과물의 위치를 지정하는 match boundary modifer로 \zs, \ze를 vim은 지원함.
\zs= match start 재설정\ze= match end 재설정
:s/H\zsello/i/
Hello문자열을 찾지만, 매칭 결과물은ello가 됨.ello가i로 치환되어 결국Hi가 되게 함.
다음의 예는 path에서 파일명을 추출해냄:
.*/\zs[^/]+$
{-} 은 minimal repeat 로 Python등의 RE의 *?랑 같은 역할을 함.
- 가능한 최소 반복을 찾아냄.
- 패턴에 매핑되는 최소길이의 문자열을 찾음
?이 vim RE에선 lazy quantifier (=greedy quantifier)가 아니기 때문에 curly bracket을 통한{-min, max}형태를 이용해야함.
다음의 예를 참고:
<a>1</a><a>2</a>
- 위의 문자열에서 vim RE
<a>.{-}</a>를 사용하면 다음이 매칭 결과임:<a>1</a> - Python의
re모듈이라면<a>.*?</a>를 사용한다.
앞서 \zs와 \ze를 같이 사용한 예제:
<h1>\zs.{-}\ze</h1>
<h1>태크 내의 문자열만 매칭 시키는 패턴.
같이 보면 좋은 자료들
2023.07.03 - [Python] - [Python] Regular Expression: 표현식 기초 및 요약
[Python] Regular Expression: 표현식 기초 및 요약
Regular Expression : 정규표현식 요약Regular Expression (re) 의 기본적인 operator는 다음과 같음.Basic operatorDescription.Any character except `\n` (newline)aThe character a itselfabThe string ab itselfx|yx or y\yEscapes a special characte
ds31x.tistory.com
2026.02.18 - [utils] - 연습 - Vim Regular Expression
연습 - Vim Regular Expression
이 문서는 vim에서의 Regular Expression을 익히기 위한 실습을 다룸: 다음의 문서를 반드시 읽어보고 나서 수행해볼것.2026.02.18 - [utils] - Vim Regular Expression Vim Regular ExpressionVim Regular ExpressionVim에서의 RE(
ds31x.tistory.com
'utils' 카테고리의 다른 글
| vscode - coding shortcuts (0) | 2026.02.18 |
|---|---|
| 연습 - Vim Regular Expression (0) | 2026.02.18 |
| [vim] buffer 와 window (0) | 2026.01.24 |
| johngrib의 vimwiki + github.io 를 설치하기 (0) | 2026.01.14 |
| vimwiki/vimwiki (neovim의 init.lua로 설정) (0) | 2026.01.14 |