학습목표
- 리눅스에서 사용하는 편집기의 종류를 알아본다
- 대표적인 화면 편집기인 vi 를 사용할 수 있다.
- vi 의 환경 설정을 할 수 있다.
1) 모드형(vi) : 입력 모드와 명령 모드를 구분
2) 비모드형(메모장) : 모드 구분이 없음 : 한글, 워드 등

vi text.txt #text.txt 라는 파일이 열린다. 이 파일이 없으면 빈 파일이 열린다.
vi # 빈 파일이 열리고, 나중에 파일명을 정할 수 있다.
| 모드 | 명령키 | 기능 |
|---|---|---|
| :q | vi 에서 작업한 것이 없을 때 그냥 종료한다. | |
| 마지막 행 모드 | :q! | 작업한 내용을 저장하지 않고 종료한다. |
| :w 파일명 | 작업한 내용을 저장만 한다. 파일명을 저장하면 다른 파일로 저장한다. | |
| :wq, :wq! | 작업한 내용을 저장하고 vi 를 종료한다. | |
| 명령모드 | ZZ (shift+zz) | 작업한 내용을 종료하고 vi 를 종료한다. |
| 명령키 | 기능 |
|---|---|
| i | 현재 커서 자리에 입력한다. |
| a | 현재 커서 다음 자리에 입력한다. |
| o | 커서가 위치한 행의 다음 행에 입력한다. |
| I(대문자 i) | 커서가 위치한 행의 첫 칼럼으로 이동하여 입력한다. |
| A | 커서가 위치한 행의 마지막 칼럼으로 이동하여 입력한다. |
| O | 커서가 위치한 행의 이전 행에 입력한다. |
Esc 키❖ i 명령키를 사용해 입력 모드로 전환하기
내용을 작성하고
Enter키를 누르면 다음 행으로 이동한다.
Esc키를 누르면 명령 모드로 전환ubuntu linux study
I like linux_명령 모드로 전환되고 커서가 x 위로 이동한다.
ubuntu linux study
I like linux커서가 마지막 글자인 x 에 있을 때 i 키를 누르고 'ubuntu' 를 입력할 경우
커서가 u 위로 이동한다.ubuntu linux study
I like linu ubuntux커서가 u에 있을 때 a키를 누르고 'linu' 를 입력할 경우, 커서가 u 위로 이동한다.
ubuntu linux study
I like linu ubuntu linux명령모드에서 o 를 입력하면 입력모드로 전환되고 커서가 아래 행으로 이동한다
ubuntu linux study
I like linu ubuntu linux
_
| 명령키 | 기능 |
|---|---|
| k / j | 커서를 한 행 위/아래로 이동한다. |
| l / h | 커서를 한 글자 오른쪽 / 왼쪽으로 이동한다. |
| ^ 또는 0 / $ | 커서를 현재 행의 처음 / 마지막으로 이동한다. |
- / + 또는 Enter | 커서를 앞 / 다음 행의 처음으로 이동한다. |
| H / M / L | 커서를 화면의 맨 위 / 중간 / 맨 아래 행으로 이동한다. |
| w / e | 커서를 다음 단어의 처음 / 마지막 글자로 이동한다. |
| b | 커서를 앞 단어의 첫 글자로 이동한다. |

