본문으로 바로가기

가. 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 실행 취소 되돌리기(다시실행)
<< 커서가 위치한 줄 맨 앞의 탭 제거
>> 커서가 위치한 줄 맨 앞에 탭 제거