본문 바로가기

Linux(OS)

vi 편집기


[리눅스 vi 편집기] - 윈도우즈의 메모장(notepad)와 비교
리눅스 운영체제는 서버구축 및 백업등의 시스템 관리와 개발을 할 때
텍스트 터미널 환경에서 주로 작업을 하므로
vi 편집기와 기본적인 쉘 명령어의 사용법을 먼저 알아보자.
[01] vi의 3가지 모드(상태)
vi 는 세가지 모드(상태)가 있다.
1. 명령 모드(esc 상태)
2. 입력 모드(편집 상태)
3. 명령 모드
vi 를 실행하면 처음상태가 "명령 모드"이다.(키보드 입력이 하나의 명령으로 동작한다.)
우리는 임의의 파일을 하나 복사를 하여 그 파일에서 vi를 연습해 보자.
[02] vi 학습을 위한 작업(순서대로 진행하세요!)
[root@localhost ~]# cd /
[root@localhost /]# mkdir vitest
[root@localhost /]# cd vitest
[root@localhost vitest]# ls
[root@localhost vitest]#
[root@localhost vitest]# cp /etc/services /vitest
[root@localhost vitest]#
[root@localhost vitest]# ls
services
[root@localhost vitest]#
[root@localhost vitest]# vi services
우리는 위 services 파일로 vi 편집기에 대해서 공부를 할 것이다.
======================================================================
◆ 커서 이동
문자키를 이용한 커서 이동하기
k(위)
h(왼쪽) l(오른쪽)
j(아래)
← = 좌측으로 가기 = h , <del>
↓ = 아래로 가기 = j
↑ = 위로 가기 = k
→ = 우측으로 가기 = l (소문자 엘)
----------------------------------------------------------------------
◆ 신속하게 이동
w - 오른쪽으로 특수문자 혹은 한단어의 처음으로 이동
b - 왼쪽으로 특수문자 혹은 한단어의 처음으로 이동
W - 오른쪽으로 한단어의 처음으로 이동
B - 왼쪽으로 한단어의 처음으로 이동
----------------------------------------------------------------------
◆ 한 행 안에서의 이동
0 (숫자 영) - 행의 맨 처음으로 이동
$ - 행의 맨 마지막으로 이동
----------------------------------------------------------------------
◆ 페이지 이동
G - 문서의 맨 끝 행으로 이동
nG - (예) 3G 하게 되면 그 파일 위에서 3번째 행으로 이동
[CTRL] + f = 한 페이지 아래로 이동
[CTRL] + b = 한페이지 위로 이동
----------------------------------------------------------------------
◆ 편집(입력) 상태 설명
※ 모든 것은 커서의 위치에서 시작 된다!
i : 현재 커서 앞쪽에 입력
a : 현재 커서 뒤쪽에 입력
A: 현재 라인 마지막에 입력
o : 현재 라인 아래 줄에 입력(영문 소문자 오)
O : 현재 라인 위쪽 줄에 입력(영문 대문자 오)
※ i 나 a 를 누르면 입력상태로 전환된다. 왼쪽하단에 -INSERT- 로 표시된다.
※ 다시 명령상태로 전환하려면 esc 키를 누르면 된다.
※ 나가는 상태는 콜론(:) 으로 시작하는 상태를 말한다.
----------------------------------------------------------------------
◆ 삭제 명령(명령상태에서 입력하는 것이다.)
※ 모든 것은 커서의 위치에서 시작 된다!
x : 한자 삭제
dw : 한 단어 삭제
dd : 한 줄 삭제
d$ : 현재 커서 부터 마지막까지 삭제
----------------------------------------------------------------------
◆ 교체 명령
r : 한 글자 교체(r 누르고 새로운 문자 입력)
cw : 한 단어 교체(cw 누르고 새로운 단어 입력후 esc 누르기)
----------------------------------------------------------------------
◆ 검색 및 치환(/ 나 ? 사용할때 같이 붙여 써야한다.)
※ 모든 것은 커서의 위치에서 시작 된다!
※ ESC 키를 누르면 명령상태로 가는데 이 상태에서 "검색"을 하면 된다.
◇ 전방 검색: /
/검색단어(명령상태에서 / 누르고 검색단어 입력후 엔터)
/ = 커서의 위치에서 아래로 찾는다.
n 을 누르면 다음 단어로 이동된다. 반대로 가려면 N 이다.
◇ 후방 검색: ?
?검색단어(명령상태에서 ? 누르고 검색단어 입력후 엔터)
? = 커서의 위치에서 위로 찾는다.
n 을 누르면 다음 단어로 이동된다. 반대로 가려면 N 이다.
:s/찾는문자열/치환문자열
- 현재 커서가 놓여 있는 행에서 첫번째로 검색된 특정문자열 바꾸기:1,10s/찾는문자열/치환문자열
- 1행부터 10행사이에 걸쳐 첫번째로 검색된 특정문자열 바꾸기
:%s/찾는문자열/치환문자열
- 모든행에 걸쳐 첫번째로 검색된 특정문자열을 바꾸기
★ ₩ (역 슬래쉬) 특수문자(/)의 해석방지
----------------------------------------------------------------------
◆ 이전 작업 취소
u : undo(u 계속 누르면 계속적으로 이전 작업으로 간다.)
----------------------------------------------------------------------
◆ 텍스트 복사(Copy) 그리고 붙여넣기(Paste)
yw - 한단어 복사
y$ - 커서부터 행끝까지 복사
yy - 한줄 모두 복사
※ 붙여쓰기(Paste) 할때는 소문자 p 를 누르면 된다.
----------------------------------------------------------------------
◆ 종료와 저장, 새이름으로 저장
:q - 저장하지 않고 vi 종료하기
:q! - 강제 종료
:w - 현재내용을 저장
:w! - 읽기전용인 파일을 수정후 강제로 저장할때
:wq - 저장하고 종료
:wq! - 읽기전용인 파일을 수정후 강제로 저장하고 종료하기
:w 새파일명 - 새이름으로 저장
----------------------------------------------------------------------
◆ 파일에 행 번호 붙이기
:set nu [ENTER]
:set nonu [ENTER] = 번호 없애기
----------------------------------------------------------------------
◆ 특정 행 번호로 이동(아래 - 부분을 빼고 그대로 입력해보고 화면 좌측하단을 보자)
:1[ENTER] - 1번째 행으로 이동
:$[ENTER] - 마지막 행으로 이동
:$=[ENTER] - 현재 문서의 총 줄(행)수
:.=[ENTER] - 현재위치의 행번호
----------------------------------------------------------------------
◆ 범위 지정
:1,10d - 1번행부터 10번행가지 삭제(d)
:.,$d - 현재부터 마지막 행까지 삭제
:0,$-4d - 파일의 맨처음(0- 가상번호)부터 끝까지 삭제하되 4는 제외
:.-1,.+1y(:.-,.+y)(:-,+y) - 현재 행을 기준으로 아래위 3행을 복사
:0,$y - :%y - 모든 행 복사
----------------------------------------------------------------------
◆ 일부분 저장
:1,.w part1.txt - 1행부터 현재 행까지 part1.txt 라는 이름으로 저장
:1,.w >>part.txt - 1행부터 현재 행까지를 part.txt 파일에 추가
----------------------------------------------------------------------
◆ 다른파일 내용 (읽기) 삽입
:r insert.txt - 커서위치 아래에 insert.txt 파일을 추가
----------------------------------------------------------------------
----------------------------------------------------------------------
◆ vi 환경설정
:set number : 행번호 보이게
:set nonumber : 행번호 안보이게
:set autoindent : 들여쓰기 설정
:set noautoindent : 들여쓰기 제거
:set list : 문단,조판부호 보기
:set nolist : 문단,조판부호 안보이게
:set window=30 : 한 화면당 행의 갯수 30개로 지정
:set ignorecase : 검색시 대소문자 구별 제거
:set noignorecase : 검색시 대소문자 구별
:set all : 현재 설정된 vi 모든 설정값 보기
----------------------------------------------------------------------
◆ 외부 유닉스 명령어 실행
:!명령 (예로 하나 해보자)
:!df -k[ENTER]
:r :ls - 유닉스 명령의 실행 결과 화면을 현재 편집중인 내용에 불러들임
----------------------------------------------------------------------
[참고 사항]
숫자와 명령의 조합 예제
10j - 10줄 위로 이동
10x - 10글자 삭제
5dd - 5줄 삭제
10i* esc : * 문자를 10 개 입력
(예) 5idoom 후에 ESC 키를 누른다. 잠시후에 doom을 5개 복사를 한다.
shift + g : 마지막 라인으로 이동
1번 라인으로 이동하기
---> 1G 또는 :1 엔터
33번 라인으로 이동하기
---> 33G 또는 :33 엔터