본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
유닉스·리눅스의 기본 화면 편집기. 입력 모드와 명령 모드를 오가며 편집하는 모드형 편집기다
  • 경로 : /bin/vi (대부분의 리눅스 배포판에서는 vim 이 vi 로 실행된다)

1976년 UC 버클리의 빌 조이(Bill Joy)가 줄 단위 편집기 ex 에 화면 편집(visual) 모드를 붙여 만들었다. 이름이 visual 에서 왔다. 거의 모든 유닉스·리눅스에 기본으로 들어 있어 서버 관리에서 가장 많이 쓰는 편집기다. 다른 편집기와 달리 키를 누르면 글자가 입력되는 상태(입력 모드)와 키가 명령으로 해석되는 상태(명령 모드)가 나뉘어 있다. emacs, nano, pico 는 모드가 없는 편집기다. 1991년 브람 무레나르가 만든 개선판이 vim(Vi IMproved)이다 → 리눅스 에디터

모드 들어가는 방법 하는 일
명령 모드(일반 모드) vi 를 처음 실행했을 때, 입력 모드에서 Esc 커서 이동, 삭제, 복사, 붙여넣기
입력 모드(편집 모드) 명령 모드에서 i, a, o, I, A, O 등 글자 입력
명령행 모드(ex 모드, 마지막 행 모드) 명령 모드에서 :, /, ? 저장, 종료, 검색, 치환, 환경 설정
  • 입력 모드와 명령행 모드는 서로 바로 오가지 않는다. 언제나 Esc 로 명령 모드에 돌아온 뒤 넘어간다

명령 모드에서 : 를 눌러 명령행 모드로 들어간 뒤 입력한다.

명령 하는 일
:w 저장(편집을 계속한다)
:w 파일명 다른 이름으로 저장
:q 종료. 저장하지 않은 변경이 있으면 종료되지 않고 경고(E37)를 낸다
:q! 저장하지 않고 강제 종료. 변경한 내용을 버린다
:wq 저장하고 종료
:x, ZZ 저장하고 종료. 바뀐 내용이 없으면 저장하지 않고 끝낸다(ZZ 는 : 없이 명령 모드에서 누른다)
:wq! 읽기 전용 파일도 강제로 저장하고 종료(권한이 있을 때)
:e! 마지막으로 저장한 상태로 되돌려 다시 연다
  • :% 는 저장·종료 명령이 아니다. % 는 파일 전체 행을 뜻하는 범위 표시라 :%s/old/new/g(전체 치환), :%d(전체 삭제)처럼 다른 명령 앞에 붙여 쓴다

명령행 모드에서 :[범위]s/찾을 패턴/바꿀 문자열/[플래그] 로 치환한다.

명령 하는 일
:s/old/new/ 현재 행에서 처음 나오는 old 하나만 바꾼다
:s/old/new/g 현재 행의 old 를 모두 바꾼다
:%s/old/new/g 파일 전체에서 old 를 모두 바꾼다
:1,10s/old/new/g 1~10행에서 바꾼다
:%s/old/new/gc 바꿀 때마다 확인을 묻는다
/패턴, ?패턴 아래쪽 / 위쪽으로 검색한다. n 은 다음, N 은 반대 방향

찾을 패턴에는 정규 표현식의 메타문자를 쓴다.

패턴 맞는 것 예
^linux 행의 맨 앞에 있는 linux -
linux$ 행의 맨 끝에 있는 linux -
^linux$ 행 전체가 linux 인 행 :%s/^linux$/Linux/g 는 내용이 linux 하나뿐인 행만 바꾼다
\<linux\> 단어로 떨어진 linux. linuxer, mylinux 안의 linux 는 맞지 않는다 :%s/\<linux\>/Linux/g 는 행 안의 linux 단어를 모두 바꾼다
  • ^, $, \<, \> 는 찾을 패턴 쪽에서만 위치 조건이 된다. 바꿀 문자열 쪽에 쓰면 위치를 뜻하지 않는다. :%s/linux/^Linux$/g 는 행 전체가 linux 인 행을 고르는 명령이 아니다
  • 바꿀 문자열에서 & 는 찾은 문자열 전체를 뜻한다
