본문 바로가기
프로그래밍/리눅스

[리눅스] VI 편집기 사용법

by 소나기_레드 2023. 2. 28.

vi 편집기

unix의 일반 text 모드에서 사용되는 편집기에는 vi, emacs, pico 등이 있다.

특징

pico 편집기는 쉽고 단순하다. 간단한 편집 유틸리티 정도로 볼수 있음.

vi - 유닉스에서 가장 널리 사용되는 대중적인 편집기 *. 위키백과사전에 설명되어 있는 vi

emacs - 강력한 편집 기능 제공, vi 편집기에 비하면 더 복잡하고 크다.

* 레드헷을 포함한 대부분의 리눅스에서 기본적으로 사용되는 vi 편집기는 vi 편집기의 기능을 좀 더 향상 시킨
vim(vi improved) 이라는 편집기가 vi 라는 이름으로 사용되고 있으며 본래의 vi 편집기에 비해 사용하기 편한 좀
더 많은 기능을 제공한다.

 

vi 편집기 mode

vi 편집기 명령어는 크게 세 가지 모드로 나뉘어 질수 있다.

명령 모드 : vi 편집기의 기본모드.( 입력 상태이면 편집 명령어 사용 불가능)

입력모드 : i,I,a,A,o.O (입력모드 상태가 아니면 편집기 입력이 불가능)

확장모드(ex 모드, 또는 last line 모드라고 부른다.? - 왼쪽 하단에 명령어가 표시된다)

각 모드에서 사용하는 명령어는 정해져 있으며 입력모드 명령어가 가장 적다(i,I,a,A,o.O)

확장 모드 명령어는 명령어를 입력할 때 대부분 먼저 ‘:’을 붙이고 명령어를 입력함으로써

다른 모드 명령어와 구분이 된다.

 

각 모드 사이의 전환

명령어 모드 => 입력모드 전환 ; 입력모드 명령어중 하나를 사용.

입력모드 => 명령모드전환 ; esc 키 입력

입력모드 => 확장모드 ; 명령모드로 전환 후 확장모드 명령어 입력.

 

 

vi 편집기 명령어

커서 이동 명령

j(↓) 아래로 이동

k(↑) 위로 이동

h(←) 왼쪽으로 이동

l (→) 오른쪽으로 이동

G(go) 제일 끝줄로 이동

nG n번째 행으로 이동.

^b(back) 한 화면 위로 이동

^f(forward) 한 화면 아래로 이동

^u(up) 반 화면 위로 이동

^d(down) 반 화면 아래로 이동

e 한 단어 뒤로 이동

b 한 단어 앞으로 이동

0 줄의 제일 처음부터 이동

$ 줄의 제일 끝으로 이동

*. vi 편집기 명령어중 반복할 수 있는 일부 명령어 앞에? n(숫자)을 붙일 수 있다.
이때 n 의 의미는 n 뒤의 명령을 n 번 반복하라는 의미이다.
ex) 3dd => dd 명령을 세 번 반복하라. => 세 줄이 삭제된다.

 

입력 명령어

i 현재 커서 위치에 삽입(커서 위치에 문자를 오른쪽으로 한 칸 밀고 삽입)

a 현재 커서 위치 다음에 삽입 (a == "l + i")

o 현재 커서가 위치한 줄의 아랫줄에 삽입(o == "$ + a + Enter")

I 현재 커서가 위치한 줄의?맨 앞에 삽입 (I == "0 + i")

A 현재 커서가 위치한 줄의?맨 뒤에 삽입 (A == "$ + a")

O 현재 커서가 위치한 줄의?바로 위에 삽입

지우기 명령어

x 현재 커서 위치의 문자를 지운다. (nx? x를 n번 반복)

dd 현재 커서가 위치한 줄을 지운다. (ndd dd를 n번 반복)

dw 현재 커서가 위치한 단어를 지운다.

