mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-01 00:43:00 +03:00
270 lines
9.4 KiB
Markdown
270 lines
9.4 KiB
Markdown
---
|
|
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)
|