명령어 설명 예제
vi {파일명} 파일열기, 작성 vi test.txt
vi +{행번호} {파일명} 파일을 열고, 입력한 행으로 커서 이동 vi +100 test.txt
vi + {파일명} 파일을 열고, 마지막 행으로 커서 이동 vi + joon.txt
vi +/"{검색 문자열}" {파일명} “문자열”이 처음 나오는 곳에서 열기 vi +/"adc" test.txt
vi -r 스왑 파일 목록 보기. 파일 이름 없이 쓰면 복구할 수 있는 스왑 파일을 찾아 원본 이름·수정 시각과 함께 보여 주고 끝낸다 vi -r
vi -r {파일명} 비정상 종료로 저장하지 못한 파일을 스왑 파일에서 복구해 연다 vi -r test.txt
vi -R {파일명} 읽기 전용으로 열기(view 와 같다). 대문자 R 이다 vi -R test.txt
view {파일명} 읽기 전용으로 열기 view test.txt
vi -s {스크립트 파일} {파일명} 스크립트 파일에 적힌 명령을 키보드로 친 것처럼 차례로 실행한다(vim). ex 모드(ex -s, vi -e -s)에서는 메시지 없이 도는 조용한(silent) 모드가 된다 vi -s cmds.txt test.txt
  • + 뒤에 행 번호를 주지 않으면 마지막 행으로 간다. vi $ 파일, vi -$ 파일, vi % 파일 같은 시작 옵션은 없다. $ 와 % 는 파일을 연 뒤 명령 모드·명령행 모드에서 쓰는 기호다($ 행 끝, :% 파일 전체)

비정상 종료와 스왑 파일

편집 원본 편집

vi(vim)는 편집하는 동안 바뀐 내용을 원본과 따로 스왑 파일(swap file)에 계속 적어 둔다. 저장하기 전에 터미널 연결이 끊기거나 시스템이 멈춰 vi 가 비정상적으로 끝나도 이 파일로 작업을 되살릴 수 있다.

  • 스왑 파일은 보통 원본과 같은 디렉터리에 .파일명.swp 라는 숨김 파일로 생긴다. 이미 있으면 .swo, .swn 처럼 이름을 바꿔 만든다
  • 스왑 파일이 남은 파일을 다시 열면 "E325: ATTENTION Found a swap file" 경고와 함께 읽기 전용으로 열기·복구·삭제 등을 묻는다
  • vi -r 을 파일 이름 없이 실행하면 남아 있는 스왑 파일 목록을 보여 준다(vim 의 -L 도 같다)
  • vi -r 파일명 이나 편집 중의 :recover 로 복구한다. 복구한 내용을 :w 로 저장한 뒤 필요 없어진 스왑 파일은 지운다
  • 옛 유닉스 vi 는 복구용 파일을 /var/preserve, /var/tmp 같은 곳에 따로 보관했다
  • 시작 옵션 정리 : + 마지막 행으로, -r 스왑 파일 목록·복구, -R 읽기 전용, -s 스크립트 실행


커서 설명
h (←) 왼쪽으로 커서 이동
j (↓) 아래로 커서 이동
k (↑) 위로 커서 이동
l (→) 오른쪽으로 커서 이동
w 다음 단어의 첫 글자로 커서 이동
e 단어의 끝 글자로 커서 이동
b 앞 단어의 첫 글자로 커서 이동
Enter 다음 행의 첫 글자로 커서 이동
Back space 한 문자 왼쪽으로 커서 이동
Space Bar 한 문자 오른쪽으로 커서 이동
^ 행의 첫 글자(공백이 아닌 첫 문자)로 커서 이동
0 행의 맨 앞으로 커서 이동
$ 행의 맨 끝으로 커서 이동
H 화면의 맨 위로 이동
M 화면의 중간으로 이동
L 화면의 맨 아래로 이동
숫자G ‘숫자’ 번째 행으로 커서 이동 (G 만 누르면 마지막 행)
Ctrl + f 한 화면 아래(앞)로 이동
Ctrl + b 한 화면 위(뒤)로 이동
Ctrl + d 반 화면 아래로 이동
Ctrl + u 반 화면 위로 이동
Ctrl + e 화면을 한 줄 아래로 넘긴다(내용이 한 줄 올라간다)
Ctrl + y 화면을 한 줄 위로 넘긴다(내용이 한 줄 내려간다)

