VIM 빠른 참조
모드, 내비게이션, 편집, 검색, 매크로, 버퍼
모드
모드 전환
| i | 삽입 모드 (커서 앞) |
| a | 삽입 모드 (커서 뒤) |
| o | 아래에 줄 삽입 후 삽입 모드 |
| O | 위에 줄 삽입 후 삽입 모드 |
| v | 비주얼 모드 (문자) |
| V | 비주얼 모드 (줄) |
| Ctrl+v | 블록 비주얼 모드 |
| : | 명령줄 모드 |
| R | 교체 모드 |
| Esc | 일반 모드로 돌아가기 |
내비게이션
문자 및 줄 이동
| h j k l | 왼쪽, 아래, 위, 오른쪽 |
| 0 / ^ | 줄의 시작 / 첫 번째 비공백 |
| $ | 줄의 끝 |
| w / W | 다음 단어 / WORD |
| b / B | 이전 단어 / WORD |
| e / E | 단어 / WORD의 끝 |
| f{c} / F{c} | 문자를 앞 / 뒤로 찾기 |
| t{c} / T{c} | 문자 직전/직후까지 앞 / 뒤로 이동 |
화면 및 파일 이동
| gg / G | 첫 번째 / 마지막 줄로 |
| :{n} | n번째 줄로 |
| Ctrl+d / Ctrl+u | 반 페이지 아래 / 위 |
| Ctrl+f / Ctrl+b | 전체 페이지 아래 / 위 |
| H / M / L | 화면의 위 / 중간 / 아래 |
| % | 대응하는 괄호로 이동 |
편집
삽입 및 추가
| I | 줄의 시작에 삽입 |
| A | 줄의 끝에 추가 |
| ea | 단어 끝에 추가 |
| gi | 마지막 삽입 위치에 삽입 |
삭제 및 변경
| x / X | 커서 아래 / 앞의 문자 삭제 |
| dd | 줄 삭제 |
| dw | 단어 삭제 |
| d$ / D | 줄 끝까지 삭제 |
| cc / S | 줄 전체 변경 |
| cw | 단어 변경 |
| c$ / C | 줄 끝까지 변경 |
| ci" / ci( | 따옴표 / 괄호 안 변경 |
복사 및 붙여넣기
| yy | 줄 얀크 (복사) |
| yw | 단어 얀크 |
| y$ | 줄 끝까지 얀크 |
| p / P | 커서 뒤 / 앞에 붙여넣기 |
| J | 아래 줄을 현재 줄에 결합 |
되돌리기 및 반복
| u | 실행 취소 |
| Ctrl+r | 다시 실행 |
| . | 마지막 명령 반복 |
검색 및 치환
검색
| /pattern | 앞으로 검색 |
| ?pattern | 뒤로 검색 |
| n / N | 다음 / 이전 일치 |
| * | 커서 아래 단어 앞으로 검색 |
| # | 커서 아래 단어 뒤로 검색 |
치환
:s/old/new/ " replace first on line
:s/old/new/g " replace all on line
:%s/old/new/g " replace all in file
:%s/old/new/gc " replace all, confirm each
비주얼 모드
선택
| v | 문자 선택 시작 |
| V | 줄 선택 시작 |
| Ctrl+v | 블록 선택 시작 |
| o | 선택 반대편 끝으로 이동 |
| gv | 마지막 비주얼 선택 재선택 |
선택에 대한 동작
| d | 선택 삭제 |
| y | 선택 얀크 |
| c | 선택 변경 |
| > | 선택 들여쓰기 |
| < | 선택 내어쓰기 |
| ~ | 대소문자 전환 |
| U / u | 선택을 대문자 / 소문자로 |
버퍼 및 윈도우
버퍼
| :ls | 열린 버퍼 목록 |
| :bn / :bp | 다음 / 이전 버퍼 |
| :b{n} | 버퍼 n으로 이동 |
| :bd | 현재 버퍼 닫기 |
| :e file | 새 버퍼에서 파일 열기 |
윈도우
| :sp file | 수평 분할 |
| :vsp file | 수직 분할 |
| Ctrl+w h/j/k/l | 윈도우로 이동 |
| Ctrl+w = | 윈도우 크기 균등화 |
| Ctrl+w q | 윈도우 닫기 |
탭
| :tabnew file | 새 탭에서 파일 열기 |
| gt / gT | 다음 / 이전 탭 |
| :tabclose | 현재 탭 닫기 |
레지스터
레지스터 사용
| "ay | 레지스터 a에 얀크 |
| "ap | 레지스터 a에서 붙여넣기 |
| "Ay | 레지스터 a에 얀크 추가 |
| :reg | 모든 레지스터 표시 |
특수 레지스터
| "" | 이름 없음 (마지막 삭제/얀크) |
| "0 | 마지막 얀크 |
| "+ | 시스템 클립보드 |
| "/" | 마지막 검색 패턴 |
| ". | 마지막 삽입 텍스트 |
| "_ | 블랙홀 (버림) |
매크로
기록 및 재생
| q{a} | 레지스터 a에 매크로 기록 시작 |
| q | 기록 중지 |
| @{a} | 레지스터 a의 매크로 재생 |
| @@ | 마지막 매크로 재실행 |
| 5@a | 매크로 a를 5번 재생 |
매크로 예제
qa " start recording into a
I// " insert // at line start
Esc j " return to normal, move down
q " stop recording
10@a " comment next 10 lines
설정
일반 옵션
:set number " show line numbers
:set relativenumber " relative line numbers
:set tabstop=4 " tab width
:set expandtab " spaces instead of tabs
:set ignorecase " case-insensitive search
표시 및 동작
:set wrap / nowrap " toggle line wrapping
:set hlsearch " highlight search matches
:set incsearch " incremental search
:set cursorline " highlight current line
:syntax on " enable syntax highlighting
파일 작업
저장 및 종료
| :w | 저장 |
| :w file | 다른 이름으로 저장 |
| :q | 종료 (저장 안 됐으면 실패) |
| :q! | 저장 없이 종료 |
| :wq / :x / ZZ | 저장 후 종료 |
| :wa | 모든 버퍼 저장 |
| :qa | 모든 버퍼 종료 |
파일 정보 및 외부
| Ctrl+g | 파일 정보 표시 |
| :!cmd | 셸 명령 실행 |
| :r !cmd | 명령 출력 삽입 |
| :r file | 파일 내용 삽입 |
텍스트 객체
내부 및 주변 객체
| iw / aw | 단어 내부 / 주변 |
| is / as | 문장 내부 / 주변 |
| ip / ap | 단락 내부 / 주변 |
| i" / a" | 큰따옴표 내부 / 주변 |
| i' / a' | 작은따옴표 내부 / 주변 |
| i( / a( | 괄호 내부 / 주변 |
| i{ / a{ | 중괄호 내부 / 주변 |
| it / at | HTML 태그 내부 / 주변 |
자주 쓰는 조합
ciw " change inner word
di" " delete inside quotes
ya{ " yank around braces
vip " select inner paragraph
마크 및 점프
마크
| m{a} | 커서 위치에 마크 a 설정 |
| 'a | 마크 a의 줄로 이동 |
| `a | 마크 a의 정확한 위치로 이동 |
| :marks | 모든 마크 목록 |
점프 목록
| Ctrl+o | 이전 위치로 이동 |
| Ctrl+i | 다음 위치로 이동 |
| :jumps | 점프 목록 표시 |
| '' | 마지막 점프 위치로 이동 |