[Linux] 리눅스(CentOS7)

[Linux] 리눅스 vi 편집기 사용법

ITsubin 2022. 2. 27. 19:42

이번 포스팅에서는 vi 편집기에 대해서 알아보겠습니다.

 

아래 사진은 vi, vim 동작 모드입니다.

명령 모드(Command mode)가 최초 시작 모드이며 ESC, a, i, o, :, /, ? 등으로 동작 모드를 변경하면서 사용합니다.

(저는 vi 편집기를 실습하기 위해 vtest 디렉터리를 생성한 후 이 디렉터리에 /etc/login.defs 파일을 복사했습니다.)

vi 편집기의 기본 형식은 vi [파일명]입니다.

[root@localhost /]# mkdir vtest; cd vtest; cp /etc/login.defs ./; ls
login.defs
[root@localhost vtest]# vi login.defs

 

1. 명령(이동) 모드(Command mode)

명령(이동) 모드에서도 여러 가지 방법으로 커서 이동이 가능합니다.

[방향키 이동]

h 또는 : 왼쪽

j 또는 : 아래

k 또는 :

l 또는 : 오른쪽

 

[단어 이동]

w : 단어 첫 글자 단위로 이동

e : 단어 끝 글자 단위로 이동

b : 단어 단위로 뒤로 이동

 

[문서 내 이동]

$ : 행 끝으로 이동

0 : 행 처음으로 이동

gg : 문서 최초로 이동

shift + g (G) : 문서 끝으로 이동

 

2. 입력 모드(Edit mode)

[편집(입력) 모드 전환 키] : a, i, o, A, I, O

a : 커서 위치의 다음 칸부터 끼워넣기 (append)

A : 커서가 있는 줄의 끝에서부터 끼워넣기

i : 커서 위치부터 끼워넣기 (insert)

I : 커서가 있는 줄의 맨 앞에서부터 끼워넣기

o : 커서 바로 아래에 줄을 만들고 끼워넣기(open line)

O : 커서 바로 위에 줄을 만들고 끼워넣기

 

[범위 지정 모드]

v : 단어 단위로 블록 지정, 블록 지정 모드 진입

shift + v (V) : 라인 단위 블록 지정

 

[복사 및 붙여 넣기(yank)]

yw : 커서 위치부터 단어의 끝까지 복사

y0 : 커서 위치부터 줄의 처음까지 복사

y$ : 커서 위치부터 줄의 끝까지 복사

yy : 커서가 있는 줄을 복사

ex) 5yy : 현재 커서 위치에서 아래로 5개의 행 복사

 

[글 삭제(delete)]

d1 : 커서 위치의 글자 삭제

dw : 커서 위치의 단어 삭제

d0 : 커서 위치부터 줄의 처음까지 삭제

d$ : 커서 위치부터 줄의 끝까지 삭제

dd : 커서가 있는 줄을 삭제

ex) 4dd : 현재 커서 위치에서 아래로 n개의 행 삭제

 

[붙여 넣기]

p : 커서의 다음 행 위치에 붙여 넣기

P : 커서가 있는 위치에 붙여 넣기

u : 실행 취소(undo)

 

3. 실행 모드(Last line mode)

(명령 모드에서 : / ? 입력)

 

:set nu => vi 편집기 줄 번호 생성

:set nonu => vi 편집기 줄 번호 삭제

 

:q => vi 편집기를 종료함 (quit)

:w => 편집 중인 문서를 저장 (write)

:w [파일명] => 편집 중인 문서를 [파일명]으로 저장

:w >> [파일명] => 편집 중인 문서를 [파일명]에 덧붙여서 저장

:e [파일명] => [파일명] 불러오기 (저장이 선행)

:[명령어] ! => 명령어 강제 실행

 

/[찾을 문자] => 현재 위치에서부터 아래 방향으로 찾을 문자 검색

? [찾을 문자]현재 위치에서부터 위쪽 방향으로 찾을 문자 검색

n => 찾은 문자 아래로 다음 글자 찾아서 이동

shift n (N) => 찾은 문자 위로 다음 글자 찾아서 이동

 

! = vi => vi 에디터를 빠져나가지 않고 파일이나 디렉터리 생성 및 확인

ex) :!mkdir /test/korea123 => 생성

:!ls –l /test => 확인

 

[패턴 검색 및 교체]

: %s/old/new/gc => oldnew로 하나씩 교체

: %s/old/new/ 또는 %s/old/new/g => oldnew로 한 번에 교체

 

ex) UID => GID 하나씩 바꿀 때 : %s/UID/GID/gc

UID => GID 한 번에 바꿀 때 : %s/UID/GID/ 또는 :%s/UID/GID/g

 

:1,20s/old/new => 1번부터 20번째 줄까지 모든 oldnew로 교체

 

다음 포스팅에서는 리눅스의 alias에 대해 알아보겠습니다.