8. 텍스트 편집기 활용 (vi)
8.1 vi 기본 사용법
vi 시작하고 종료 하기
- 지정된 파일을 편집한다. 파일을 지정하지 않으면 빈 파일이 열린다.
명령 키 | 기능 |
:q | 저장하지 않고 종료 |
:q! | 작업한 내용을 저장하지 않고 강제 종료 |
:w [파일명] | 작업한 내용을 저장, 파일명을 지정하면 새 파일로 저장 |
:wq , :wq! | 작업한 내용을 저장하고 종료 |
ZZ | 작업한 내용을 저장하고 종료 |
입력 모드 전환 명령 키
명령 키 | 기능 |
i | 커서 앞에 입력 (insert) |
a | 커서 뒤에 입력 (append) |
o | 다음 행에 입력 (open) |
I | 행의 첫 칼럼으로 이동하여 입력 |
A | 행의 마지막 칼럼으로 이동하여 입력 |
O | 앞 행에 입력 |
커서 이동 명령 키
명령 키 | 기능 |
k | 한 행 위로 이동 |
j | 한 행 아래로 이동 |
l | 한 글자 오른쪽으로 이동 |
h | 한 글자 왼쪽으로 이동 |
^ 또는 0 | 행의 처음으로 이동 |
$ | 행의 마지막으로 이동 |
- | 앞 행의 처음으로 이동 |
+ 또는 Enter | 다음 행의 처음으로 이동 |
H | 화면의 맨 윗 행으로 이동 (high) |
M | 화면의 중간 행으로 이동 (middle) |
L | 화면의 맨 아랫 행으로 이동 (low) |
w | 다음 단어의 첫 글자로 이동 (word) |
b | 앞 단어의 첫 글자로 이동 (back) |
e | 단어의 마지막 글자로 이동 (end) |
테스트용 텍스트 파일 생성
$ seq 1 200 | sed 's/^/line /' > practice.txt
화면 이동 명령 키
명령 키 | 기능 |
Ctrl + u | 화면의 위쪽 절반으로 이동 (up) |
Ctrl + d | 화면의 아래쪽 절반으로 이동 (down) |
Ctrl + b | 화면의 한 페이지 위로 이동 (back) |
Ctrl + f | 화면의 한 페이지 아래로 이동 (foward) |
Ctrl + e | 화면을 한 줄 아래로 스크롤 |
Ctrl + y | 화면을 한 줄 위로 스크롤 |
zz | 현재 행을 화면의 중앙으로 이동 |
zt | 현재 행을 화면의 상단으로 이동 (top) |
zb | 현재 행을 화면의 하단으로 이동 (bottom) |
ctrl
+ u
를 사용할 때 u 명령어를 사용하지 않게 주의해야한다.
8.2 vi 고급 기능
행 번호 켜기
명령 키 | 기능 |
:set number , :se nu | 행 번호 켜기 |
:set nonumber , :se nonu | 행 번호 끄기 |
특정 행으로 바로 이동하는 명령 키
명령 키 | 기능 |
:n | n번째 행으로 이동 (n 은 행 번호) |
nG | n번째 행으로 이동 (n 은 행 번호) |
gg | 파일의 첫 번째 행으로 이동 |
G | 파일의 마지막 행으로 이동 |
H | 화면의 첫 번째 행으로 이동 |
M | 화면의 중간 행으로 이동 |
L | 화면의 마지막 행으로 이동 |
[실습] vi 화면 모드 변경 및 화면 이동하기
내용 수정 명령 키
명령 키 | 기능 |
r | 커서 위치 글자 수정 |
cw , #cw | 단어 수정, # 은 수정할 단어 수 지정 |
s , #s | 글자 수정, # 은 수정할 글자 수 지정 |
cc | 행의 모든 내용 수정 |
C | 행의 끝까지 수정 |
내용 삭제 명령 키
명령 키 | 기능 |
x , #x | 글자 삭제, # 은 삭제할 글자 수 지정 |
dw , #dw | 단어 삭제, # 은 삭제할 단어 수 지정 |
dd , #dd | 행 삭제 후 버퍼에 저장 (잘라내기), # 은 삭제할 행 수 지정 |
D | 행의 끝까지 삭제 |
명령 취소 및 되돌리기
명령 키 | 기능 |
u | 마지막 명령 취소 (undo) |
Ctrl + r | 마지막 취소 명령 되돌리기 (redo) |
U | 마지막으로 편집한 한 줄의 모든 변경 사항 되돌리기 |
:e! | 마지막 저장 시점 이후 변경사항 모두 취소 |
복사, 잘라내기, 붙여넣기
명령 키 | 기능 |
yy , #yy | 행 복사, # 은 복사할 행 수 지정 |
p | 현재 행 아래에 붙여넣기 |
P | 현재 행 위에 붙여넣기 |
[실습] vi 문서 편집하기
네임드 버퍼 사용 ("a~z
)
- vi 에서 버퍼라는 개념이 있어서, 내용을 삭제하거나, 복사하면 버퍼에 쌓여서 붙여넣을 수 있다.
명령 키 | 기능 |
"ayy | a 버퍼에 현재 행 복사 |
"a3yy | a 버퍼에 현재부터 3행 복사 |
"ap | a 버퍼의 내용을 현재 위치 아래에 붙여넣기 |
"add | a 버퍼에 현재 행 잘라내기 |
"a3dd | a 버퍼에 현재부터 3행 잘라내기 |
"Ayy | a 버퍼에 행 추가 복사 (append) |
"Ap | a 버퍼의 내용을 추가로 붙여넣기 |
"ay | 비주얼 모드에서 선택한 텍스트를 a 버퍼에 복사 |
"ad | 비주얼 모드에서 선택한 텍스트를 a 버퍼에 잘라내기 |
:registers 또는 :reg | 모든 레지스터(버퍼 포함) 내용 확인 |
비주얼 모드 명령 키
명령 키 | 기능 |
v | 문자 단위 선택 |
V | 행 단위 선택 |
Ctrl + v | 블록(직사각형) 선택 |
o | 선택 영역 반대 끝으로 이동 |
Esc | 비주얼 모드 종료 |
d | 선택 삭제 |
y | 선택 복사 |
c | 선택 변경 |
> / < | 들여쓰기 / 내어쓰기 |
u / U | 소문자 / 대문자 변환 |
g~ | 대소문자 반전 |
= | 자동 정렬 |
r | 블록을 문자로 대체 |
J | 줄 합치기 |
범위 지정 명령 (마지막 행 모드)
명령 키 | 기능 |
:n,m | n~m행 지정 |
:% | 전체 파일 지정 |
:.,$ | 현재 ~ 마지막 행 지정 |
:.,+n / :.,-n | 현재부터 n행 이후 / 이전 |
:n,. / :1, | n행부터 현재 / 1행부터 현재 |
:n,$ | n행부터 마지막 |
범위 명령 활용
명령어 | 기능 | 예시 |
d | 삭제 | :1,10d |
y | 복사 | :1,10y |
c | 변경 | :1,10c |
m / t | 이동 / 복사 | :1,10m 20 / :1,10t 20 |
s | 치환 | :1,10s/foo/bar/g |
> / < | 들여쓰기 / 내어쓰기 | :1,10> |
w | 파일 저장 | :1,10w filename |
! | 셸 명령 실행 | :1,10!sort |
붙여넣기 명령
명령 키 | 기능 |
:#y / :#d | 행 복사 / 잘라내기 |
:pu / :#pu | 붙여넣기 (현재 / 지정한 위치 아래) |
[실습] 범위 지정
검색 및 대치 명령
명령 키 | 기능 |
/문자열 /?문자열 | 아래 / 위 방향 검색 |
n / N | 다음 / 이전 결과 이동 |
:s/old/new | 현재 행 첫 번째 일치 치환 |
:%s/old/new/g | 전체 치환 |
:<범위>s/old/new/gc | 범위 내 치환 (승인 필요) |
[실습] 텍스트 대치
파일 관련 명령
명령 키 | 기능 |
:r 파일명 | 파일 내용 삽입 |
:e 파일명 | 다른 파일 열기 |
:args 파일명1 파일명2 파일명3 | 여러 파일 한번에 다시 열기 |
:n | 다음 파일로 이동 |
셸 명령 실행
명령 키 | 기능 |
:! 명령어 | 셸 명령 실행 후 복귀 |
:sh | 셸로 진입 (exit로 복귀) |
기타 유용한 명령어
명령 키 | 기능 |
Ctrl + l | 화면 다시 출력 |
Ctrl + g | 현재 행 번호 출력 |
J | 현재 행과 아래 행 합치기 |
. | 마지막 명령 반복 |
~ | 대소문자 반전 |
Paste 모드 설정
명령어 | 기능 |
:set paste | 붙여넣기 모드 ON |
:set nopaste | 붙여넣기 모드 OFF |
명령어 암기 팁
d
: 삭제 (delete) c
: 치환 (change) y
: 복사 (yank) p
: 붙여넣기 (paste) u
: 취소 (undo) i
/ a
: 삽입 / 추가 o
: 새로운 줄 삽입 (open) H
, M
, L
: 화면 상단, 중간, 하단
nano 소개
[번외] 텍스트 편집기 (nano)
power shell 문제
[번외] PowerShell에서 vi
사용 시 단축키 충돌 문제
요약
vi
는 명령/입력/비주얼 모드를 기반으로 작동하며, 다양한 편집 명령어를 지원한다. - 커서 이동, 수정, 복사, 붙여넣기, 검색, 치환, 범위 지정 등 효율적인 편집 기능을 제공한다.
- 텍스트 버퍼와 네임드 버퍼, 다중 창 기능 등은 고급 사용에도 매우 유용하다.
- 익숙해질수록 손이 빠르고 강력한 편집 환경이 된다. 어렵다면 다른 편집기로 시작해도 괜찮다.
[번외] Visual Studio Code