C.W.K.
Stream
Lesson 04 of 06 · published

검색과 치환

~13 min · vim, search, substitute, regex

Level 0갇힌 자
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

검색도 motion 이야

/pattern 이 다음 매치 찾는 건 이미 알아. 마법은 검색이 operator 와 합쳐진다는 것: d/foo<Enter> 가 커서부터 다음 "foo" 까지 모두 삭제. 검색은 동사 체인의 재료지 별도 도구가 아냐.

기본 검색 키

  • /pattern — regex 앞으로 검색.
  • ?pattern — 뒤로 검색.
  • n — 다음 매치 (마지막 검색 방향과 동일).
  • N — 이전 매치.
  • * — 커서 위 단어 앞으로 검색.
  • # — 커서 위 단어 뒤로 검색.
  • :noh — 검색 하이라이트 클리어 (또는 <Esc> 에 매핑; 트랙 4).

Substitute 명령

Vim 의 :s 는 regex 검색-치환이고, 중요한 flag 들이 있어:

  • g — 라인 안 global (모든 occurrence, 첫 번째만 X).
  • c — 각 치환 confirm (위험한 변경에 좋음).
  • i — case-insensitive.
  • I — case-sensitive (ignorecase 무시).

Range 가 중요해

:s/a/b/ 는 현재 라인만 치환. :%s/a/b/g% 가 "파일 전체". :'<,'>s/a/b/g 는 visual 선택. :5,20s/a/b/g 는 5–20 라인. Range 먼저, 명령 두 번째 — 그게 레시피.

Magic, very magic, escape soup

Vim regex 가 punctuation-heavy 한 건 기본으로 많은 메타캐릭터에 백슬래시가 필요해서야. 패턴 시작에 \v 가 "very magic" 모드를 켜서 regex 가 다른 모든 곳처럼 보여: (, +, ? 가 백슬래시 없이 작동. 습관: 사소하지 않은 모든 regex 를 \v 로 시작.

마지막 substitute 재생. Normal mode 에서 & 가 현재 라인에서 마지막 :s 반복. g& 가 파일 전체에 반복. dot 명령의 로직과 짝지어 — 검색/substitute 는 자체 반복 키를 가져.

Code

검색 기본·vim
/pattern<Enter>    " 앞으로 검색
?pattern<Enter>    " 뒤로 검색
n                  " 다음 매치 (같은 방향)
N                  " 다음 매치 (반대 방향)
*                  " 커서 위 단어 앞으로 검색
#                  " 커서 위 단어 뒤로 검색
:noh               " 검색 하이라이트 클리어
:set hlsearch ic   " 검색 하이라이트 + case 무시 (둘 다 원함)
Substitute — 정통 패턴·vim
:s/old/new/         " 이 라인의 첫 매치 치환
:s/old/new/g        " 이 라인의 모든 매치
:%s/old/new/g       " 파일의 모든 매치
:%s/old/new/gc      " confirm 와 함께 (y/n/a/q)
:'<,'>s/old/new/g   " visual 선택의 모든 매치
:5,20s/old/new/g    " 5-20 라인의 모든 매치
:g/TODO/d           " TODO 포함하는 모든 라인 삭제
Very-magic regex — 백슬래시 수프 해결·vim
:%s/\v(\w+) (\w+)/\2 \1/g    " 인접한 두 단어 swap
:%s/\v\s+$//                       " 후행 whitespace 제거
:%s/\v^\s+//                       " 선행 whitespace 제거
:%s/\v(foo|bar|baz)/X/g            " escape 없이 alternation
:%s/\v(\d+)\.(\d+)/\2.\1/g    " 점 주변 부분 swap

External links

Exercise

소스 파일 열어. confirm 프롬프트 느끼게 각자 gc 와 함께: (1) 변수 한 개 글로벌 rename, (2) :%s/\v\s+$// 로 파일 전체 후행 whitespace 제거, (3) 작은 블록의 매 라인에서 두 단어 순서를 very-magic capture-group substitution 으로 swap. Regex 가 잘못된 것 같으면 undo 하고 천천히 읽어 — capture group 이 첫 시도에서 모두 틀리는 부분이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.