d$ 현재 커서가 위치한 곳부터 그 행의 끝까지를 지운다.

dG 현재 커서가 위치한 행부터 편집문서의 마지막 줄까지 삭제한다.

*. 삭제한 내용은 바로 지워지지 않고 버퍼에 저장되므로 붙여넣기 하거나 취소 할 수 있다.

* 리눅스에 서 사용하는 vim 편집기는 undo를 여러 번 수행할 수 있다

 

복사하기와 붙이기

yy(=Y) 현재 커서가 위치한 줄을 버퍼에 복사한다.

(nyy => 현재 커서가 위치한 곳부터 아래로 n 라인을 버퍼에 복사한다)

yw 현재 커서가 위치한 단어를 버퍼에 복사한다.

(nyw => 현재 커서가 위치한 단어부터 오른쪽으로 n개의 단어를 버퍼에 복사한다)

p 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.

P 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.? "xyy x라는 버퍼에 라인을 카피한다. (버퍼에 이름을 붙여서 사용하면 편집기가 열려 있는 동안은?버퍼의 내용을 잊어버리지 않는다.)

 

치환

r 현재 위치의 문자를 한개만 바꾼다.

R 현재 커서위치에서 오른쪽으로 esc 키를 입력할 때 까지 바꾼다.

cw 현재 위치의 단어를 바꾼다.

cc 현재 커서가 위치한 줄을 바꾼다.

C 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.

~ 대소문자를 서로 바꾼다.

 

기타 명령어

J 현재 줄과 다음 줄을 합한다.?

^g 현재 편집하고 있는 파일의 정보를 보여준다.

u 방금 한 명령을 취소한다.

^R (=redo) 취소한 명령을 다시 취소 (vim)

U 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.

. 방금한 명령을 되풀이 한다.

^l 화면 refresh

 

확장모드 명령어

:! shell command ; 편집기를 벗어나지 않은 상태로 shell command 를 실행한다.

:args 현재 편집하는 파일명을 보여준다.

:w 편집하는 내용을 덮어쓰기로 저장한다.

:w filename 현재 내용을 지정된 파일 이름으로 저장한다.

:w! 강제로 덮어쓰기를 한다.

:wq 현재 편집하는 내용을 저장하고 종료한다.

:wq! 현재 편집하는 내용을 강제로 저장하고 종료한다.

:q! 강제로 종료한다.

:e filename ;새로운 파일을 편집한다.

:e! 현재 파일을 저장하지 않고 편집이전의 상태에서 새로 작성한다.

:r filename 현재 커서위치 다음에 파일을 끼워 넣는다.

:14 r filename 14행 이후에 파일을 읽어 삽입한다.

:n1,n2d n1번째 행에서 n2번째 행까지를 지운다.

:n1,n2 w filename n1에서 n2행까지를 filename에 저장한다.

:3,$d 3번째 행에서 끝항까지 지운다.

:set 여러 가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경 변수를 보여준다.

:set nu ; 라인 넘버 붙이기 (<=> set nonu)

:set showmode ; 현재 명령 상태를 화면 하단에 표시

:set bg=dark 편집기 글자색을 밝게 표시 (vim)

:set ai 자동 들여쓰기

:set ic 문자열 검색시 대소문자 구분 안한다.

:ab문자 문자열? ; 문자열을 문자열 앞에 있는 문자로 줄여 사용할 수 있음.(아래아한글의 상용구 기능에 해당)

:set ts=n 기본 tab size를 n column 으로 한다.

:sp 편집기 화면 수평 분할(화면을 수평으로 여러 개 분할해서 사용할 때 쓴다) (vim)

:^ww 분할된 화면으로 커서 이동. (vim)

 

문자열검색

/패턴 ; 패턴에 해당하는 내용을 현재 커서위치로 부터 오른쪽에서 그리고 아래쪽으로 찾는다.

n 정방향 다음 찾기 (현재 진행방향으로 => 아래쪽으로)

