개요
인터넷에서 항상 검색을 하다보면 방법들이 너무 파편화 되어있어서 매번 찾기 귀찮음에, 한 번에 모든 걸 최대한 정리해보고자 한다. 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 로 기록한 매크로 실행 |
탐색
- 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.txt | fo.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 name | name 명령에 대한 도움말 열기. (도움말 종료하려면 :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
가 복사된다.
명령행 모드
범위 지정
명령행 모드에서 명령을 실행하기 전에 범위를 지정할 수 있다.
명령어 | 설명 |
. | 현재 행 |
$ | 마지막 행 |
+숫자 | 숫자 만큼 아래 행 |
-숫자 | 숫자 만큼 위 행 |
% | 문서 전체 |
'<,'> | 비주얼 모드에서 명령행 모드로 가면 나오는 문자로, 현재 선택된 부분을 뜻함. |
예제
명령어 | 설명 |
:21d | 21번 행 삭제 |
:10,25d | 10~25번 행 삭제 |
:10,$d | 10~마지막 행까지 삭제 |
:%y | 문서 전체를 복사 |
:.,+20y | 현재 행부터 아래로 스무 행을 복사 |
:-10,+5d | 현재 행부터 위로 10행, 아래로 5행 삭제 (총 16행) |
:40pu | 40번 행에 붙여넣기 |
:s
:범위s/찾을패턴/바꿀스트링/옵션
검색하여 치환하는 명령행 모드의 명령이다. 패턴에는 정규식을 사용할 수 있다. 패턴은 매 줄마다 적용된다. 시작줄과 끝 줄은 생략할 수 있다.
패턴에서 그룹 캡처시 역슬러쉬(\)를 쓴다. 그룹명은 \0이 전체이고 \1, \2부터 캡처된 순서로 불러온다.
예: :%s/<li><a href="\(.\{-}\)">\(.\{-}\)<\/a>/* [\1 \2]/g
옵션
- g : global – 한 줄에 패턴이 여러 번 나오면 모두 바꾼다. 줄 마다의 첫 번째 패턴만 치환한다. (g를 설정하든 안하든 기본적으로 멀티라인 모드로 작동한다.)
- i : ignore case – 대소문자 구분을 하지 않는다.
- c : confirm – 검색된 모든 문자열에 대해서 바꿀지 말지를 물어본다.