문자, 행 , 삽입 명령어

편집 원본 편집
커서 설명
a 커서 오른쪽에 문자 삽입
A 행의 끝에 문자 삽입
i 커서 왼쪽에 문자 삽입
I 행의 처음에 문자 삽입
o 커서 아래에 행 삽입
O 커서 위에 행 삽입
ESC 입력 모드를 끝내고 명령 모드로 돌아간다

텍스트 변경 명령어

명령어 설명
cw 단어 변경
cc 행 변경
C 커서 오른쪽의 행 변경
s 커서가 위치한 문자열 대체
S 커서가 위치한 라인의 문자열 대체
r 커서 위치 문자를 다른 문자로 대체
r-Enter 행 분리
J 현재 행과 아래 행 결합
xp 커서 위치 문자와 오른쪽 문자 교환
~ 문자형(대, 소문자) 변경
u 이전 명령 취소
U 행 변경 사항 취소, 이전의 최종 행 취소
. 이전 최종 명령 반복

텍스트 삭제 명령어

편집 원본 편집
명령어 설명
x 커서가 있는 문자 삭제
nx 커서가 있는 위치부터 n개의 문자를 삭제
dw 현재 커서에 있는 한 단어 삭제
dd 커서가 있는 라인 삭제
ndd 커서가 있는 라인부터 n개의 라인 삭제
db 커서의 위치에서 거꾸로 한 단어 삭제
D 커서 오른쪽 행 삭제
:5,10d 5~10번째 행 삭제

복사 및 이동 명령어

편집 원본 편집
명령어 설명
yy 커서가 위치한 줄 복사
Y 행 yank 또는 복사
yh 커서의 왼쪽 문자 복사
yl 커서에 위치한 문자 복사
yj 커서가 위치한 줄과 그 아랫줄 복사
yk 커서가 위치한 줄과 그 윗줄 복사
p yank 되거나 삭제된 행을 현재 행 아래에 삽입
P yank 되거나 삭제된 행을 현재 행 위에 삽입
:1,2 co 3 1~2행을 3행 다음으로 복사
:4,5 m 6 4~5행을 6행 다음으로 이동

ex 모드 환경 설정

편집 원본 편집

명령 모드에서 :set 옵션 을 입력하면 편집 환경을 바꾼다. 끄려면 앞에 no 를 붙인다(:set nonu).

설정 줄임 하는 일
set number set nu 행 번호를 표시한다
set autoindent set ai [Enter] 로 줄을 바꾸면 바로 윗줄의 시작 열과 같은 위치에 커서를 둔다(자동 들여쓰기)
set showmatch set sm 닫는 괄호를 입력하면 짝이 되는 여는 괄호를 잠깐 보여 준다
set tabstop=4 set ts=4 탭 문자의 너비를 4칸으로 한다
set ignorecase set ic 검색할 때 대소문자를 가리지 않는다
set list - 탭과 줄 끝($)을 눈에 보이게 표시한다
set all - 설정할 수 있는 항목과 지금 값을 모두 보여 준다
set 은 그 편집 세션에서만 유효하다. vi 를 실행할 때마다 자동으로 적용하려면 홈 디렉터리의 ~/.exrc(vim 은 ~/.vimrc)에 콜론 없이 적어 둔다. .virc 라는 설정 파일은 없다.
[ihduser@kait ~]$ cat > .exrc
set nu
(Ctrl+D 로 입력을 끝낸다)