Vim 명령어, 개념 총 정리 및 예제 (8.0) ( 2019.11.13 업데이트 )

개요

인터넷에서 항상 검색을 하다보면 방법들이 너무 파편화 되어있어서 매번 찾기 귀찮음에, 한 번에 모든 걸 최대한 정리해보고자 한다. Ctrl + F로 쉽게 찾을 수 있다.

  • 숫자를 입력해야 한다면 <숫자> 이렇게 표기한다.
  • 문자 하나를 입력해야 한다면 <문자> 이렇게 표기한다.
  • 대문자인 명령어는 Shift와 조합한다.
  • Ctrl 을 사용하는 단축키는 대문자로 표기한다. 즉 CTRL-V 이런 식으로 표기한다. 마찬가지로 CTRL-^Ctrl + 6을 의미한다.
  • 일부 편집 기능은 탐색 동작과 함께 사용할 수 있다. 예를 들어 yG 하면 현재 커서로부터 파일의 끝까지 복사하라는 뜻이다.
  • 비주얼 모드란 선택할 수 있는 모드이며, 각종 이동(탐색) 명령과 편집 명령을 활용할 수 있다. “선택 시”일 때의 선택은 비주얼 모드에서의 선택을 의미한다.
  • 도움말(:h)은 영어이긴 하지만 정말 확실한 도움이 되므로 영어가 된다면 적극 활용하도록 한다.

방향 용어 정리

방향 용어는 굉장히 헷갈린다. 한국어에서는 앞으로 얼마나 남았지?라는 말에서 이 다가올 미래, 즉 지금 시점으로 뒤(next)에 일어날 것들을 지칭하는 말이나, 이 문서에서는 그런 뜻으로 사용하지 않는다. 이란 말은 앞서 무슨 일이 있었지?와 같이 이전(prev)을 뜻하도록 한다.

뒤로 (후방)문서의 끝 쪽으로 향하는 것.
앞으로 (전방)문서의 처음 쪽으로 향하는 것.
다음문서 뒤로 가는 것.
이전문서 앞으로 가는 것.

모드 전환

기본적으로 명령 모드가 가장 기본 모드이고, 다른 모드로 갈때 명령 모드에서 이동한다. 예를 들어 삽입 모드에서 비주얼 모드로 가고 싶다면 <Esc>로 명령 모드로 전환한 후 v로 비주얼 모드로 전환한다.

명령설명
<Esc>명령 모드로 전환
:명령행 모드로 전환 (이후 화면 아래쪽에서 명령을 적을 수 있음)
v비주얼 모드로 전환
V비주얼 라인 모드로 전환
<CTRL-V>비주얼 블럭 모드로 전환
Q실행 모드 (명령행 모드를 연속으로 하기)
R수정 모드 (Replace 모드. 기존 커서의 문자를 삭제하면서 문자를 입력함.)
I삽입 모드 (행의 제일 앞)
i삽입 모드 (커서 한 칸 앞)
a삽입 모드 (커서)
A삽입 모드 (행의 제일 뒤)
O삽입 모드 (행 위에 한 줄을 추가함)
o삽입 모드 (행 아래에 한 줄을 추가함)
S, cc행 삭제 후 삽입 모드
s삭제 후 삽입 모드
c삭제 후 삽입 모드 (동작 활용)
C행 끝까지 삭제 후 삽입 모드

다른 명령과 상호 작용

명령설명
<숫자><명령><명령>을 숫자만큼 반복
.최근에 수행한 명령을 반복
q<문자>매크로 기록
@<문자>q로 기록한 매크로 실행

탐색

