
1편에서 모드 개념, 이동, 기본 편집, 저장과 종료를 다뤘습니다. 2편에서는 실제로 쓸 때 자주 필요한 검색과 치환, Visual 모드, 분할 화면, 그리고 ~/.vimrc에 넣어두면 편한 설정들을 정리합니다.
검색
기본 검색
Normal 모드에서 /를 누르면 하단에 검색창이 열립니다. 검색어를 입력하고 Enter를 누르면 첫 번째 결과로 이동합니다.
/패턴 아래 방향으로 검색
?패턴 위 방향으로 검색
n 다음 결과로 이동 (검색 방향 그대로)
N 이전 결과로 이동 (검색 방향 반대)
커서 단어 검색
커서가 단어 위에 있을 때 *나 #을 누르면 해당 단어를 바로 검색합니다.
* 커서 위 단어를 아래 방향으로 검색
# 커서 위 단어를 위 방향으로 검색
변수명이나 함수명을 찾을 때 /로 직접 치는 것보다 훨씬 빠릅니다.
검색 하이라이트 끄기
검색 후 하이라이트가 남아 있을 때 :noh(또는 :nohlsearch)로 끕니다.
:noh
매번 치기 귀찮으면 ~/.vimrc에 단축키로 등록해두는 게 편합니다. 이건 설정 섹션에서 다시 나옵니다.
치환 (substitute)
:s 명령어로 텍스트를 치환합니다. 구조는 이렇습니다.
:[범위]s/찾을패턴/바꿀내용/[플래그]
자주 쓰는 형태들입니다.
:s/old/new 현재 줄, 첫 번째 old만 교체
:s/old/new/g 현재 줄, old 전체 교체
:%s/old/new/g 파일 전체, old 전체 교체
:%s/old/new/gc 파일 전체, 하나씩 확인하며 교체 (c = confirm)
:10,20s/old/new/g 10~20번째 줄에서 교체
/gc에서 c 옵션을 붙이면 하나씩 y/n/a/q로 확인하면서 교체할 수 있습니다. 잘못 바꾸면 안 되는 경우에 씁니다.
정규식도 됩니다.
:%s/\s\+$// 줄 끝 공백 전체 제거
:%s/^/# / 모든 줄 앞에 "# " 추가
:%s/foo\|bar/baz/g foo 또는 bar를 baz로 교체
Visual 모드
Visual 모드는 범위를 선택해서 명령어를 적용하는 모드입니다. 세 가지 종류가 있습니다.
v 문자 단위 선택 (일반 Visual)
V 줄 단위 선택 (Visual Line)
Ctrl+v 블록 단위 선택 (Visual Block)
선택한 뒤 할 수 있는 것들입니다.
d 선택 범위 삭제
y 선택 범위 복사
c 선택 범위 삭제 후 Insert 모드
> 들여쓰기 (indent)
< 내어쓰기 (outdent)
= 자동 들여쓰기 정렬
~ 대소문자 반전
Visual Block이 특히 유용한 경우
여러 줄에 동시에 같은 내용을 삽입하거나, 세로 방향으로 특정 컬럼만 편집할 때 쓸 만합니다.
예를 들어 여러 줄의 맨 앞에 #을 추가하려면:
Ctrl+v로 블록 선택 시작j로 원하는 줄만큼 아래로 이동해서 범위 지정I로 Insert 모드 진입#입력Esc
그러면 선택했던 모든 줄 앞에 #이 추가됩니다.
들여쓰기
>> 현재 줄 들여쓰기
<< 현재 줄 내어쓰기
3>> 세 줄 들여쓰기
gg=G 파일 전체 자동 들여쓰기 정렬
Visual 모드에서 범위를 선택하고 >나 <를 쓰면 선택된 범위에 적용됩니다. 들여쓰기를 여러 번 하려면 3>처럼 숫자를 붙입니다.
분할 화면
창 분할
:sp 파일명 수평 분할 (위아래)
:vsp 파일명 수직 분할 (좌우)
:sp 파일명 없이 쓰면 현재 파일을 분할
창 간 이동
Ctrl+w h 왼쪽 창으로
Ctrl+w j 아래 창으로
Ctrl+w k 위 창으로
Ctrl+w l 오른쪽 창으로
Ctrl+w w 다음 창으로 순환
창 크기 조절
Ctrl+w + 현재 창 높이 증가
Ctrl+w - 현재 창 높이 감소
Ctrl+w > 현재 창 너비 증가
Ctrl+w < 현재 창 너비 감소
Ctrl+w = 모든 창 동일한 크기로
창 닫기
:q 현재 창 닫기
:only 현재 창만 남기고 나머지 닫기
Ctrl+w c 현재 창 닫기
버퍼와 탭
vim에서는 파일 하나하나를 "버퍼"라고 합니다. 탭은 그 버퍼를 보여주는 레이아웃 단위입니다.
버퍼
:e 파일명 파일 열기 (새 버퍼)
:ls 열린 버퍼 목록
:b 번호 해당 번호 버퍼로 전환
:b 파일명 파일명으로 버퍼 전환
:bd 현재 버퍼 닫기
:bn 다음 버퍼
:bp 이전 버퍼
탭
:tabnew 파일명 새 탭으로 파일 열기
:tabn 다음 탭
:tabp 이전 탭
gt 다음 탭 (Normal 모드)
gT 이전 탭
:tabclose 현재 탭 닫기
마크
현재 위치를 저장해두고 나중에 바로 돌아올 수 있습니다.
ma 현재 위치를 'a'라는 이름으로 저장
'a 마크 'a'가 있는 줄로 이동
`a 마크 'a'의 정확한 위치로 이동
'' 직전에 있던 위치로 이동
:marks 저장된 마크 목록
소문자 마크(a
z)는 버퍼 내에서만 유효하고, 대문자 마크(A
Z)는 다른 파일 간에도 유지됩니다.
유용한 설정 (~/.vimrc)
vim의 기본 설정은 상당히 불편합니다. 아래 정도만 넣어둬도 훨씬 쓰기 편해집니다.
" 줄 번호 표시
set number
" 상대적 줄 번호 (현재 줄 기준으로 거리 표시)
" 5j, 3k 같은 이동 명령어 쓸 때 편함
set relativenumber
" 검색 하이라이트
set hlsearch
" 검색 중 실시간 이동
set incsearch
" 대소문자 구분 없이 검색 (대문자 포함 시 자동으로 구분)
set ignorecase
set smartcase
" 탭을 스페이스로
set expandtab
set tabstop=4
set shiftwidth=4
" 자동 들여쓰기
set autoindent
set smartindent
" 파일 하단에 상태바 표시
set laststatus=2
" 붙여넣기 시 자동 들여쓰기 비활성화 (터미널에서 paste할 때 유용)
set pastetoggle=<F2>
" 검색 하이라이트 끄기 단축키
nnoremap <leader>/ :nohlsearch<CR>
" 저장 단축키 (Ctrl+s)
nnoremap <C-s> :w<CR>
inoremap <C-s> <Esc>:w<CR>a
이 중에서 set number와 set hlsearch, set incsearch는 최소한으로 넣어두면 확실히 편합니다. pastetoggle은 외부에서 복사한 내용을 터미널에 붙여넣을 때 들여쓰기가 계단식으로 망가지는 걸 막아줘서 실용적입니다.
자주 쓰는 조합 모음
이론보다 실제로 쓰이는 패턴을 몇 가지 보는 게 더 빨리 손에 붙습니다.
ggVG 파일 전체 선택 (gg로 처음 → V로 줄 선택 → G로 파일 끝)
ggVG= 파일 전체 들여쓰기 정렬
gg=G 위와 같음 (더 짧은 버전)
:%y+ 파일 전체를 시스템 클립보드에 복사
ci" 큰따옴표 안의 내용 삭제 후 Insert (change inside")
ci( 괄호 안의 내용 삭제 후 Insert
di[ 대괄호 안의 내용만 삭제
* 커서 위 단어 검색 후 n으로 순회
:%s/\n/\r/g 줄바꿈 문자 일괄 처리
:g/pattern/d pattern이 포함된 줄 전체 삭제
:v/pattern/d pattern이 포함되지 않은 줄 전체 삭제 (:g의 반대)
ci"나 di[ 같은 Text Object 명령어는 처음 보면 낯선데, 익숙해지면 vim에서 가장 빠른 편집 방법 중 하나입니다. c(change) 또는 d(delete) + i(inside) 또는 a(around) + 범위 문자(" ' ( [ { w p)로 조합합니다.
정리 표
| 분류 | 명령어 | 동작 |
|---|---|---|
| 검색 | /패턴 ?패턴 |
아래 / 위 방향 검색 |
| 검색 | n N |
다음 / 이전 결과 |
| 검색 | * # |
커서 단어 검색 |
| 검색 | :noh |
하이라이트 끄기 |
| 치환 | :%s/old/new/g |
파일 전체 치환 |
| 치환 | :%s/old/new/gc |
확인하며 치환 |
| Visual | v V Ctrl+v |
문자 / 줄 / 블록 선택 |
| 들여쓰기 | >> << |
들여쓰기 / 내어쓰기 |
| 들여쓰기 | gg=G |
파일 전체 정렬 |
| 분할 | :sp :vsp |
수평 / 수직 분할 |
| 분할 | Ctrl+w h/j/k/l |
창 이동 |
| 버퍼 | :ls :b n |
버퍼 목록 / 전환 |
| 탭 | :tabnew gt gT |
새 탭 / 다음 / 이전 |
| 마크 | ma 'a |
위치 저장 / 이동 |
| Text Object | ci" di( |
범위 내 변경 / 삭제 |
'블로그, 컴퓨터 > Cheatsheets' 카테고리의 다른 글
| Neovim 설정 정리 (2편) — lazy.nvim, LSP, 주요 플러그인 (0) | 2026.05.25 |
|---|---|
| Neovim 설정 정리 (1편) — init.lua 구조와 Lua 기초 (0) | 2026.05.25 |
| Vim 명령어 정리 (1편) — 모드, 이동, 편집, 저장 (0) | 2026.05.24 |
| 리눅스 터미널 명령어 정리 (2편) — 권한, 프로세스, 네트워크, 검색 & 파이프 (0) | 2026.05.23 |
| 리눅스 터미널 명령어 정리 (1편) — 파일 탐색, 관리, 내용 확인 (0) | 2026.05.23 |