| 기존 명령키 | 기능 | 추가 명령키 |
|---|---|---|
^u(ctrl+u) | 반 화면 위로 이동한다. | |
^d(ctrl+d) | 반 화면 아래로 이동한다. | |
^b(ctrl+b) | 한 화면 위로 이동한다. | Page Up |
^f(ctrl+f) | 한 화면 아래로 이동한다. | Page Down |
^y(ctrl+y) | 화면을 한 행만 위로 이동한다. | |
^e(ctrl+e) | 화면을 한 행만 아래로 이동한다. |
| 명령키 | 기능 |
|---|---|
G (shift + g) | 파일의 마지막 행으로 커서가 이동한다. |
행 번호 G(shift + g) | 지정한 행번호로 커서가 이동한다. |
| :행번호 | 지정한 행 번호로 커서가 이동한다 (마지막 행 모드). |
| :$ | 파일의 마지막 행으로 커서가 이동한다 (마지막 행 모드). |
| 명령키 | 기능 |
|---|---|
| r | 커서가 위치한 글자를 다른 글자로 수정한다 |
| cw, #cw | 커서 위치부터 현재 단어의 끝까지 수정한다. #에는 수정할 단어의 수를 지정한다. 예를 들어 3cw 는 커서 위치부터 3 단어를 수정한다. |
| s, #s | 커서 위치부터 Esc를 입력할 때까지 수정한다.#에는 수정할 글자의 수를 지정한다. 예를 들어 5s 는 커서 위치부터 5 글자를 수정한다. |
| cc | 커서가 위치한 행의 내용을 모두 수정한다. |
| C | 커서 위치부터 행의 끝까지 수정한다. |
❖ #### 수정하기 실습
한 글자 수정하기 : r
- r 명령키로 글자를 수정한다 (ㅣ -> w)
ubuntu winux study
I like linu ubuntu linux
단어 수정하기 : cw, #s 명령키
- winux 의 w 에 커서를 두고 cw 또는 5s 를 입력하여 수정 상태로 바꾸고 editor 입력후 Esc 키 입력
ubuntu _ study
I like linu ubuntu linuxubuntu editor study
I like linu ubuntu linux
행 단위 수정하기 : C, cc 명령키
- 커서의 위치부터 행의 끝까지 수정 : C 명령키
ubuntu editor study
I like linu ubuntu linux
- 현재 행의 모든 내용 삭제하고 다시 작성 : cc 명령키
_
I like linu ubuntu linux
| 명령키 | 기능 |
|---|---|
| x, #x | 커서 위치의 글자를 삭제한다. #에는 삭제할 글자 수를 지정한다. |
| dw, #dw | 커서 위치의 단어를 삭제한다. #에는 삭제할 단어 수를 지정한다. |
| dd, #dd | 커서 위치의 행를 삭제한다. #에는 삭제할 행의 수를 지정한다. |
D(shift+d) | 커서 위치부터 행의 끝까지 삭제한다. |
글자 삭제
- x 명령키로 l 삭제
ubuntu editor vi study
I like linu ubuntu linuxubuntu editor vi study
I like inu ubuntu linux여러 글자 삭제
- dw 명령키로 inu 삭제
ubuntu editor vi study
I like ubuntu linux
- 3x 로 inu 삭제
ubuntu editor vi study
I like _ubuntu linux행 삭제
- 커서 위치부터 행의 끝까지 삭제 : D
ubuntu editor vi study
I like _
- 행 전체 삭제 : dd
ubuntu editor vi study
_
| 명령키 | 기능 |
|---|---|
| u | 명령을 취소한다. |
| U | 해당 행에서 한 모든 명령을 취소한다. |
| :e! | 마지막으로 저장한 내용 이후의 것을 버리고 새로 작업한다. |
따라해보기
- vi 로 새로운 파일인 exec.txt 파일을 연다
- i를 입력하여 입력 모드로 전환하고 내용을 입력
- Esc 키를 입력하여 명령모드로 전환하고 :w 명령으로 파일 내용을 저장
- 커서를 3행의 beginner 로 이동 : 3G(3 누르고 G),I 또는 w
- beginner 를 expert 로 수정 : b(4번 누르면 단어의 첫글자씩 다음으로 이동)로 커서를 움직이고 cw 또는 8s
- 명령모드로 바꾸고 - 명령키로 2행의 첫 글자인 N 으로 이동
- w 명령키로 커서를 meet로 이동하고, 단어 meet 를 dw 명령키로 삭제
- 단어 y부터 행의 끝까지 D 명령키로 삭제
- U 명령키로 2행에서 한 모든 삭제를 취소
- :wq 명령으로 파일 내용을 저장하고 종료
| 명령키 | 기능 |
|---|---|
| yy, #yy | 커서가 위치한 행을 복사한다. #에는 복사할 행의 수를 지정한다. |
| p | 커서가 위치한 행의 아래쪽에 붙인다. |
| P | 커서가 위치한 행의 위쪽에 붙인다. |
| dd, #dd | 커서가 위치한 행을 잘라둔다. 삭제와 같은 기능이다. #에는 잘라둘 행의 수를 지정한다. |
test.txt 파일 열기
1) 2yy 명령키로 두 행을 모두 복사
2) 아래 행으로 이동하여 p 명령어로 붙이기
1) dd 로 3행 잘라내기
2) 커서를 2행으로 이동하여 P 명령어키로 붙이기
1) 언네임드 버퍼 : 이름을 붙이지 않은 버퍼
2) 네임드 버퍼 : 이름을 붙여서 사용할 수 았는 버퍼(문자 또는 숫자)
버퍼에 특성상, 한번에 하나의 내용밖에 저장할 수 없기때문에 불편한 점이 존재한다.
이를 보완하기 위하여 VI 에서는 사용자가 직접 정의한 버퍼(ex: 숫자버퍼, 네임드 버퍼) 를 사용할 수 있게 함.
네임드 버퍼 : (single letter)yy → single letter example : “a , “b , “c , “d ….
숫자 버퍼 : (single digit)yy → single digit example : “1 , “2 , “3 , “4 …
“ayy “a3yy “a1,5yy
2행을 잘라서 "a 버퍼에 저장 ->
"add
2행을 잘라서 "b 에 저장 ->
"bdd
① 커서를 1행으로 이동
② "b 버퍼의 내용을 1행 위 행에 붙여넣기 :
"bP
③ "a 버퍼의 내용을 1행 아래 행에 붙여넣기 :
"ap
| 명령키 | 기능 |
|---|---|
| 1, $ 또는 % | 1행부터 마지막 행까지 지정한다. |
| 1,. | 1행부터 커서가 있는 행까지 지정한다. |
| .,$ | 커서가 있는 행부터 마지막 행까지 지정한다. |
| ,-3 | 현재 행과 이전 세 행까지(총 네 행) 지정한다. |
| 10, 20 | 10부터 20행까지 지정한다. |
- 명령키에서 여러 행을 지정하는 경우, 숫자와 숫자 사이의 쉼표(,) 는 띄어쓰기 하지 않는다.
| 명령키 | 기능 |
|---|---|
| :#y | #로 지정한 행을 복사한다. 예를 들면 3y는 세 번째 행을 복사한다. |
| : <범위>y | 범위로 지정한 행을 복사한다. 예를 들면 2,4y 는 2~4 행을 복사한다. |
| :#d | #로 지정한 행을 잘라낸다(삭제). 예를 들면 3d는 세 번째 행을 잘라낸다. |
| : <범위>d | 범위로 지정한 행을 잘라낸다(삭제). 예를 들면 1,4d 는 1~4 행을 잘라낸다. |
| :pu | 현재 행 다음에 버퍼의 내용을 붙인다. |
| :#pu | #로 지정한 행 다음에 버퍼의 내용을 붙인다. 에를 들면 4pu 와 같이 지정한다. |
현재 커서는 2행에 위치
2행, 3행 잘라내기 -> :2,3d
2행 다음에 붙이기 -> :2pu
1,2행 복사하기 -> :1,2y
4행 다음에 붙이기 -> :4pu
| 명령키 | 기능 |
|---|---|
| /문자열 | 문자열 아래 방향으로 검색한다. |
| ?문자열 | 문자열 위 방향으로 검색한다. |
| n | 원래 찾던 방향으로 다음 문자열을 검색한다. |
| N | 역방향으로 다음 문자열을 검색한다. |
① 커서는 6행에 위치
② 검색하려고 /을 입력하면 커서가 마지막 행으로 이동
③ 검색할 문자열인 'ubuntu' 를 입력
④ Enter 를 누르면 6행이 파일의 마지막 행이므로 'search hit BOTTOM, continuung at TOP' 이라는 메세지를 출력
⑤ 3행의 ubuntu 로 커서 이동
계속 ubuntu 를 검색하려고 n을 입력하면 4향의 ubuntu로 커서가 이동
| 명령키 | 기능 |
|---|---|
| :s/문자열1/문자열2/ | 커서가 위치한 행에서 첫 번째로 나오는 문자열1 을 문자열2로 바꾼다. |
| :%s/문자열1/문자열2/g | 파일 전체에서 모든 문자열1 을 문자열2 로 바꾼다 |
| :<범위>s/문자열1/문자열2/ | 범위 내 모든 각 행에서 첫 번째로 나오는 문자열1 을 찾아 문자열2로 바꾼다. |
| :<범위>s/문자열1/문자열2/g | 범위 내 모든 행에서 문자열1 을 문자열2로 바꾼다. |
| :<범위>s/문자열1/문자열2/gc | 범위 내 모든 행에서 문자열1 을 문자열2로 바꿀 때 수정할지 여부를 묻는다 |
- 1행의 like 를 LIKE 로 바꾸기 ->
:s/like/LIKE/
- 3,4 행의 editor 를 ubunut로 바꾸기 ->
:3,4s/editor/ubuntu/
- 3행 -
:s/ubuntu/UBUNTU/- 4행 -
:s/ubuntu/UBUNTU/g
- like 전체를 LIKE 로 바꾸기 ->
:%s/like/LIKE/g

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



