가. vi 편집기란?
vi는 리눅스 환경에서 가장 많이 쓰이는 문서 편집기로 윈도우즈의 메모장(notepad)과 같다고 생각하면 된다.
※ 윈도우즈는 GUI(그래픽) 환경으로 마우스 조작이 가능하여 누구든지 쉽게 사용할 수 있으나, 리눅스는 CLI(텍스트) 환경이기 때문에 단축키, 명령어 등을 알아야만 편집을 할 수 있으므로 많은 어려움이 동반된다.
나. vi 편집기 모드
vi 편집기는 4가지 모드로 구성돼 있으며 특정 키를 입력해 자유롭게 모드를 변경할 수 있다.
vi 편집기 모드 | |
종류 | 설명 |
명령모드(Command mode) | 명령어를 입력해 vi의 다양한 기능을 사용 할 수 있는 모드 |
명령라인모드(Command-line mode), ex모드(ex mode) | : 뒤에 명령어를 입력하여 특수기능을 사용 할 수 있는 모드 |
편집모드, 입력모드(Insert mode) | 메모장과 같이 텍스트를 자유롭게 편집할 수 있는 모드 |
비주얼모드(Visual mode) | 윈도우즈의 드래그와 같이 문자를 다중선택할 수 있는 모드 |
다. vi 편집기 실행
vi 편집기는 기본적으로 vi 파일명으로 실행시킬 수 있지만, 아래와 같은 방법을 통해 실행시킬 수도 있다.
vi 편집기 실행 | |
명령어 | 예시 |
vi 파일명 | vi test.sh |
vi /절대경로/파일명 | vi /tistroy/hagsig/test.sh |
vi 상대경로/파일명 | vi ./hagsig/test.sh |
라. vi 편집기 명령어, 단축키
vi 편집기에는 수많은 명령어와 단축키가 있으나 모두 외울 수 없으므로 자신이 자주 사용하는 것만 외우면 된다.
모드 전환 |
|
명령어 | 설명 |
i | 커서의 위치에서 입력모드로 전환 |
I | 커서가 위치한 줄의 맨앞에서 입력모드로 전환 |
a | 커서의 위치에서 뒤로 한칸 이동하여 입력모드로 전환 |
A | 커서가 위치한 줄의 맨뒤에서 입력모드로 전환 |
o | 커서의 위치에서 아래줄을 추가한뒤 입력모드로 전환 |
O | 커서의 위치에서 윗줄을 추가한뒤 입력모드로 전환 |
s | 커서가 위치한 글자를 지우고 입력모드로 전환 |
S, cc | 커서가 위치한 줄을 지우고 입력모드로 전환 |
cw | 커서의 위치에서 다음 단어 삭제 후 전환 |
C | 커서의 위치에서 오른쪽에 있는 문자를 모두 삭제 후 전환 |
esc | 현재 작업중인 내용을 종료하고 명령모드로 전환 |
커서 이동 | |
명령어 | 설명 |
h, ← | 커서의 위치에서 왼쪽으로 한칸 이동 |
l, → | 커서의 위치에서 오른쪽으로 한칸 이동 |
k, ↑ | 커서의 위치에서 위쪽으로 한줄 이동 |
j, ↓ | 커서의 위치에서 아래쪽으로 한줄 이동 |
[[ | 맨 위쪽 줄로 이동 |
]] | 맨 아래쪽 줄로 이동 |
{ | 이전 문단의 시적점으로 이동 |
} | 다음 문단의 끝지점으로 이동 |
( | 이전 문장의 시작점으로 이동 |
) | 다음 문장의 끝지점으로 이동 |
b | 이전 단어의 첫 글자로 이동 |
B | 이전 단어의 첫 글자로 이동(특수문자 무시) |
w | 다음 단어의 첫 글자로 이동 |
W | 다음 단어의 첫 글자로 이동(특수문자 무시) |
e | 다음 단어의 끝 글자로 이동 |
E | 다음 단어의 끝 글자로 이동(특수문자 무시) |
H | 현재 보이는 화면의 맨 위쪽으로 이동 |
M | 현재 보이는 화면의 중간으로 이동 |
L | 현재 보이는 화면의 맨 아래쪽으로 이동 |
0, ^ | 커서가 위치한 줄의 맨 처음으로 이동 |
$ | 커서가 위치한 줄의 맨 끝으로 이동 |
+ | 커서의 위치에서 다음줄의 맨 처음으로 이동 |
- | 커서의 위치에서 다음줄의 맨 끝으로 이동 |
3l | 커서가 위치에서 3번째 뒤 글자로 이동 |
3H | 현재 보이는 화면의 처음 줄로부터 3줄 아래로 이동 |
3L | 현재 보이는 화면의 마지막 줄로부터 3줄 위로 이동 |
gg | 파일의 제일 위쪽 줄로 이동 |
G | 파일의 제일 아래쪽 줄로 이동 |
3G, :3 | 파일의 3번째 줄로 이동 |
ctrl + d | 반 페이지 위로 이동 |
ctrl + u | 반 페이지 아래로 이동 |
ctrl + b | 한 페이지 위로 이동 |
ctrl + f | 한 페이지 아래로 이동 |
3% | 파일의 3%에 위치한 줄로 이동 |
'' | 이전 커서위치로 이동 |
삭제 | |
명령어 | 설명 |
x, dl | 커서 위치에 있는 글자 삭제 |
3x | 커서 위치에 있는 글자포함 3글자 삭제 |
X, dh | 커서 앞에 있는 글자 삭제 |
dw | 커서 뒤에있는 단어 삭제 |
d3w | 커서 뒤에있는 3개의 단어 삭제 |
db | 커서 앞에있는 단어 삭제 |
dd | 커서가 위치한 줄 삭제 |
3dd | 커서가 위치한 줄과 아래 2줄 삭제 |
dj | 커서가 위치한 줄과 아래 줄 삭제 |
3dj | 커서가 위치한 줄과 아래 3줄 삭제 |
dk | 커서가 위치한 줄과 위 1줄 삭제 |
3dk | 커서가 위치한 줄과 위 3줄 삭제 |
d$, D | 커서의 위치에서 줄 끝까지 삭제 |
d0, d^ | 커서의 위치에서 줄 맨앞까지 삭제 |
:3 d | 파일의 3번째 줄 삭제 |
:3,10 d | 파일의 3번째 줄부터 10번째 줄까지 삭제 |
복사/붙여넣기 | |
명령어 | 설명 |
yy | 커서가 위치한 줄 복사 |
3yy | 커서가 위치한 줄과 아래 2줄 복사 |
yw | 커서 뒤에있는 단어 복사 |
3yw | 커서 뒤에있는 3개의 단어 복사 |
yb | 커서 앞에있는 단어 복사 |
3yb | 커서 앞에있는 3개의 단어 복사 |
p | 복사한 내용을 커서 뒤에 붙여넣음 |
P | 복사한 내용을 커서 앞에 붙여넣음 |
:3 co 10 | 3번째 줄을 복사하여 10번째 줄 아래에 붙여넣음 |
:1,3 co 10 | 1~3번째 줄을 복사하여 10번째 줄 아래에 붙여넣음 |
:3 m 10 | 3번째 줄을 10번째 줄 아래로 이동 |
:1,3 m 10 | 1~3번째 줄을 10번째 줄 아래로 이동 |
:r hagsig.txt | 커서가 위치한 줄 아래에 hagsig.txt 파일의 내용을 붙여넣음 |
:3 r hagsig.txt | hagsig.txt 파일의 내용을 3번째 줄 아래에 붙여넣음 |
다중 선택 | |
명령어 | 설명 |
v | 커서를 이동해 글자 단위로 블럭선택 가능 |
V | 커서를 이동해 줄 전체를 블럭선택 가능 |
ctrl + v | 마우스 드래그와 같은 형식으로 블럭선택 가능 |
다중 선택 중 명령 | |
명령어 | 설명 |
y | 선택한 블럭 복사 |
d | 선택한 블럭 삭제 |
U | 선택한 블럭안의 소문자를 대문자로 바꿈 |
u | 선택한 블럭안의 대문자를 소문자로 바꿈 |
~ | 선택한 블럭안의 문자를 대소문자로 전환 |
J | 선택한 블럭들의 줄을 합침 |
: | 선택한 영역들에 ex명령 실행 |
esc | 블럭 선택 취소 |
저장/불러오기/종료/최소화 | |
명령어 | 설명 |
:w | 파일의 변경내용을 저장 |
:w hagsig.txt | 파일의 변경내용을 hagsig.txt 이라는 파일이름으로 저장 |
:w >> hagsig.txt | hagsig.txt 파일에 편집중인 파일의 내용을 덧붙여서 저장 |
:w! | 파일의 변경내용을 강제로 저장 |
:q | 파일의 변경내용을 저장하지 않고 종료 |
:q! | 파일의 변경내용을 저장하지 않고 강제로 종료 |
:wq, :x, ZZ | 파일의 변경내용을 저장하고 종료 |
:wq!, :x! | 파일의 변경내용을 강제로 저장하고 종료 |
:sh | 편집기 최소화(exit : 편집상태로 돌아올 수 있음) |
:o hagsig.txt, :e hagsig.txt | 편집중인 파일을 hagsig.txt 파일로 변경 |
:e! | 마지막 저장내용으로 되돌림 |
:e# | 바로 이전에 열었던 파일을 불러옴 |
:args | 편집중인 파일 목록 표시 |
:n | 다음 파일 편집 |
:prev | 이전 파일 편집 |
검색 | |
명령어 | 설명 |
/, :/ | 바로 이전에 검색한 문자를 정방향으로 검색 |
?, :? | 바로 이전에 검색한 문자를 역방향으로 검색 |
:/hagsig | hagsig이라는 문자를 정방향으로 검색 |
:?hagsig | hagsig이라는 문자를 역방향으로 검색 |
:/hagsig/=, :?hagsig?= | hagsig이라는 문자가 위치한 줄 번호 표시 |
검색 중 명령 | |
명령어 | 설명 |
n | 검색한 문자가 여려개일 경우 다음 문자 검색 |
N | 검색한 문자가 여러개일 경우 이전 문자 검색 |
문자 수정 | |
명령어 | 설명 |
r | 커서가 위치한 글자 하나를 입력한 값으로 수정 |
r + enter | 커서가 위치한 글자 하나를 지우고 줄 바꿈 |
xp | 커서가 위치한 글자 하나와 다음 글자의 위치를 바꿈 |
:s/tistory/hagsig | 커서가 위치한 줄에서 tistory를 hagsig으로 수정 |
:%s/tistory/hagsig | 파일 전체에서 tistory를 hagsig으로 수정 |
:1,3 s/tistory/hagsig | 파일의 1~3 줄에서 tistory를 hagisg으로 수정 |
:1,. s/tistory/hagsig | 파일의 1~현재줄까지 tistory를 hagisg으로 수정 |
:g/tistory/s//hagsig/gc | tistory라는 문자를 hagsig으로 수정할지 물어봄 |
문자 수정 시 옵션 | |
옵션 | 설명 |
g | 문자 수정 범위를 파일 전체로 잡음(global) |
c | 문자 수정 여부를 물어봄(confirm) |
i | 문자 수정 시 대소문자를 구분하지 않음(ignore-case) |
예시 | 설명 |
:%s/tistory/hagsig/ig | 파일 전체에서 대소문자를 구별하지않고 문자 수정 |
:1,3 s/tistory/hagsig/c | 문자 수정여부를 물어본 뒤 처리 |
:%s/tistory/hagsig/igc | 파일 전체에서 대소문자를 구별하지않고 질의 후 문자 수정 |
화면 분할 | |
명령어 | 설명 |
Ctrl + w + s, :sp, :split | 현재 편집창을 두개의 수평 창으로 나눔 |
Ctrl + w + n, :new | 새로운 수평 편집창 생성 |
Ctrl + w + ^ | 새로운 수평 편집창에 이전 파일을 표시(다중 편집시 가능) |
Ctrl + w + q, Ctrl + w + c, :q, :close | 커서가 위치한 창을 닫음 |
Ctrl + w + o | 커서가 위치한 창만 남기고 모든 창을 닫음 |
Ctrl + w + j | 커서가 위치한 창의 아래쪽 창으로 커서 이동 |
Ctrl + w + k | 커서가 위치한 창의 위쪽 창으로 커서 이동 |
Ctrl + w + w | 순차적으로 커서를 다음 창으로 이동(정방향) |
Ctrl + w + W | 순차적으로 커서를 다음 창으로 이동(역방향) |
Ctrl + w + p | 바로 이전에 커서가 위치했던 창으로 커서 이동 |
Ctrl + w + t | 제일 위에 있는 창으로 커서 이동 |
Ctrl + w + b | 제일 아래에 있는 창으로 커서 이동 |
Ctrl + w + r | 순차적으로 커서가 위치한 창과 다음 창을 바꿈(정방향) |
Ctrl + w + x | 바로 이전에 커서가 위치했던 창과 현재 창의 위치를 바꿈 |
Ctrl + w + J | 커서가 위치한 창을 제일 아래쪽 창으로 이동 |
Ctrl + w + K | 커서가 위치한 창을 제일 위쪽 창으로 이동 |
Ctrl + w + = | 창의 크기를 모두 동일하게 바꿈 |
Ctrl + w + _ | 커서가 위치한 창을 최대크기로 바꿈 |
Ctrl + w + + | 커서가 위치한 창의 크기를 한줄 만큼 증가 |
Ctrl + w + - | 커서가 위치한 창의 크기를 한줄 만큼 감소 |
Ctrl + w + 3+ | 커서가 위치한 창의 크기를 3줄 만큼 증가 |
Ctrl + w + 3- | 커서가 위치한 창의 크기를 3줄 만큼 감소 |
기타 | |
명령어 | 설명 |
:= | 현재 편집중인 파일이 총 몇 줄인지 표시 |
:set nu | 화면에 줄번호를 표시 |
:set nonu | 화면에 표시된 줄번호를 감춤 |
:!명령어 | 편집기에서 시스템 명령어를 사용(예시 :!ifconfig) |
u | 실행 취소(되돌리기) |
Ctrl + r | 실행 취소 되돌리기(다시실행) |
<< | 커서가 위치한 줄 맨 앞의 탭 제거 |
>> | 커서가 위치한 줄 맨 앞에 탭 제거 |