명령 설명
h ← (숫자 활용)
j ↓ (숫자 활용)
k ↑ (숫자 활용)
l → (숫자활용)
^ 행의 처음으로 이동 (공백 제외)
0 행의 처음으로 이동 (공백 포함)
$ 행의 끝으로 이동
+ 다음 행으로 이동
- 이전 행으로 이동
<숫자>G, :<숫자> 해당 행으로 이동
G 파일 끝으로 이동
gg 파일 처음으로 이동
H 현재 화면의 최상단으로 이동
M 현재 화면의 가운데로 이동
L 현재 화면의 최하단으로 이동
W 다음 단어로 이동 (커서 – 단어 첫 글자) (공백으로만 구분) (숫자 활용)
w 다음 단어로 이동 (커서 – 단어 첫 글자) (공백, 특수문자 등으로 구분) (숫자 활용)
E 다음 단어로 이동 (커서 – 단어 끝 글자) (공백으로만 구분) (숫자 활용)
e 다음 단어로 이동 (커서 – 단어 끝 글자) (공백, 특수문자 등으로 구분) (숫자 활용)
B 이전 단어로 이동 (커서 – 단어 첫 글자) (공백으로만 구분) (숫자 활용)
b 이전 단어로 이동 (커서 – 단어 첫 글자) (공백, 특수문자 등으로 구분) (숫자 활용)
m<문자> 표식(북마크) 설정
`<문자> 표식(북마크)의 정확한 위치로 이동
'<문자> 표식(북마크)이 있는 행의 제일 앞으로 이동
% 해당 커서의 짝이 되는 괄호({})로 이동
<ENTER> 다음 행의 처음으로 이동
( 문장의 시작으로 이동
) 문장의 끝으로 이동
{ 문단의 시작으로 이동
} 문단의 끝으로 이동
<숫자>_ <숫자> -1 만큼 다음 행으로 이동
<숫자>| <숫자>의 열 만큼 이동
  • w,e,b는 W,E,B와 달리 단어구분을 공백( ) 뿐만 아니라 다양한 특수문자('"(){}[]) 등으로 단어를 구분짓는다.

검색 및 치환

명령설명
#현재 커서의 단어를 이전 검색
*현재 커서의 단어를 다음 검색
/아래로 검색 /정규식<Enter>
?위로 검색 ?정규식<Enter>
n계속 검색 (? /)
N반대 방향으로 검색 (? /)
r<문자>커서의 문자를 해당 문자로 치환. <선택>시 포함된 모든 문자 각각에 대해서 적용.
T<문자>전방으로 글자 검색 (커서 – 한 칸 다음) (하나의 행에서만 작동)
t<문자>후방으로 글자 검색 (커서 – 한 칸 이전) (하나의 행에서만 작동)
F<문자>전방으로 글자 검색 (커서 – 해당 글자) (하나의 행에서만 작동)
f<문자>후방으로 글자 검색 (커서 – 해당 글자) (하나의 행에서만 작동)
;t T f F 계속 수행 (하나의 행에서만 작동)
,t T f F 반대 방향으로 계속 수행 (하나의 행에서만 작동)
&:s 명령 반복 (아래 :s 참조)

편집 및 클립보드

  • 기본적으로 삭제할 때에는 그냥 삭제되지 않고 클립보드에 저장된다. 즉, vim에서의 삭제는 일반적으로 생각되는 잘라내기와 같다.
명령 설명
Y, yy, :y 행 복사
y 복사 (동작 활용)
U 행 단위 실행 취소
u 실행 취소 (Undo)
<CTRL-R> 다시 실행 (Redo)
D 현재 커서로부터 행의 끝까지 삭제
d 삭제 (동작 활용)
dd, :d 현재 행 삭제
X 커서 바로 이전 문자 삭제
x 커서 문자 삭제
CTRL-A 현재 커서 위치를 숫자로 인식하여 1 증감 (숫자 가능)
CTRL-X 현재 커서 위치를 숫자로 인식하여 1 감소 (숫자 가능)
>> 현재 행 포함 아래 방향으로 <숫자>행 들여쓰기
> 동작 들여쓰기
<< 현재 행 포함 아래 방향으로 <숫자>행 내어쓰기
< 동작 내어쓰기
"<문자><명령> 명령을 하기 전 클립보드<문자>를 지정하고 명령 수행.
J 현재 행을 다음 행과 합치기.
"ay$ 현재 커서부터 행의 끝까지 a 레지스터에 복사

Text Object Selection

y, d, c는 동작(모션)을 활용하는 명령어다. 모션을 활용할 때 특별한 방법이 있는데, 현재 커서를 기준으로 단어, 블록, 문단 등을 선택할 수 있는 기능이다. 예를 들어 diw를 하게 되면 현재 커서 기준의 단어를 삭제할 수 있어 더 편리해진다.

아래 설명에서도 보이겠지만, a는 구분자까지 포함하는 경향이 있고, i는 구분자 안에 있는 내용에 대해서만 적용한다. 다시 한 번 말하지만, 아래 내용은 꼭 y, d, c 등의 동작(모션)을 활용하는 명령어와 함께 사용하여야 한다!

명령어 설명
aw 공백 포함 단어(word) (공백, 특수문자 등으로 구분)
iw 공백 미포함 단어(word) (공백, 특수문자 등으로 구분)
aW 공백 포함 단어(word) (공백으로만 구분)
iW 공백 미포함 단어(word) (공백으로만 구분)
a], a[ [] 블록 ([] 포함)
i], i[ [] 블록 ([] 미포함)
{}()"'bB 위와 동일하게 적용 (b(), B{}를 의미)
as, is 문장(sentence)
ap, ip 문단(paragraph)

파일

명령설명
:w저장
:q종료 (저장되어 있을 때만 동작함)
ZZ, :wq, :x저장 후 종료
ZQ, :q!저장하지 않고 종료
:e fo.txtfo.txt 파일 열기
:e .현재 디렉토리 탐색 (netrw) (다른 폴더경로도 지정 가능)
파일 선택후 <Enter> 누르면 해당 파일 열림.
gf현재 커서의 단어를 파일명으로 인식하여 파일 열기
CTRL-W gf현재 커서의 단어를 파일명으로 인식하여 새 탭으로 파일 열기
CTRL-^이전에 열었던 파일 다시 열기
:ls최근 연 파일 목록 보기 (버퍼) (vim을 종료할 때까지 유지)
:b숫자해당 숫자의 파일 (버퍼) 열기

화면 / 창 제어

명령설명
CTRL-W s, :sp현재 창을 두 개의 수평 창으로 분할

CTRL-W v, :vs
현재 창을 두 개의 수직 창으로 분할
CTRL-W w창 간 전환
CTRL-E스크롤 한 칸 위로
CTRL-Y스크롤 한 칸 아래로
CTRL-U
스크롤 화면의 1/2 위로
CTRL-D스크롤 화면의 1/2 아래로
CTRL-F스크롤 한 페이지 위로
CTRL-B스크롤 한 페이지 아래로
zt커서가 화면 상단에 오도록 스크롤
zz커서가 화면 가운데에 오도록 스크롤
zb커서가 화면 하단에 오도록 스크롤
:tabe 파일명새 탭으로 파일 열기
gt탭 전환
  • :sp또는 :vs 뒤에 파일명을 써서 파일을 바로 열 수 있다.

기타

명령설명
:h namename 명령에 대한 도움말 열기. (도움말 종료하려면 :q 하면 됨)
CTRL-]커서가 위치한 타이틀(태그)로 이동
CTRL-T이전 타이틀(태그)로 이동
:tags현재 이동한 타이틀(태그)들의 리스트 출력
!!<명령>외부 명령 (리눅스 등)
gf현재 커서의 단어를 파일명으로 인식하여 파일 열기
K현재 커서의 단어로 운영체제 단의 도움말을 열기 (예: echo라는 단어 위에서 K를 누르면 해당 명령어의 도움말이 열림)


inclusive와 exclusive

도움말을 살펴보다 보면 inclusive와 exclusive 명령어가 구분된다. inclusive는 어떤 이동 명령의 시작과 끝까지 버퍼에 포함시킨다는 것이고, exclusive는 이동 명령의 시작 또는 끝의 위치는 버퍼에 포함시키지 않는다는 것이다. 예를 들어 My name is dung.에서 name의 n에 커서를 두고 ye(inclusive) 하면 name이 복사되고 yw(exclusive)하면 name 가 복사된다.

명령행 모드

범위 지정

명령행 모드에서 명령을 실행하기 전에 범위를 지정할 수 있다.

명령어설명
.현재 행
$마지막 행
+숫자숫자 만큼 아래 행
-숫자숫자 만큼 위 행
%문서 전체
'<,'>비주얼 모드에서 명령행 모드로 가면 나오는 문자로, 현재 선택된 부분을 뜻함.

예제

명령어설명
:21d21번 행 삭제
:10,25d10~25번 행 삭제
:10,$d10~마지막 행까지 삭제
:%y문서 전체를 복사
:.,+20y현재 행부터 아래로 스무 행을 복사
:-10,+5d현재 행부터 위로 10행, 아래로 5행 삭제 (총 16행)
:40pu40번 행에 붙여넣기

:s

:범위s/찾을패턴/바꿀스트링/옵션

검색하여 치환하는 명령행 모드의 명령이다. 패턴에는 정규식을 사용할 수 있다. 패턴은 매 줄마다 적용된다. 시작줄과 끝 줄은 생략할 수 있다.

패턴에서 그룹 캡처시 역슬러쉬(\)를 쓴다. 그룹명은 \0이 전체이고 \1, \2부터 캡처된 순서로 불러온다.

예: :%s/<li><a href="\(.\{-}\)">\(.\{-}\)<\/a>/* [\1 \2]/g

옵션

  • g : global – 한 줄에 패턴이 여러 번 나오면 모두 바꾼다. 줄 마다의 첫 번째 패턴만 치환한다. (g를 설정하든 안하든 기본적으로 멀티라인 모드로 작동한다.)
  • i : ignore case – 대소문자 구분을 하지 않는다.
  • c : confirm – 검색된 모든 문자열에 대해서 바꿀지 말지를 물어본다.

바깥고리

다중창 관련 : https://opentutorials.org/module/522/4573

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to top