코딩 기록 저장소

[23-01/유닉스 시스템] vi 사용법 본문

학교 공부/유닉스 시스템

[23-01/유닉스 시스템] vi 사용법

KimNang 2023. 4. 25. 12:51

1. 유닉스 편집기

유닉스 편집기의 종류

■ 행 단위 편집기

- ed

    - 유닉스 초기에 사용 -> 지금은 거의 사용하지 않음

- ex

    - 단독으로 사용하기 보다는 vi와 연결하여 사용

 

■ 화면 단위 편집기

- vi

    - vi와 유사한 화면 편집기

    - 솔라리스는 vi 명령을 사용하면 vim을 실행함

- Emacs

    - 막강한 기능 제공 -> 설치해서 사용해야 함

 

모드형과 비모드형

■ 모드형

- 명령모드에서 입력한 키는 명령으로 간주

- 입력모드에서 입력한 키는 데이터로 간주

- 모드를 바꾸기 위한 특수 키가 있음 (ex : Esc)

- vi는 모드형

 

■ 비모드형

- 입력한 모든 키는 데이터로 간주됨

- 명령은 특수키(Ctrl, Alt 등)와 일반키의 조합으로 구성

- ex) 아래 한글, 워드

2. vim의 사용 방법

vi 동작 구조

- 파일 내용을 잘못 수정한 경우 버퍼의 내용 무시

- 작업 취소기능 제공

 

vi 동작 모드

vim

- 새로운 파일 시작

- 파일 저장할 때 이름 지정

- 유닉스 초기에 사용 -> 지금은 거의 사용하지 않음

 

vi 파일 이름

- 지정한 이름이 없으면 새로운 파일 생성

- 지정한 이름이 있으면 기존 파일 열기

- vi first -> first라는 파일 열림

- vi -> 빈 파일이 열림

 

vi 종료와 저장
명령키 기능
:q vim에서 작업한 것이 없을 때 그냥 종료함
:q! 작업한 내용을 저장하지 않고 종료함
:w [ 파일명 ] 작업한 내용을 저장만 함. 파일명을 지장하면 새 파일로 저장함
:wq, :wq! 작업한 내용을 저장하고 vim 종료
ZZ ( Shift + zz ) 작업한 내용을 저장하고 vim 종료

 

입력 모드로의 전환

- ESC 키를 누르면 다시 명령 모드가 됨

명령키 기능
i 커서 앞에 입력함 (현재 커서 자리에 입력)
a 커서 뒤에 입력함 (현재 커서 다음 자리에 입력)
o 커서가 위치한 행의 다음 행에 입력함
l 커서가 위치한 행의 첫 컬럼으로 이동해 입력함
A 커서가 위치한 행의 마지막 컬럼으로 이동해 입력함
O 커서가 위치한 행의 이전 행에 입력함

 

커서 이동
명령키 기능
k 커서를 한 행 위로 이동시킴
j 커서를 한 행 아래로 이동시킴
l 커서를 한 문자 오른쪽으로 이동시킴
h 커서를 한 문자 왼쪽으로 이동시킴
^ 또는 0 커서를 현재 행의 처음으로 이동시킴
$ 커서를 현재 행의 마지막으로 이동시킴
- 커서를 이전 행의 처음으로 이동시킴
+ 또는 Enter 커서를 다음 행의 처음으로 이동시킴
H 커서를 화면의 맨 위 행으로 이동시킴
M 커서를 화면의 중간 행으로 이동시킴
L 커서를 화면의 맨 아래 행으로 이동시킴
w 커서를 다음 단어의 첫 글자 위치로 이동시킴
b 커서를 앞 단어의 첫 글자 위치로 이동시킴
e 커서를 다음 단어의 마지막 글자 위치로 이동시킴

 

■ 커서 이동 예제

 

화면 이동

■ 화면 이동

