vim을 접하게 되면서 검색을 통해 여기 저기에서 단축키나 정보를 얻었는데 항상 찾아 다니기 귀찬아서 한 번 정리를 해 보았습니다. 다 검증해 보지 않았으므로 안되는 부분도 있을 겁니다. 하지만 대부분 되겠죠? 그리고 Tab관련 단축키는 아직 정리가 안되었습니다.
1. 파일 열기 및 저장
Command |
Mode |
Description |
Remark |
vi file |
Console |
vi를 시작하여 지정한 파일 편집 |
|
vi -R file |
Console |
읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집 |
|
view file |
Console |
읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집 |
|
vimdiff <file1.c> <file2.c> |
Console |
두 파일 비교 |
|
vim –d <file1.c> <file2.c> |
Console |
두 파일 비교 |
|
:wq |
Command |
데이터를 저장하고 종료 |
|
:q |
Command |
창 닫기 |
|
:q! |
Command |
데이터를 저장하지 않고 종료 |
|
vi -r |
Console |
되살릴 수 있는 모든 파일 이름 보여 주기 |
|
vi -r file |
Console |
vi를 시작하여 지정한 파일 되살리기 |
|
:e file |
Command |
지정한 파일의 편집 |
|
:e! file |
Command |
지정한 파일의 편집, 자동 점검의 생략 |
|
:w |
Command |
원래의 파일로 데이터를 저장 |
|
:w file |
Command |
지정한 파일로 데이터를 저장 |
|
:w>> file |
Command |
지정한 파일에 데이터를 추가 |
|
<Ctrl>wf |
Normal |
커서가 있는 명칭의 파일이 분할된 창에 표시 |
|
:b1 |
Command |
1번 버퍼에 있는 파일을 편집 |
|
:b2 |
Command |
2번 버퍼에 있는 파일을 편집 |
|
|
|
|
|
2. 커서 이동
Command |
Mode |
Description |
Remark |
h |
Normal |
커서를 한 칸 왼쪽으로 이동 |
|
j |
Normal |
커서를 한 줄 아래로 이동 |
|
k |
Normal |
커서를 한 줄 위로 이동 |
|
l |
Normal |
커서를 한 칸 오른쪽으로 이동 |
|
<Backspace> |
Normal |
커서를 한 칸 왼쪽으로 이동 |
|
<Space> |
Normal |
커서를 한 칸 오른쪽으로 이동 |
|
- |
Normal |
커서를 이전 줄의 처음으로 이동 |
|
+ |
Normal |
커서를 다음 줄의 처음으로 이동 |
|
<Return> |
Normal |
커서를 다음 줄의 처음으로 이동 |
|
0 |
Normal |
커서를 현재 줄의 맨 앞으로 이동 |
|
$ |
Normal |
커서를 현재 줄의 맨 끝으로 이동 |
|
^ |
Normal |
커서를 현재 줄의 공백이나 탭이 아닌 첫 글자로 이동 |
|
w |
Normal |
커서를 다음 단어의 첫 글자로 이동 |
|
e |
Normal |
커서를 다음 단어의 끝 글자로 이동 |
|
b |
Normal |
커서를 이전 단어의 첫 글자로 이동 |
|
gg |
Normal |
편집 버퍼의 첫 줄로 건너뛰기 |
|
G |
Normal |
편집 버퍼의 마지막 줄로 건너뛰기 |
|
E |
Normal |
e와 같음(문장 부호 무시) |
|
B |
Normal |
b와 같음(문장 부호 무시) |
|
( |
Normal |
다음 문장의 처음으로 이동 |
|
) |
Normal |
이전 문장의 처음으로 이동 |
|
{ |
Normal |
다음 문단의 처음으로 이동 |
|
} |
Normal |
이전 문단의 처음으로 이동 |
|
H |
Normal |
커서를 화면 맨 위로 이동 |
|
M |
Normal |
커서를 중간으로 이동 |
|
L |
Normal |
커서를 맨 아래로 이동 |
|
<Ctrl>f |
Normal |
한 화면 아래로 이동 |
|
<Ctrl>b |
Normal |
한 화면 위로 이동 |
|
<n><Ctrl>f |
Normal |
n화면 아래로 이동 |
<n>은 숫자 |
<n><Ctrl>b |
Normal |
n화면 위로 이동 |
<n>은 숫자 |
<Ctrl>d |
Normal |
반 화면 아래로 이동 |
|
<Ctrl>u |
Normal |
반 화면 위로 이동 |
|
<n><Ctrl>d |
Normal |
n줄만큼 아래로 이동 |
<n>은 숫자 |
<n><Ctrl>u |
Normal |
n줄만큼 위로 이동 |
<n>은 숫자 |
<n>G |
Normal |
줄 번호 n으로 건너뛰기 |
<n>은 숫자 |
<Ctrl>o |
Normal |
· 이전 커서 위치로 이동
|
|
<Ctrl>i |
Normal |
다음 커서 위치로 이동 |
|
% |
Normal |
{ 에서 % 를 누르면 해당하는 } 로 이동 |
|
gd |
Normal |
변수 선언된 위치 |
|
z+. |
Normal |
현재 행을 화면 중간으로 |
|
[[ |
Normal |
현재함수의 처음으로 커서 이동 |
|
]] |
Normal |
다음함수의 처음으로 커서 이동 |
|
3. 편집
Command |
Mode |
Description |
Remark |
i |
Normal |
입력 모드로 전환, 커서 위치 앞에서 삽입 |
|
a |
Normal |
입력 모드로 전환, 커서 위치 뒤에서 삽입 |
|
I |
Normal |
입력 모드로 전환, 현재 줄의 앞에 삽입 |
|
A |
Normal |
입력 모드로 전환, 현재 줄의 끝에 삽입 |
|
o |
Normal |
입력 모드로 전환, 현재 줄의 아래에 전개 |
|
O |
Normal |
입력 모드로 전환, 현재 줄의 위에 전개 |
|
r |
Normal |
한 글자만 변경(입력 모드로 바뀌지 않음) |
|
R |
Normal |
입력하는 대로 겹쳐 써서 변경 |
|
s |
Normal |
삽입에 의해 한 단어의 변경 |
|
C |
Normal |
커서의 위치로부터 줄 끝까지 삽입 에 의한 변경 |
|
cc |
Normal |
전체 줄을 삽입에 의한 변경 |
|
S |
Normal |
전체 줄을 삽입에 의한 변경 |
|
c move |
Normal |
커서부터 move까지 삽입에 의해 변경 |
|
~ |
Normal |
대, 소문자 바꾸기 |
|
p |
Normal |
마지막으로 지워진 것을 커서의 뒤/아래에 삽입 |
|
P |
Normal |
마지막으로 지워진 것을 커서의 앞/위에 삽입 |
|
xp |
Normal |
두 문자를 바꿈 |
|
deep |
Normal |
두 단어를 바꿈 |
|
ddp |
Normal |
두 줄을 바꿈 |
|
J |
Normal |
다음 줄을 현재 줄의 뒤에 붙임 |
|
u |
Normal |
Undo, 편집 버퍼를 수정했던 마지막 명령을 취소 |
|
U |
Normal |
편집 중인 줄 전체 복구 |
|
. |
Normal |
편집 버퍼를 수정했던 마지막 명령 반복 |
|
<Ctrl>r |
Normal |
Redo, 명령어를 다시 실행 |
|
x |
Normal |
커서가 있는 문자 삭제 |
|
X |
Normal |
커서의 왼쪽 문자 삭제 |
|
D |
Normal |
커서부터 줄의 끝까지 삭제 |
|
dd |
Normal |
현재 줄의 전체 삭제 |
|
d move |
Normal |
커서부터 move까지 삭제 |
|
dG |
Normal |
커서부터 편집 버퍼의 끝까지 삭제 |
|
d1G |
Normal |
커서부터 편집 버퍼의 맨 앞까지 삭제 |
|
:line d |
Command |
지정한 줄의 삭제 |
|
:line, line d |
Command |
지정한 범위의 삭제 |
|
:line co target |
Command |
지정한 줄을 복사하여 target 줄 밑에 삽입 |
|
:line, line co target |
Command |
지정한 범위를 복사하여 target 줄 밑에 삽입 |
|
:line m target |
Command |
지정한 줄로 이동하 여 target 줄 밑에 삽입 |
|
:line, line m target |
Command |
지정한 범위로 이동하여 target 줄 밑에 삽입 |
|
:liner file |
Command |
file의 내용을 지정한 줄 다음 에 삽입 |
|
:r file |
Command |
file의 내용을 현재의 줄 다음 에 삽입 |
|
: line r !command |
Command |
command의 결과를 지정한 줄 다 음에 삽입 |
|
:r !command |
Command |
command의 결과를 현재의 줄 다 음에 삽입 |
|
:r !look pattern |
Command |
지정한 pattern으로 시작된 단 어 삽입 |
|
<Ctrl>p |
Edit |
변수나 함수 이름 입력 중 입력한 이름과 매치되는 항목의 목록이 출력 |
|
gf |
Normal |
커서가 있는 파일 이름이 path에 설정되어 있으면 해당 파일을 연다. |
|
d'c |
Normal |
커서부터 'c'까지 삭제 |
c는 marker |
dG |
Normal |
커서부터 파일의 끝까지 삭제 |
|
d1G |
Normal |
파일의 시작부터 커서까지 삭제 |
|
y'c |
Normal |
커서부터 'c'까지 복사 |
|
"xy'c |
Normal |
커서부터 'c'까지 버퍼'x'로 복사 |
|
"xp |
Normal |
버퍼'x' 붙여 넣기 |
|
4. 패턴 검색 및 치환
Command |
Mode |
Description |
Remark |
/r exp |
Normal |
지정된 정규 표현 식에 대해 앞으로 이동 |
|
/ |
Normal |
이전의 패턴에 대해 앞으로 검색을 반복 |
|
?r exp |
Normal |
지정된 정규 표현 식에 대해 뒤로 이동 |
|
? |
Normal |
이전의 패턴에 대해 뒤로 검색을 반복 |
|
n |
Normal |
/나 ? 명령에 대해 같은 방향으로 반복 |
|
N |
Normal |
/나 ? 명령에 대해 반대 방향으로 반복 |
|
:s/ old /new/ |
Command |
현재 줄의 치환 |
|
:lines /old/new/ |
Command |
지정한 줄의 치환 |
|
:line, lines /old/new/ |
Command |
지정한 범위의 치환 |
|
:%s/old/new/ |
Command |
모든 줄의 치환 |
|
:s/old/new/g |
Command |
현재 라인에서 검색하여 치환 |
|
:%s/old/new/g |
Command |
문서 전체를 범위로 하여 해당 old 문자를 new 로 치환 |
|
:%s/old/new/gc |
Command |
문서 전체 범위에서 문자열 치환하기 전에 사용자에게 확인 |
|
Mark |
|
Description |
Remark |
. |
|
뉴라인을 제외한 모든 단일 문자와 대응 |
|
* |
|
영 또는 그 이상의 선행 문자와 대응 |
|
<Ctrl> |
|
줄의 시작과 대응 |
|
$ |
|
줄의 끝과 대응 |
|
\< |
|
단어의 시작과 대응 |
|
\> |
|
단어의 끝과 대응 |
|
[ ] |
|
묶여진 문자중의 하나와 대응 |
|
[<Ctrl> ] |
|
묶여진 문자를 제외한 아무것하고나 대응 |
|
\ |
|
이어지는 기호를 문자 그대로 해석 |
|
5. 설정
Command |
Mode |
Description |
Remark |
:set ruler |
Command |
화면 하단에 커서 라인, 상태 등을 표시 |
|
:set ts=8 |
Command |
tab 사이즈를 8로 지정 |
|
:set sts=4 |
Command |
tab 실제 4 간격으로 이동할지를 지정 |
|
:ts [tabstop] |
Command |
tab 사이즈를 지정 |
|
:sts [softtabstop] |
Command |
tab 실제 얼마만큼의 간격으로 이동할지를 지정 |
|
:set number |
Command |
내부 줄 번호 디스플레이 |
|
:set nonumber |
Command |
내부 줄 번호 디스플레이 않기 |
|
:set wm= n |
Command |
오른쪽으로 n문자 위치에서 자동적으로 줄 나눔 |
|
:set nobackup |
Command |
VIM Back Up file 만들지 않기 |
|
:set backup |
Command |
VIM Back Up file 만들기 |
|
:map g lG |
Command |
g가 lG와 같도록 매크로 정의 |
|
:ab short long |
Command |
short를 long에 대한 약어 로 변경 |
|
:ab |
Command |
현재 약어 목록을 표시 |
|
:una short |
Command |
약어 short를 표시 |
|
6. 창 분할
Command |
Mode |
Description |
Remark |
<Ctrl>wn |
Normal |
새로운 분할 창을 생성한다. |
|
<Ctrl>ws |
Normal |
현재 파일을 수평 분할 창으로 나눔 |
|
<Ctrl>wv |
Normal |
현재 파일을 수직 분할 창으로 나눔 |
|
<Ctrl>wc |
Normal |
창 닫기 |
|
<Ctrl>wq |
Normal |
창 닫기 |
|
<Ctrl>wo |
Normal |
현재 창을 제외한 모든 창 닫기 |
|
<Ctrl>ww |
Normal |
창들간을 순차적으로 이동한다. |
|
<Ctrl>wj |
Normal |
아래 창으로 간다 |
|
<Ctrl>wk |
Normal |
위 창으로 간다 |
|
<Ctrl>wh |
Normal |
왼쪽 창으로 간다. |
|
<Ctrl>wl |
Normal |
오른쪽 창으로 간다. (소문자 L) |
|
<Ctrl>e FILE_NAME |
Normal |
나누어진 창에서 다른 파일을 열기 |
|
<Ctrl>w<n>+ |
Normal |
수평분할 창에서 N만큼 증가 |
<n>은 숫자, 숫자 제외 시 1로 간주 |
<Ctrl>w<n>- |
Normal |
수평분할 창에서 N만큼 감소 |
<n>은 숫자, 숫자 제외 시 1로 간주 |
<Ctrl>w<n>> |
Normal |
수직분할 창에서 N만큼 오른쪽으로 증가 |
<n>은 숫자, 숫자 제외 시 1로 간주 |
<Ctrl>w<n>< |
Normal |
수직분할 창에서 N만큼 왼쪽으로 증가 |
<n>은 숫자, 숫자 제외 시 1로 간주 |
<Ctrl>w<n>| |
Normal |
창 너비를 숫자 칸수로 만든다. |
L아님, 숫자 제외 시 최대 크기 |
<Ctrl>w= |
Normal |
분할 창의 크기를 균등하게 변경 |
|
:new |
Command |
새 버퍼를 생성하면서 창을 연다. |
|
:split |
Command |
창을 가로로 나눈다 |
|
:vsplit |
Command |
창을 세로로 나눈다 |
|
:vs |
Command |
창 분할 |
|
:split file |
Command |
새 창에서 파일을 연다 |
|
:<n>split |
Command |
창의 크기를 숫자 줄만큼으로 지정하여 연다. |
<n>은 숫자 |
:20vs./ |
Command |
현재 위치 디렉토리를 수평 분할 창에 표시 |
20 -> 창의 사이즈, vs ->vertical screen |
<Ctrl>wt or <Ctrl>wb | Normal | 분할 창에서 커서를 최상단(Top)또는 최하단(Bottom)으로 이동 | |
<Ctrl>wH,J,K or L | Normal | 현재 커서가 있는 분할 창을 커서 방향에 따라 이동한다. | H,J,K,L은 대문자 |
:qa | Command | 모든 창 닫기 | |
7. Visual Mode
Command |
Mode |
Description |
Remark |
v |
Normal |
블록 지정하기 |
|
zf |
Visual |
지정된 영역이 폴딩 |
블럭 모드에서 |
zo |
Visual |
폴딩에서 다시 원상태 |
|
<Shift>v |
Normal |
줄 단위 비주얼 모드 |
|
<Ctrl>v |
Normal |
블록 단위 비주얼 모드 |
윈도우에서는 <Ctrl> q |
~ |
Visual |
대문자 <-> 소문자 전환 |
|
J |
Visual |
줄을 합침 |
|
U |
Visual |
대문자로 변환 |
|
u |
Visual |
소문자로 변환 |
8. Marker
Command |
Mode |
Description |
Remark |
ma |
Normal |
원하는 위치를 마킹 하기, a 라는 마킹 이름으로 현재 커서의 위치가 저장 |
a 대신에 a-z 까지 입력가능 |
mA |
Normal |
현재 파일에서만의 이동이 아닌 전역적으로 다른 파일에서도 이동가능 |
A 대신에 A-Z까지 입력가능 |
:marks |
Command |
현재 마킹된 정보 확인 |
|
'a 또는 'A |
Normal |
마킹된 곳으로 이동 |
|
9. Macro
Command |
Mode |
Description |
Remark |
qa 기록 q |
Normal |
매크로 기록 |
|
10@a |
Normal |
매크로 실행 |
앞에 10은 횟수 |
10. Tab
Command Mode Description Remark :tabnew Command 새로운 탭 생성
11. 기타
Command |
Mode |
Description |
Remark |
<Ctrl>L |
Normal |
현재 화면을 다시 디스플레이 하기 |
|
:!Command |
Command |
vi를 중단하고 지정한 셸 명령을 실행 |
|
:!! |
Command |
vi를 중단하고 이전의 셸 명령을 실 행 |
|
:sh |
Command |
vi를 중단하고 셸을 실행 |
|
:!csh |
Command |
vi를 중단하고 새로운 C-셸을 실행 |
|
:ls |
Command |
버퍼의 내용 보기 |
|
:find <filename> |
Command |
파일을 찾는다. |
|
:grep /S main *.c |
Command |
지정된 파일에서 문자열 찾기 |
여기서 /S 는 sub directory를 의미 |
:clist |
Command |
검색된 내역 list up |
|
:copen |
Command |
창을 나누어서 open |
|
:%!xxd |
Command |
Hexa editing |
|
:%!xxd -r |
Command |
Hexa editing |
|
n !! command |
Normal |
n번 줄에서 command의 실행 |
|
! move command |
Normal |
커서부터 move까지 command 실행 |
|
! move fmt |
Normal |
커서부터 move까지 줄들을 형식 맞추기 |
|
z+. |
Normal |
현재 행을 화면 중간으로 |
|
"[a]yw ==> "[a]p |
Normal |
named buffer 사용 |
|
ZZ |
Normal |
창 닫기 |
|
gg=G |
Normal |
소스 전체가 자동 정렬 |
only GVIm |
= |
Normal |
v 를 눌러 영역을 설정한 후 자동정렬 |
only GVIm |
환경 설정
- 명령 모드나 vim 설정(.vimrc)에서 설정가능
set complete
set nocompatible - "VI 오리지널과 호환하는 모드를 사용하지 않음
set backspace=indent,eol,start - "들여쓰기,줄의 끝/시작에서
Backspace - 이전 줄과 연결
set nobackup - "백업 파일 생성하지 않음
set backup - "백업파일 만들기
set backupdir=~/.vim/backup - "백업 파일 저장 디렉토리 지정
set history=1000 - "편집 명령 기록 1000개까지 저장
set visualbell - 경고음(beep) 대신 한번 깜빡임으로 경고 사용
set mousehide - "타이핑시 마우스 커서 감추기
set title - "제목표시줄에 파일명 표시
set background=dark - "배경을 어두운 색으로 지정
colorscheme desert - "색깔 표현 방식을 desert로 설정
filetype on - "파일의 종류를 자동으로 인식
syntax on - "문법 색상 강조
set nu - "편집창에 줄 번호 출력
set showmatch - "괄호 닫기 할 때 열었던 괄호와 매칭 확인
set incsearch - "키워드를 입력할때마다 검색하는 점진검색 사용
set hlsearch - "검색어 색상 강조
set nows - "검색시 파일 끝에서 처음으로 되돌리기 안함
set enc-euc-kr - "인코딩 한글로 지정. 한글 삭제시 한글 단위로 삭제(2bytes)
set nowrap - "자동 줄바꿈 사용하지 않음
set wrap - "자동 줄바꿈
set showcmd - "현재명령 보이기, r등의 명령 사용시
set showmode - "삽입, 명령, 블럭모드등의 현재모드 표시
set ruler - "커서가 위치한 열과 행을 표시
set cindent - "C 스타일 들여쓰기 설정
set autoindent - "자동 들여쓰기 설정
set smartindent - "좀 더 똑똑한 들여쓰기
set shiftwidth=4 - "들여쓰기 간격 설정
set tabstop=4 - "탭 간격 설정
set softtabstop=2 - "tab 간격을 공백으로 변환하면, 삭제시 두칸단위로 삭제
set expandtab - "탭 문자를 공백문자로 바꿔 줌
set scs - "똑똑한 대소문자 구별 기능 사용
set ignorecase - "검색, 편집, 치환 시에 대소문자 구분 않는다.
set path=<path1>, <path2> - “path 설정하기, path에 지정된 path의 범위 내에서 파일 사이의 이동이 가능
set path+=<path3> - “path 설정 추가하기
단축 키 설정하기
- 명령 모드나 vim 설정(.vimrc)에서 설정가능
map <F1> :!bash<CR> <F1> 기능키를 편집 중 쉘로 빠지는 명령으로 사용
map ,1
:b!1<CR>
1을 입력하면 버퍼1(b1)에 편집 화면으로 이동
map <C-c> :’a,‘b w! ~/tmp/tmp<CR>
map <C-x> :’a,’b w! ~/tmp/tmp<CR> :’a,’b d<CR>
map <C-v> :r ~/tmp/tmp<CR>
* mark를 이용한 <Ctrl+c>,
<Ctrl+x>, <Ctrl+v> 기능 설정
.vimrc
map <C-c> :’a,‘b w! ~/tmp/tmp<CR>
map <C-x> :’a,’b w! ~/tmp/tmp<CR> :’a,’b d<CR>
map <C-v> :r ~/tmp/tmp<CR>