8. 텍스트 편집기 활용 (vi)

8.1 vi 기본 사용법

vi 시작하고 종료 하기

  • 지정된 파일을 편집한다. 파일을 지정하지 않으면 빈 파일이 열린다.
$ vi [파일]
  • 빈 파일을 연다
$ 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 사용 시 단축키 충돌 문제

요약

  1. vi는 명령/입력/비주얼 모드를 기반으로 작동하며, 다양한 편집 명령어를 지원한다.
  2. 커서 이동, 수정, 복사, 붙여넣기, 검색, 치환, 범위 지정 등 효율적인 편집 기능을 제공한다.
  3. 텍스트 버퍼와 네임드 버퍼, 다중 창 기능 등은 고급 사용에도 매우 유용하다.
  4. 익숙해질수록 손이 빠르고 강력한 편집 환경이 된다. 어렵다면 다른 편집기로 시작해도 괜찮다.

[번외] Visual Studio Code