| 명령키 | 기능 |
|---|---|
| :! 셸 명령 | vi 작업을 잠시 중단하고 셸 명령을 실행한다 (vi 로 돌아오면 Enter 를 누른다). |
| :sh | vi 를 잠시 빠져나가서 셸 명령을 실행한다 (vi 로 돌아오려면 exit 명령을 입력한다). |


| 명령키 | 기능 |
|---|---|
ctrl + l(소문자 L) | 현재 화면을 다시 출력한다. |
ctrl + g | 현재 커서 위치의 행 번호를 마지막 행에 출력한다. |
shift + j(대문자 J) | 현재 행과 아래 행을 연결하여 한 행으로 만든다. |
| .(마침표) | 바로 직전에 했던 명령을 반복한다. |
| ~(틸드) | 커서 위치의 글자를 대문자나 소문자로 바꾼다. |


| set 명령과 옵션 | 기능 |
|---|---|
| set nu | 파일 내용의 각 행에 행 번호를 표시한다(보이기만 할 뿐 저장되지는 않는다). |
| set nonu | 행 번호를 감춘다. |
| set list | 눈에 보이지 않는 특수문자를 표시한다(tab: ^, eol: $ 등). |
| set nolist | 특수문자를 감춘다. |
| set showmode | 현재 모드를 표시한다. |
| set noshowmode | 현재 모드를 감춘다. |
| set | set 으로 설정한 모든 vi 환경 설정 값을 출력한다. |
| set all | 모든 vi 환경 변수와 현재 값을 출력한다. |







