모드 요약
| 모드 | 설명 | 진입/종료 |
|---|---|---|
| Normal 노멀 모드 | 명령을 내리는 기본 상태 | Esc 로 언제든 복귀 |
| Insert 입력 모드 | 텍스트 입력 | i, a, o / 종료: Esc |
| Visual 비주얼 모드 | 선택(드래그) 후 작업 | v(문자), V(라인), Ctrl+v(블록) / 종료: Esc |
| Command 콜론 모드 | :50,54y 같은 범위 명령 실행 | : / 종료: Esc |
“복사/잘라내기/변경”은 주로 노멀 모드에서 operator + motion 또는 text object로 실행합니다.
복사 (Yank)
| 명령 | 설명 | 예시 |
|---|---|---|
| yy | 현재 줄 복사 | yy |
| 5yy | 현재 줄부터 5줄 복사 | 5yy |
| y + 이동 | 이동(motion) 범위 복사 | y$(커서~줄끝), yw(단어) |
| v 선택 → y | 비주얼 선택 영역 복사 | v ... y |
| V 선택 → y | 라인 단위 선택 복사 | V 4j y (총 5줄) |
VSCode Vim에서 보통 y만 해도 OS 클립보드와 연동되지만, 환경에 따라 다르면 시스템 레지스터 "+를 쓰면 확실합니다.
잘라내기 (Cut) = Delete (d)
Vim에서는 “잘라내기”라는 별도 키가 아니라, 삭제(delete)한 내용이 레지스터에 저장되므로 이후 p/P로 붙여넣을 수 있습니다.
| 명령 | 설명 | 예시 |
|---|---|---|
| dd | 현재 줄 잘라내기(삭제+저장) | dd |
| 5dd | 현재 줄부터 5줄 잘라내기 | 5dd |
| dw | 커서부터 “단어 경계”까지 삭제 | dw |
| diw | 단어 전체(inner word) 삭제 | diw |
| d$ | 커서부터 줄 끝까지 삭제 | d$ |
| v 선택 → d | 선택 영역 잘라내기 | v ... d |
| Ctrl+v 선택 → d | 블록(컬럼) 단위 삭제 | Ctrl+v ... d |
붙여넣기 (Paste)
| 명령 | 설명 | 예시 |
|---|---|---|
| p | 커서 뒤에 붙여넣기 | p |
| P | 커서 앞에 붙여넣기 | P |
| gp | 붙여넣기 후 커서를 붙여넣은 뒤에 둠(취향) | gp |
덮어쓰기/변경 (Change & Replace)
단어를 “통째로” 바꾸기
| 명령 | 설명 |
|---|---|
| ciw | 현재 단어 전체 변경 (change inner word) → insert 진입 |
| caw | 단어 + 주변 공백까지 변경 (change a word) |
| viw → c | 단어 선택 후 변경(결과는 ciw와 유사) |
“단어 전체를 깔끔하게 덮어쓰기”는 보통 ciw가 가장 안정적입니다.
커서부터 단어 끝까지 바꾸기
| 명령 | 설명 |
|---|---|
| cw | 커서~단어 끝까지 변경 (UI에서 단어 끝이 강조되어 보일 수 있음) |
| ce | 커서~단어 끝(정확히 end)까지 변경 |
질문에서 말한 “resolve$처럼 보이며 덮어쓰기”는 보통 cw/ce 또는 검색 기반(cgn)에서 많이 체감됩니다.
Windows ‘수정(덮어쓰기)’ 느낌의 Replace 모드
| 명령 | 설명 | 종료 |
|---|---|---|
| R | Replace 모드(타이핑이 기존 글자를 덮어씀) | Esc |
| r | 현재 커서의 한 글자만 다른 글자로 교체 | 즉시 종료 |
라인번호 범위로 복사/삭제 (콜론 명령)
라인 넘버가 명확할 때 가장 빠릅니다. (예: 50번 줄부터 5줄)
| 명령 | 설명 | 예시 |
|---|---|---|
| :50,54y | 50~54줄(총 5줄) 복사(yank) | :50,54y |
| :50,54d | 50~54줄 삭제(잘라내기) | :50,54d |
| :50 | 50번 줄로 이동 | :50 |
예) “50번 줄부터 5줄 복사”
:50,54y
예) “50번 줄로 이동한 다음 5줄 복사”
:50
5yy
페이지/전체 삭제
Vim에서 “페이지”는 보통 화면에 보이는 영역(screenful)을 뜻합니다. 아래는 자주 쓰는 “전체 삭제” 케이스를 의미별로 정리한 것입니다.
| 목표 | 명령 | 설명 |
|---|---|---|
| 파일 전체 삭제 | :%d | 파일의 모든 줄 삭제. 가장 확실한 “전체 삭제” 방법. 삭제 후 u로 되돌릴 수 있음. |
| 파일 전체 삭제(키보드) | ggVGd | gg(맨 위) → V(라인 선택) → G(맨 아래) → d(삭제). |
| 현재 줄~파일 끝 삭제 | dG | 커서가 있는 줄부터 파일 끝까지 삭제. |
| 현재 화면(페이지)만 삭제 | V → (선택 이동) → d | 단일 “한 방” 명령은 없고, 라인 비주얼 모드(V)로 화면에 보이는 만큼 선택 후 d로 삭제. |
자주 쓰는 조합
" 1) 파일 전체 삭제
:%d
" 2) 파일 전체 삭제(키보드만)
ggVGd
" 3) 현재 줄부터 파일 끝까지 삭제
dG
“페이지(screenful) 삭제”는 화면 범위가 스크롤/창 크기에 의해 달라지므로, 보통 V로 선택 후 d 방식이 가장 안전합니다.
검색 기반 교체 (단어가 “선택된 것처럼” 보이는 패턴)
“/로 검색하고, 매치된 단어가 선택된 것처럼 보이면서 덮어쓰기”를 가장 잘 재현하는 조합입니다.
| 명령 | 설명 | 비고 |
|---|---|---|
| /패턴 | 검색 (다음: n, 이전: N) | /resolve |
| cgn | 현재/다음 검색 매치를 “변경(change)”하고 insert 진입 | 연속 교체에 매우 빠름 |
| . | 직전 변경/삭제 명령 반복 | 반복 치환에 핵심 |
| :%s/old/new/gc | 전체 치환 + 확인(prompt)하며 진행 | c는 confirm |
예) resolve 를 하나씩 눈으로 확인하며 바꾸기
/resolve
cgn (새 텍스트 입력 후 Esc)
n (다음 매치로 이동)
. (반복) 또는 다시 cgn
예) 파일 전체에서 old -> new 치환(확인하면서)
:%s/old/new/gc
실전 팁
- 취소/되돌리기: u (undo), Ctrl+r (redo)
- 현재 단어를 빠르게 선택: viw (inner word), vaw (a word)
- 괄호/따옴표 안만 변경: ci(, ci{, ci", ci'
- VSCode 밖으로 복사 확실히: 시스템 레지스터를 명시("+y, "+d) 또는 VSCode 설정에서 vim.useSystemClipboard 활성화
이 페이지는 “필요한 것만 빠르게 찾는” 용도로 구성했습니다. 더 넣고 싶은 섹션(이동, 검색/치환 심화, 레지스터, 매크로 등) 있으면 말해주면 확장해드릴게요.
정규표현식에서 %는 특별한가?
결론부터:
일반적인 정규표현식(regex)에서 %는 메타문자가 아니다.
대부분의 엔진에서 %는 그냥 문자(literal)로 취급된다. 다만 Vim에서는
“정규식”이 아닌 “콜론 명령 문법”에서 %가 특별한 의미로 쓰여 혼동이 자주
발생한다.
1) 표준 정규표현식(Regex)에서 %
| 표현 | 의미 | 비고 |
|---|---|---|
% |
% 문자 1개를 그대로 매칭 |
대부분 엔진에서 이스케이프 불필요 |
100% |
100% 문자열 그대로 매칭 |
예: "100%" 포함 여부 검사 |
예) "100%"가 포함되어 있는지 찾기 (일반 regex 관점)
100%
2) Vim에서 헷갈리는 이유: :%d의 %는 정규식이 아님
:%d는 정규식이 아니라 Ex(콜론) 명령이다. 여기서
%는 전체 줄 범위(= 1,$)를 의미한다.
| 명령 | 뜻 | 해석 |
|---|---|---|
:%d |
파일 전체 삭제 | %(전체 줄 범위) + d(delete) |
:%s/foo/bar/g |
파일 전체에서 치환 | %(전체 줄 범위) + s(substitute) |
예) Vim 콜론 명령 (정규식 아님)
:%d " 전체 줄(1,$) 삭제
:%s/old/new/g " 전체 줄(1,$)에서 old -> new 치환
3) Vim 정규식에서 %는?
Vim 정규식에서도 % 자체는 보통 메타문자가 아니다(그냥 문자로 매칭됨). 다만
Vim에는 \%로 시작하는 “Vim 전용 확장 정규식”이 존재한다. 이
경우는 % 단독이 아니라 \% 접두사가 핵심이다.
| 패턴 | 의미(개념) | 예시 |
|---|---|---|
\%l |
특정 줄(line)에 위치 조건을 건다 | /\%5lERROR (5번째 줄의 ERROR) |
\%c |
특정 컬럼(column)에 위치 조건을 건다 | /\%10cfoo (10번째 컬럼의 foo) |
\%d |
숫자(digit) 등 Vim 확장 패턴(버전에 따라 차이) | Vim 도움말 참고 |
예) Vim 확장 정규식 (Vim 전용)
:/\%5lERROR " 5번째 줄에 있는 ERROR만 매칭
요약
-
일반 정규표현식에서
%는 보통 그냥 문자다. -
:%d,:%s의%는 정규식이 아니라 Vim 콜론 명령의 “전체 범위”다. -
Vim 정규식에서 특별한 건
%가 아니라\%로 시작하는 확장 패턴이다.