명령키  기능
Ctrl + u 반 화면 위로 이동시킴
Ctrl + d 반 화면 아래로 이동시킴
Ctrl + b  한화면 위로 이동시킴
Ctrl + f 한 화면 아래로 이동시킴
Ctrl + y 화면을 한 행만 위로 이동시킴
Ctrl + e 화면을 한 행만 아래로 이동시킴

 

■ 지정한 행으로 이동

명령키 기능
G (Shift + g) 마지막 행으로 이동함
행번호G (Shift + g) 지정한 행으로 이동함
:행번호 지정한 행으로 이동함
:$ 마지막 행으로 이동함

 

수정 및 삭제

■ 내용 수정 

명령키 기능
r 커서가 위치한 문자를 다른 문자로 수정함
cw, #cw 커서의 위치부터 현재 단어의 끝까지를 새로 입력한 내용으로 수정함. ESC키를 입력하면 수정이 종료됨 (#에는 수정할 단어의 수를 지정, 예를 들어 3cw는 커서 위치부터 3단어 수정)
s, #s 커서가 위치한 문자를 ESC키를 입력할 때까지 입력한 내용으로 수정함 (#에는 수정할 문자의 수를 지정, 예를 들어 5s는 커서 위치부터 5글자를 수정
cc 커서가 위치한 행의 내용을 모두 수정함
C 커서의 위치를 행의 끝까지 수정함

 

■ 내용 삭제 및 취소

명령키 기능
x, #x 커서가 위치한 문자를 삭제함 (#은 삭제할 문자 수)
dw, #dw 커서 위치의 단어를 삭제함 (#은 삭제할 단어 수)
dd, #dd 커서가 위치한 행을 삭제함 (#은 삭제할 행의 수, 5dd는 커서 위치부터 5행을 삭제)
u 방금 수행한 명령을 취소함
U 해당 행에서 한 모든 명령을 취소
:e! 마지막으로 저장한 내용 이후의 것을 버리고 새로 작업함

 

편집 기능

- 복사하기 / 붙이기 / 잘라내기 명령

- 버퍼의 사용

- 마지막 행 모드에서 복사하기와 잘라내기

- 검색하기 / 바꾸기

 

■ 복사하기 / 붙이기 / 잘라내기 명령

명령키 기능
yy, #yy 커서가 위치한 행을 복사함 (#에는 복사할 행의 수 지정, 예를 들어 3yy하면 3행 복사)
p(소문자) 커서가 위치한 행의 아래쪽에 붙임
P(대문자) 커서가 위치한 행의 위쪽에 붙임
dd, #dd 커서가 위치한 행을 잘라둠 (#에는 잘라둘 행의 수 지정, 예를 들어 3dd 명령을 입력하면 3행 잘라두기 (삭제))

 

■ 버퍼의 사용

● 버퍼

- vim은 작업 내용을 버퍼에 저장 -> 실행 취소 가능

- 복사하기, 잘라내기에 사용

● 버퍼 종류

- Unnamed buffer : 이름 없는 버퍼

- Named buffers : 이름이 있는 버퍼

- Numbered buffers : 번호가 있는 버퍼

● 사용 예

- "a3yy -> 현재 행부터 아래로 3줄을 a버퍼에 저장

- "ap -> a버퍼의 내용을 붙이기

 

■ 마지막 행 모드에서 복사하기와 잘라내기

● 범위 지정하기

명령키 기능
1, $ 또는 % 1행부터 마지막 행까지 지정
1 ,. 1행부터 커서가 있는 행까지 지정함
.,$ 커서가 있는 행부터 마지막 행까지 지정
,-3 현재 행부터 앞으로 세 번째 행까지 지정함
10,20 10행부터 20행까지 지정함

 

● 복사하기 / 잘라내기

명령키 기능
:#y #으로 지정한 행을 복사함 (ex :10y -> 10행을 복사)
:<범위>y 범위로 지정한 행을 복사함 (:10,20y -> 10행~20행까지 복사)
:#d #으로 지정한 행을 삭제함 (:10d -> 10행 삭제)
:<범위>d 범위로 지정한 행을 삭제함 (:10,20d -> 10행~20행까지 삭제)
:pu 현재 행 다음에 버퍼의 내용을 붙임
:#pu #으로 지정한 행 다음에 버퍼의 내용을 붙임 (:5pu)

 