N 역방향 다음 찾기 (현재 진행 방향 반대쪽으로 => 위쪽으로)

? 패턴 패턴에 해당하는 내용을 현재 커서위치로 부터 왼쪽에서 그리고 위쪽으로 찾는다.

 

문자열 치환

:n1,n2s/serch/replace/g ( => 시작행번호, 마지막행번호s/찾을패턴/바꿀패턴/옵션 )

(g 는 global의 의미 해당 라인의 문자열을 전부 치환, g옵션이 생략될 경우에는 한 라인에서 치환해야할 패턴이
여러 개일 경우 맨 왼쪽 에 있는 것만 치환됨.)

*. 옵션에 i 가 사용되면 intractive 모드로 명령어 실행, 바꾸기 전에 물어본다.
* . 키보드에 있는 'Del', 'PageUp','Home','End' 및 방향키는 vi 편집기에서는 사용되지 않는다.
(vi 편집기 명령에 사용되는 키가 아니므로 시스템 환경에 따라서 될 수도 있고 안될 수도 있음)

 

vi 환경설정.

환경설정 파일을 만들면 자주 사용되는 vi 명령을 디폴트값으로 사용 할 수 있다.
환경설정파일은 확장 모드 명령어만 사용
위치 $HOME/.exrc 또는 .vimrc

 

설정 파일예

set nu(=set number) : 라인번호를 붙임.

set ts=4 : tab 의 크기를 4칸으로 함

syn on(=syntax on) : syntax highlighting

set ai : 자동들여쓰기

set cindent : c 소스 코딩시 자동들여쓰기

set shiftwidth : 자동들여쓰기 간격

set showmode : 편집 상태를 화면 하단에 표시

set vb : visual beep (경고음을 시각적으로 표시)

set title : 제목표시줄에 현재 편집중인 파일명 표시

set ic(=ignorecase) : 문자열 검색 할 때 대/소문자 구분 안함

set bg=dark : 글자색을 밝게 표시되도록 한다.

** vi 편집기 연습문제 **
아래와 같은 문장을 vi 편집기로 작성하시오.

The mind has a ten eyes,
And the heart but
Yet the light of a whole life dies
When its love is done.

The night has a ten eyes,
The day but one;
Yet the light of the bright world dies
With the dying sun.
1번 예제에서 작성한 문장을 아래와 같이 수정하시오.

1. 맨첫번째줄에 빈줄을 만들고 제목 Light 를 입력하시오.(o)
2. The 또는 THE => THE(대문자)로 변경하시오 (치환)
3. 두번째 문장과 첫번째 문장의 위치를 서로 바꾸시오.(dd / p(P))
4. ten => thousand 로 수정하시오. (cw)
5. 각 라인앞에 '**%%**%%**' 기호를 붙이시오.
6. rigth를 => light 로 변경하시오.(cw)
7. heart but 뒤에 'one' 을 추가하시오. 
9. 파일명을 light 로 저장하시오.(:wq light)

* 결과)

                Light

**%%**%%** THE night has a ten thousand eyes, 
**%%**%%** THE day but one;
**%%**%%** Yet the light of the bright world dies
**%%**%%** With THE dying sun. 

**%%**%%** THE mind has a thousand eyes, 
**%%**%%** And THE heart but one; 
**%%**%%** Yet THE light of a whole life dies 
**%%**%%** When its love is done. 

출처 : http://parkbear01.springnote.com/pages/3036204.xhtml

'프로그래밍 > 리눅스' 카테고리의 다른 글

[리눅스] 시간 동기화  (0) 2023.02.28
[리눅스] FTP 설정 및 사용  (0) 2023.02.28
[리눅스] 기본 명령어  (0) 2023.02.28
[리눅스] 요일별 백업  (0) 2023.02.28
[리눅스] 개발환경의 개요도  (0) 2023.02.28

댓글