1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
|
---
category: tool
tool: vim
contributors:
- ["RadhikaG", "https://github.com/RadhikaG"]
translators:
- ["Wooseop Kim", "https://github.com/linterpreteur"]
- ["Yeongjae Jang", "https://github.com/Liberatedwinner"]
filename: LearnVim-kr.txt
lang: ko-kr
---
[Vim](http://www.vim.org)
(Vi IMproved)은 유닉스에서 인기 있는 vi 에디터의 클론입니다. Vim은 속도와 생산성을 위해
설계된 텍스트 에디터로, 대부분의 유닉스 기반 시스템에 내장되어 있습니다. 다양한 단축 키를 통해
파일 안에서 빠르게 이동하고 편집할 수 있습니다.
## Vim 조작의 기본
```
vim <filename> # vim으로 <filename> 열기
:help <topic> # (존재하는 경우에) <topic>에 대한, 내장된 도움말 문서 열기
:q # vim 종료
:w # 현재 파일 저장
:wq # 파일 저장 후 종료
ZZ # 파일 저장 후 종료
:q! # 저장하지 않고 종료
# ! *강제로* :q를 실행하여, 저장 없이 종료
:x # 파일 저장 후 종료 (:wq의 축약)
u # 동작 취소
CTRL+R # 되돌리기
h # 한 글자 왼쪽으로 이동
j # 한 줄 아래로 이동
k # 한 줄 위로 이동
l # 한 글자 오른쪽으로 이동
# 줄 안에서의 이동
0 # 줄 시작으로 이동
$ # 줄 끝으로 이동
^ # 줄의 공백이 아닌 첫 문자로 이동
Ctrl+B # 한 화면 뒤로 이동
Ctrl+F # 한 화면 앞으로 이동
Ctrl+D # 반 화면 앞으로 이동
Ctrl+U # 반 화면 뒤로 이동
# 텍스트 검색
/word # 커서 뒤에 나타나는 해당 단어를 모두 하이라이트
?word # 커서 앞에 나타나는 해당 단어를 모두 하이라이트
n # 해당 단어를 검색 후 다음으로 나타나는 위치로 이동
N # 이전에 나타나는 위치로 이동
:%s/foo/bar/g # 파일 모든 줄에 있는 'foo'를 'bar'로 치환
:s/foo/bar/g # 현재 줄에 있는 'foo'를 'bar'로 치환
:%s/foo/bar/gc # 사용자에게 확인을 요구하는, 모든 줄에 있는 'foo'를 'bar'로 치환
:%s/\n/\r/g # 한 종류의 개행 문자에서 다른 종류의 것으로 치환 (\n에서 \r로)
# 문자로 이동
f<character> # <character>로 건너뛰기
t<character> # <character>의 바로 뒤로 건너뛰기
# 예를 들어,
f< # <로 건너뛰기
t< # <의 바로 뒤로 건너뛰기
# 단어 단위로 이동
w # 한 단어 오른쪽으로 이동
b # 한 단어 왼쪽으로 이동
e # 현재 단어의 끝으로 이동
# 기타 이동 명령어
gg # 파일 맨 위로 이동
G # 파일 맨 아래로 이동
:NUM # 줄 수 NUM(숫자)로 가기
H # 화면 꼭대기로 이동
M # 화면 중간으로 이동
L # 화면 바닥으로 이동
```
## 도움말 문서
Vim은 `:help <topic>` 명령을 통해 접근할 수 있는 도움말 문서를 내장하고 있습니다.
예를 들어, `:help navigation` 은 당신의 작업 공간을 탐색하는 방법에 대한 문서를 표시합니다!
`:help`는 옵션 없이도 사용할 수 있습니다. 이는 기본 도움말 대화 상자를 표시합니다.
이 대화 상자는 Vim을 시작하는 것이 보다 용이하도록 도와줍니다.
## 모드
Vim은 **모드**의 개념에 기초를 두고 있습니다.
- 명령어 모드 - vim은 이 모드로 시작됩니다. 이동과 명령어 입력에 사용합니다.
- 삽입 모드 - 파일을 수정합니다.
- 비주얼 모드 - 텍스트를 하이라이트하고 그 텍스트에 대한 작업을 합니다.
- 실행 모드 - ':' 이후 명령어를 입력합니다.
```
i # 커서 위치 앞에서 삽입 모드로 변경
a # 커서 위치 뒤에서 삽입 모드로 변경
v # 비주얼 모드로 변경
: # 실행 모드로 변경
<esc> # 현재 모드를 벗어나 명령어 모드로 변경
# 복사와 붙여넣기
y # 선택한 객체 복사(Yank)
yy # 현재 줄 복사
d # 선택한 객체 삭제
dd # 현재 줄 삭제
p # 커서 위치 뒤에 복사한 텍스트 붙여넣기
P # 커서 위치 앞에 복사한 텍스트 붙여넣기
x # 현재 커서 위치의 문자 삭제
```
## vim의 '문법'
Vim의 명령어는 '서술어-수식어-목적어'로 생각할 수 있습니다.
서술어 - 취할 동작
수식어 - 동작을 취할 방식
목적어 - 동작을 취할 객체
'서술어', '수식어', '목적어'의 예시는 다음과 같습니다.
```
# '서술어'
d # 지운다
c # 바꾼다
y # 복사한다
v # 선택한다
# '수식어'
i # 안에
a # 근처에
NUM # (숫자)
f # 찾아서 그곳에
t # 찾아서 그 앞에
/ # 문자열을 커서 뒤로 찾아서
? # 문자열을 커서 앞으로 찾아서
# '목적어'
w # 단어를
s # 문장을
p # 문단을
b # 블록을
# 예시 '문장' (명령어)
d2w # 단어 2개를 지운다
cis # 문장 안을 바꾼다
yip # 문단 안을 복사한다
ct< # 여는 괄호까지 바꾼다
# 현재 위치에서 다음 여는 괄호까지의 텍스트를 바꾼다
d$ # 줄 끝까지 지운다
```
## 몇 가지 트릭
<!--TODO: Add more!-->
```
> # 선택한 영역 한 칸 들여쓰기
< # 선택한 영역 한 칸 내어쓰기
:earlier 15m # 15분 전의 상태로 되돌리기
:later 15m # 위의 명령어를 취소
ddp # 이어지는 줄과 위치 맞바꾸기 (dd 후 p)
. # 이전 동작 반복
:w !sudo tee % # 현재 파일을 루트 권한으로 저장
:set syntax=c # 문법 강조를 'C'의 것으로 설정
:sort # 모든 줄을 정렬
:sort! # 모든 줄을 역순으로 정렬
:sort u # 모든 줄을 정렬하고, 중복되는 것을 삭제
~ # 선택된 텍스트의 대/소문자 토글
u # 선택된 텍스트를 소문자로 바꾸기
U # 선택된 텍스트를 대문자로 바꾸기
# 텍스트 폴딩
zf # 선택된 텍스트 위치에서 폴딩 만들기
zo # 현재 폴딩 펴기
zc # 현재 폴딩 접기
zR # 모든 폴딩 펴기
zM # 모든 폴딩 접기
zi # 폴딩 접기/펴기 토글
zd # 접은 폴딩 삭제
```
## 매크로
매크로는 기본적으로 녹화할 수 있는 동작을 말합니다.
매크로를 녹화하기 시작하면, 끝날 때까지 **모든** 동작과 명령어가 녹화됩니다.
매크로를 호출하면 선택한 텍스트에 대해 정확히 같은 순서의 동작과 명령어가 실행됩니다.
```
qa # 'a'라는 이름의 매크로 녹화 시작
q # 녹화 중지
@a # 매크로 실행
```
### ~/.vimrc 설정
.vimrc 파일은 Vim이 시작할 때의 설정을 결정합니다.
다음은 ~/.vimrc 파일의 예시입니다.
```
" ~/.vimrc 예시
" 2015.10
" vim이 iMprove 되려면 필요
set nocompatible
" 자동 들여쓰기 등을 위해 파일 명으로부터 타입 결정
filetype indent plugin on
" 신택스 하이라이팅 켜기
syntax on
" 커맨드 라인 완성 향상
set wildmenu
" 대문자를 썼을 때가 아니면 대소문자 구분하지 않고 검색
set ignorecase
set smartcase
" 줄넘김을 했을 때 파일에 따른 들여쓰기가 켜져 있지 않다면
" 현재 줄과 같은 들여쓰기를 유지
set autoindent
" 좌측에 줄 번호 표시
set number
" 들여쓰기 설정 (개인 기호에 따라 변경)
" 탭 하나와 시각적으로 같을 스페이스 개수
set tabstop=4
" 편집할 때 탭 하나에 들어갈 스페이스 수
set softtabstop=4
" 들여쓰기 혹은 내어쓰기 작업(>>, <<)을 했을 때 움직일 스페이스 개수
set shiftwidth=4
" 탭을 스페이스로 변환
set expandtab
" 들여쓰기와 정렬에 자동 탭 및 스페이스 사용
set smarttab
```
### 참고 자료
[(영어) Vim 홈페이지](http://www.vim.org/index.php)
`$ vimtutor`
[(영어) vim 입문과 기초](https://danielmiessler.com/study/vim/)
[(영어) 엄마가 말해주지 않은 Vim의 어두운 구석들 (Stack Overflow 게시물)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about)
[(영어) 아치 리눅스 위키](https://wiki.archlinux.org/index.php/Vim)
|