● 검색하기

- 검색을 위해 마지막 행 모드 이동 -> / 나 ? 입력

명령키 기능
/문자열 문자열을 아래 방향으로 검색함
?문자열 문자열을 위 방향으로 검색함
n 원래 찾는 방향으로 다음 문자열을 찾음
N 역방향으로 다음 문자열을 찾음

 

● 바꾸기

- 기존의 문자열을 다른 문자열로 바꾸려면 먼저 :를 입력 -> 마지막 행 모드로 이동

- 파일 전체 대상 또는 특정 범위만 저장 실행 가능

명령키 기능
:s/문자열1/문자열2/ 커서가 위치한 행의 첫 번째 문자열1을 문자열2로 바꿈
:%s/문자열1/문자열2/g 파일 전체에서 모든 문자열1을 문자열2로 바꿈
:<범위>s/문자열1/문자열2/ <범위> 안의 모든 행에 대해서 각 행의 첫 번째 문자열을 찾아 문자열2로 바꿈
:<범위>s/문자열1/문자열2/g <범위> 안의 모든 행에서 모든 문자열1을 문자열2로 바꿈
:<범위>s/문자열1/문자열2/gc <범위> 안의 모든 행에 대해서 각 문자열1을 문자열2로 바꿀 때 수정할지 여부를 물음

 

비주얼 모드로의 전환

- 편집할 블록을 선택 -> 비주얼 모드

- v, V, Ctrl+v 명령키 입력 -> 서로 다른 비주얼 모드

● 비주얼 모드 전환키

구분 명령키 기능
비주얼 v 현재 커서 위치부터 블록 지정
비주얼 라인 V(Shift + v) 현재 커서가 위치한 행 단위로 블록 지정
비주얼 블록 Ctrl + v 현재 커서가 위치한 열부터 열 단위로 블록 지정

 

● 블록 적용 명령키

명령키 기능
y 블록 복사
d 블록 삭제

 

기타 유용한 명령키

■ 파일 읽어오기 / 여러 파일 편집하기 명령키

명령키 기능
:r 파일명 지정한 파일을 읽어 현재 커서 위치로 삽입함
:e 파일명 지정한 파일로 전환
(기존 파일을 :w로 저장한 뒤에 실행해야 함)
:n vim을 시작할 때 여러 파일명을 지정했을 경우
다음 파일로 자업을 이동함

 

■ vim에서 셸 명령 사용하기

명령키 기능
:! 셸 명령 vim 작업을 잠시 중단하고 셸 명령을 실행함
(vim으로 돌아오려면 Enter키 입력)
:sh vim을 잠시 빠져나가서 셸 명령을 실행함
(vim으로 돌아오려면 exit 명령 입력)

 

■ 기타 명령 알아보기

명령키 기능
^l (소문자 L) 화면을 다시 출력함
^g 현재 행 번호를 마지막 행에 출력함
Shift + j (대문자 J) 현재 행과 아래 행을 연결하여 하나의 행으로 만듦
. 바로 직전에 했던 명령을 반복함

 

3. vim의 환경 설정

vi 환경을 설정하는 특수 명령와 변수들

- 행 번호 표시

- 특수 문자 표시

- 현재 모드 표시하기

- 환경 설정값 표시하기

- 모든 환경 변수 표시하기

 

● vim 환경 설정 명령

명령 기능
:set nu 파일 내용의 각 행에 행 번호를 표시함
(보이기만 할 뿐 저장은 되지 않음)
:set nonu 행 번호를 감춤
:set list 눈에 보이지 않는 특수 문자를 표시함 (tab:^l, eol:$ 등)
:set nolist 특수 문자를 감춤
:set showmode 현재 모드를 표시함
:set noshowmode 모드 표시를 감춤
:set set으로 설정한 모든 vim 변수를 출력함
:set all 모든 vim 변수와 현재 값을 출력함