2023. 10. 6. 16:37ㆍ리눅스/CentOS
vi 에디터
- Linux에 기본적으로 설치되는 CLI 환경의 문서 편집 프로그램
- 초창기 Unix에서 사용하던 프로그램
90년대에 vim으로 업그레이드 되었으나 아직까지 vi 에디터라고 부른다
- 사용 환경이 세 가지로 구분
명령 모드 : 기본 사용 환경, 커서 이동, 실행 취소/다시 실행, 복사/잘라내기/붙여넣기, 삭제, 입력/실행 모드 전환
입력 모드 : 내용 편집을 위한 환경, 파일의 내용을 입력/수정/삭제, 명령 모드 전환
실행 모드 : 그 외 대부분의 기능들을 사용하기 위한 환경, 명령 모드 전환
(ex 모드)
- 실행 명령어
vi : 빈 문서 열기
vi 파일명 : 해당 파일 열기
- 명령 모드 사용 방법
* 명령모드에서 숫자를 입력하면, (입력한 숫자 * 입력 모드에서 타이핑 한 것)이 출력된다
1. 커서 이동
1) 글자 단위 커서 이동(방향키 대체)
h : 한 글자 왼쪽으로 이동
j : 한 글자 아래로 이동
k : 한 글자 위로 이동
l : 한 글자 오른쪽으로 이동
2) 단어 단위 커서 이동
> 소문자를 눌러주면 특수 문자를 별개 단어로 인식
대문자로 눌러주면 공백 문자와 개행 문자만을 기준으로 단어를 구분
w : 다음 단어의 첫 글자로 이동
b : 이전 단어의 첫 글자로 이동
e : 다음 단어의 마지막 글자로 이동
3) 줄 내부 커서 이동
0 : 줄의 첫 글자로 커서 이동
$ : 줄의 마지막 글자로 커서 이동
4) 화면 내부 커서 이동
H : 화면 상의 첫 줄로 이동
M : 화면 상의 가운데 줄로 이동
L : 화면 상의 마지막 줄로 이동
5) 문서 내부 커서 이동
gg : 문서의 첫 줄로 이동(=[[)
G : 문서의 마지막 줄로 이동(=]])
:숫자 : 숫자번째 줄로 이동(실행 모드 기능)
2. 입력 모드 전환(입력 후 ESC로 전환)
i : 커서 왼쪽으로 내용 입력
I : 커서가 있는 줄의 왼쪽으로 내용 입력
a : 커서 오른쪽으로 내용 입력
A : 커서가 있는 줄의 오른쪽으로 내용 입력
o : 커서 아래에 빈 줄 삽입 후 내용 입력
O : 커서 위에 빈 줄 삽입 후 내용 입력
s : 커서가 있던 글자를 지우고 내용 입력
S : 커서가 있던 줄을 지우고 내용 입력
3. 실행 취소, 다시 실행
u : 실행 취소(되돌리기)
ctrl + r : 다시 실행
4. 삭제
> 다른 줄에는 영향을 끼치지 않는다
x : 커서 오른쪽 글자 삭제(delete 기능)
> 커서 오른쪽에 지울 내용이 더 없다면 커서 왼쪽 글자 삭제(backspace 기능)
X : 커서 왼쪽 글자 삭제(backspace 기능)
> 커서 왼쪽에 지울 내용이 더 없을 때 전환되는 기능은 없다
5. 복사, 잘라내기 , 붙여넣기
yy : 커서가 있는 줄 복사
숫자 + yy: 커서가 있는 줄부터 숫자만큼의 줄 복사
dd : 커서가 있는 줄 잘라내기
숫자 + dd: 커서가 있는 줄부터 숫자만큼의 줄 잘라내기
p : 커서 뒤로 붙여넣기
P : 커서 앞으로 붙여넣기
* y나 d를 한 번만 누르고 커서 이동 키를 누면 커서가 이동해야 하는 만큼 복사/잘라내기
- 실행 모드 사용 방법
1. 줄 번호 출력/숨기기
:set nu : 줄 번호 출력
:set nonu : 줄 번호 숨기기
2. 검색
/Pattern : 위에서 아래로 Pattern 검색
?Pattern : 아래에서 위로 Pattern 검색
* 동작 후 추가 입력
n : 검색 방향으로 다음 찾기
N : 검색 방향의 반대로 다음 찾기
3. 찾아 바꾸기(치환)
:[범위]s/찾을내용/바꿀내용/[옵션]
* 범위
생략 : 커서가 있는 줄에서 내용을 찾아서 검색
n : n번째 줄에 있는 내용을 찾아서 변경
n1,n2 : n1번째 줄부터 n2번째 줄에서 내용을 찾아서 변경
% : 문서 전체에서 내용을 찾아서 변경
(1,$)
* 옵션
g : 한 줄에 찾는 내용이 여러개 있으면 전부 변경
4. 파일명과 현재 커서의 위치 확인
:f : 현재 열려 있는 파일의 이름과 커서의 위치를 출력[파일명/몇째 줄 중에 몇째 줄/줄 기준 퍼센트/수(tab키 입력되면 범위로)]
5. 리눅스 명령어 동작
:! 명령어 : vi를 잠시 멈추고 Linux 명령어 동작
6. 파일에 다른 내용 입력
> : 기호 뒤에 숫자를 넣어서 해당 줄을 기준으로 동작 가능
:.! 명령어 : 커서가 있던 줄을 지우고 명령어 동작 결과를 삽입
> 화면에 결과가 출력되는 명령어 사용
:r! 명령어 : 커서가 있는 줄 아래로 명령어 동작 결과를 삽입
> 화면에 결과가 출력되는 명령어 사용
:r 파일명 : 커서가 있는 줄 아래로 다른 파일의 내용 삽입
7. 저장, 종료, 불러오기
> 저장, 종료, 불러오기는 !를 붙여서 강제 진행이 가능(ex. :q! = 강제 종료)
:w : 저장
:w 파일명 : 다른 이름으로 저장
:q : 종료
:wq : 저장하고 종료
:wq 파일명 : 다른 이름으로 저장하고 종료
:e 파일명 : 기존 문서를 종료하고 다른 문서 불러오기
:enew : 기존 문서를 종료하고 새 파일 열기
- 화면 분할
ctrl + w + n : 화면 분할
ctrl + w + w : 분할된 화면 간 커서 이동
실습
문제
설정 : itbank 홈 디렉터리에서 /backup/inittab 파일을 열고 시작
(조건 : 시작하면서 vi 열고나서 문제 3번이 끝날때까지 화면은 vi유지)
문제 1
(1) inittab 12번째줄 아래에 itbank 홈 디렉터리 내부의 목록 삽입
(ls -l 결과로 파일 a,b,c,d,e가 출력되는 내용을 삽입)
(2) 파일 안에 있는 내용 변경 : run -> bank, sys -> kg
(3) 지금까지 작업한 모든 내용을 /test/linux.test 로 저장
/home/.kg.test 로 저장 후 열기
/backup/bank 로 파일 저장
빈 문서 열어서 /backup/bank 불러오기
문제 2
/home/itbank/ 안에 있는 모든 내용 삭제 후
/home/itbank/a/b/, /home/test/c/d/ 만들기
※ 단, 생성 명령은 반드시 한 줄로 실행할 것
문제 3
/home/.kg.test 문서를 연 후 안에 있는 내용 전부 삭제
named.conf, named.rfc1912.zones를 itbank에 업로드
/kg/ 안에 두개 파일 병합시키기
(절대경로 : named.1 , 상대경로 : named.2)
named.1 파일과 named.2 파일 내용을 차례대로 삽입 후 저장하고 종료
※ 각 삽입내용은 별도로 구분
( ex. ----------- named.1 ------------)