Vi 편집기 입문(Begging Editor vi)
Vi 편집기 작업은 명령모드와 입력모드의 두 상태가 있다.
초기 'vi fname'을 실행하면 창이 바뀌면서 명령모드(Command mode)가 된다.
1) vi 시작:
. $vi fname
vi vi편집기를 호출한다.
vi filename 기존에 있는 파일이면 그 파일을 열고 없는 파일이면 새로 만든다.
vi + 10filename 지정화일의 10번째 행부터 화일열기
vi +/"school" filename 지정화일내의 school이란 단어가 처음나오는 시점부터 열기
vi -r filename 손상된 파일을 복구
view filename 수정없이 읽기전용으로 열기
vi filenames 여러 파일명이나 와일드카드(*,?)로 여러 파일을
차례로 불러 편집할 수 있다.(':n' next)
2) 명령모드: 커서의 이동, 글자/단어/줄의 삭제나 블럭의 설정 등
. 입력이 아닌 상태.
. 작업 중 언제든지 를 누르면 명령모드가 된다.
3) 입력모드: 키보드로 입력되는 모든 글자가 입력되는 상태.
. 입력모드(Insert mode) 들어가기 : 'i'나 'a'(커서 다음에 입력)
화면 하단에 "Insert" 표시 됨(표시가 안되는 화면도 있음).
. 입력모드에서는 커서를 이동시킬 수 없다.
다만 버젼과 환경에 따라 화살표 키(-> <- up, down)로 이동이 되는 경우도 있음. . 입력모드 나가기(exit):
. 다음줄 입력 : 'o'
a 커서 오른쪽에 문자삽입
A 커서 오른쪽, 행의끝에 문자삽입
i 커서 왼쪽에 문자삽입
I 커서왼쪽, 행의 처음에 문자삽입
o 커서 아래에 행 삽입
O 커서 위에 행 삽입
작업완료후 반드시 입력
4) Cursor 이동: up 'k', down 'j', left 'h', right 'l'
* 명령모드에서만 사용하여야 함.
h 왼쪽으로 이동 k
j 아래로 이동 ^
k 위로 이동 h <-_ -> l
l 오른쪽으로 이동
w 한단어 오른쪽으로이동 v
b 한단어 왼쪽으로 이동 j
Return 한행아래로 이동
Backspace 한문자 왼쪽으로 이동
Spacebar 한문자 오른쪽으로 이동
H 화면의 맨위로 이동
M 화면의 중간으로 이동
L 화면의 맨 아래로 이동
^F 한화면 앞으로 이동
^D 반화면 앞으로 이동
^B 한화면 뒤로 이동
^U 반화면 뒤로 이동
5) 삭제:
. Delete 1 character: 'x'
. Delete multi character (ex 3 letters): '3x'
. Delete line 'dd'
. Paste 'p' (next line), 'P' (previous line)
dd 후 사용
. Delete multi line (ex 3 lines delete): '3dd'
x 문자삭제
dw 단어삭제
dd 행 삭제
D 커서 오른쪽 행 삭제
:5,10 d 5-10째 행 삭제
6) 수정:
. Modify 1 letter 'r' 화면 하단에 "Replace" 표시 됨.
. Modify multi letters 'R'
cw 단어 변경
cc 행 변경
C 커서 오른쪽의 행 변경
s 커서가 위치한 문자열 대체
r 커서 위치 문자를 다른 문자로 대체
r-Return 행 분리
J 현재 행과 아래 행 결합
xp 커서 위치 문자와 오른쪽 문자교환
- 문자형(대,소문자) 변경
u 이진 명령 취소
U 행 변경 사항 취소
:u 이전의 최종행 취소
8) 텍스트 복사 및 이동
yy 현재 커서가 있는 행의 전체 복사
Y 행 yank(버퍼에 복사)
yw 현재 커서가 있는 단어 복사
y$ 현재 커서가 있는 곳에서 그 행의 끝까지 복사
y^ 현재 커서가 있는 곳에서 그 행의 시작까지 복사
p yank 되거나 삭제된 행을 현재 행 아래에 삽입
P yank되거나 삭제된 행을 현재 행 위에 삽입
:1,2 co 3 1-2행을 3행 다음으로 복사
:4,5 m 6 4-5행을 6행 다음으로 이동
9) 행 찾기 및 각 행마다 번호 표시
G 파일의 마지막 행으로 가기
12G 파일의 12번째 행으로 가기
:set nu 행번호 표시
:set nonu 행번호 숨기기
10) 단어나 문장 찾기 및 바꾸기
/string/ string탐색
?string? string 역 방향 탐색
n(N) string의 다음(이전) 계속 탐색
:g/search-string/s//replace-string/gc 각 발생 탐색후 확인하고 대체
:s/str/rep/ 현재 행의 str을 rep로 대체
:1,.s/str/rep/ 1부터 현재 행의 str을 rep로 전부 대체
:%s/str/rep/g 파일 전체 str을 rep로 전부 대체
11) 마크 설정과 마크 호출
. 문자 'm' 다음에 마크 이름으로 'a'에서 'z' 사이의 문자 하나를 선택한다.
예) 'a'라는 이름으로 마크 설정: ma
. 이동이나 호출은 '(single quotation mark)후 'a'에서 'z' 사이의 문자 하나를 선택 한다.
예) 'a 설정된 마크 'a'로 이동
예) :'a, d 마크 a에서부터 현재 커서가 있는 줄까지 삭제.
12) Buffering(특정 이름의 버퍼에 저장)
. "(a-z)nyy (a-z)라는 이름의 버퍼에 n줄 저장
예) "a5yy 'a'라는 이름의 버퍼에 현재 줄부터 5줄을 저장.
. "(a-z)p (a-z)버퍼의 내용을 다음 줄에(p) 넣음.
13) 다른 파일 삽입
:r filename 커서 다음에 파일 삽입
:20 r filename 파일을 20번째 행 다음에 삽입
14) 단축 단어나 키(abbreviation) 사용법
. :ab 약어(단축단어나 키) 바꿀 단어나 키
예) :ab WW w! /tmp/test ':WW'명령 /tmp/test'로 저장.
예) :ab inp internet programming
입력모드에서 'inp'를 넣고 빈칸이나 줄바꿈 등을 치면 'internet programming'으로
바뀐다.
15) 현재 로드된 파일 정보
. Refresh(다시 보기) '^L'
. Current information(파일 정보) '^G'
. Search a word(찾기) '/word'
. Search again(다시 찾기) 'n'
. 현재 설정된 vi 환경보기 ':set'
16) Undo(실행 취소) 'u'
17) Repeat(실행 반복) '.'
18) 일련의 명령들을 하나의 명령으로 만들기
:map (a-z,A-Z) 명령들
예) :map z ncwPARK^[ 'z' 명령으로 앞에서 찾은 단어('/단어' 실행)를 찾은(n) 후
해당 단어를 PARK로 바꾼다.('^['는 로 '^V'로 입력한다.)
예) :map Z dwwP 명령 'Z'는 현재 커서가 위치한 단어와 다음 단어를
맞바꾼다.
19) 저장:
. 저장 ':w'
. 'tt'라는 이름으로 저장 ':w tt'
. 'tt'라는 이름의 파일이 이미 존재할 때에는 덮어쓰기(강제 save)의 의미로
'!'을 추가. ':w! tt'
. 현재의 파일로 저장하고 나가기(종료) 'ZZ', ':wq'
. Vi 나가기 ':q'
. 저장하지 않고 나가기 ':q!'
:w 변경사항 저장
:w filename 지정한 파일로 저장
:wq 변경사항 저장후 vi종료
ZZ 변경사항 저장후 vi종료
:q! 변경사항을 저장하지 않고 vi종료
. MS Windows OS에서 사용하는 Vim이나 윈도우 텍스트 편집기 등에서 작성된
문서는 다음줄(줄 바꾸기) 문자코드가 유닉스()와 다르다. DOS(Windows)
텍스트 문서를 유닉스 vi로 보면 ^M로 보인다(DOS 형식인데 안 보일 수도 있음).
문서를 저장하기 전에 :set로 보아 fileformat=unix 혹은 fileformat=dos로
저장 형식을 알 수 있다. 아래 환경설정 참조)
:set fileformat=unix 한 후 저장하면 유닉스 형식으로 저장된다.
혹은 모든 '^M'코드를 삭제하면 유닉스형식이 된다. ':%s/^M//'
여기서 '^M'은 '^V^M'로 입력할 수 있다.
:set fileformat=unix 저장시 유닉형식 설정.
:set fileformat=dos 저장시 DOS 형식 설정.
20) Tips: 다음 과 ^L(refresh)를 자주 사용하시오!
21) 라인(줄) 편집 명령:
. Line 명령은 ':'로 시작한다. 화면 하단에 ":" 표시.
. :[n1,n2] command [범위] 명령
예1) Read and insert a file fnme('fname' 파일을 커서 앞에 끼워 넣기) ':r fname'
예2) Cancel all modification and edit again(저장한 이후 모든 작업을 취소하고 다시 편집함) ':e!'
22) 환경 설정
. :set