vi는 리눅스 및 유닉스 시스템에서 널리 사용되는 텍스트 편집기입니다. vi는 고급 기능을 제공하여 코드 작성, 텍스트 편집, 파일 수정 등의 작업을 효율적으로 처리할 수 있습니다. vi는 명령 모드와 입력 모드로 나누어져 있으며, 다양한 작업을 명령어를 통해 수행할 수 있습니다.
1. vi 기본 구조
명령 모드 (Command Mode): vi의 기본 모드로, 텍스트를 수정하는 것이 아니라 커서를 이동시키거나 명령어를 입력할 수 있습니다.
입력 모드 (Insert Mode): 텍스트를 직접 입력하거나 수정할 수 있는 모드입니다.
명령줄 모드 (Ex Mode): 파일 저장, 종료 등 파일 관련 명령을 입력하는 모드입니다. :로 진입할 수 있습니다.
2. vi에서 할 수 있는 주요 작업
(1) 텍스트 편집
입력 모드로 전환: 명령 모드에서 i (현재 위치 앞에 입력), I (현재 줄의 맨 앞에 입력), a (현재 위치 뒤에 입력), A (현재 줄 끝에 입력) 등으로 입력 모드로 들어갑니다.
텍스트 삭제:
x: 현재 커서 위치의 문자를 삭제합니다.
dd: 현재 줄을 삭제합니다.
d{motion}: 커서 위치에서 {motion} 위치까지 삭제합니다.
dw: 현재 단어를 삭제합니다.
d$: 현재 위치에서 줄 끝까지 삭제합니다.
텍스트 복사 및 붙여넣기:
yy: 현재 줄을 복사합니다.
y{motion}: 특정 범위의 텍스트를 복사합니다.
p: 커서 뒤에 복사한 텍스트를 붙여넣습니다.
P: 커서 앞에 복사한 텍스트를 붙여넣습니다.
텍스트 변경:
r{char}: 현재 커서 위치의 문자를 {char}로 변경합니다.
cw: 커서부터 단어 끝까지 삭제하고 입력 모드로 전환합니다.
cc: 현재 줄을 삭제하고 입력 모드로 전환합니다.
(2) 커서 이동
단어, 문장, 줄 단위 이동:
h: 왼쪽으로 한 문자 이동
j: 아래로 한 줄 이동
k: 위로 한 줄 이동
l: 오른쪽으로 한 문자 이동
w: 다음 단어의 시작으로 이동
b: 이전 단어의 시작으로 이동
0: 현재 줄의 맨 앞까지 이동
$: 현재 줄의 맨 끝까지 이동
gg: 파일의 맨 처음으로 이동
G: 파일의 맨 끝으로 이동
(3) 검색 및 치환
검색:
/단어: 파일 내에서 단어를 검색합니다.
?단어: 파일 내에서 단어를 역방향으로 검색합니다.
n: 다음 검색 결과로 이동
N: 이전 검색 결과로 이동
치환:
:s/old/new: 현재 줄에서 old를 new로 변경합니다.
:s/old/new/g: 현재 줄에서 모든 old를 new로 변경합니다.
:%s/old/new/g: 전체 파일에서 모든 old를 new로 변경합니다.
(4) 파일 관련 작업
파일 저장 및 종료:
:w: 파일을 저장합니다.
:q: vi를 종료합니다. (변경 사항이 있을 경우 종료되지 않음)
:wq: 파일 저장 후 종료합니다.
:x: :wq와 동일한 명령어입니다.
:q!: 변경 사항을 저장하지 않고 종료합니다.
다른 파일 열기:
:e 파일명: 다른 파일을 열기
:bnext: 다음 열린 파일로 이동
:bprev: 이전 열린 파일로 이동
(5) 텍스트 조작 (Visual Mode)
시각 모드로 텍스트 선택:
v: 문자 단위로 텍스트를 선택
V: 줄 단위로 텍스트를 선택
Ctrl+v: 블록 선택 모드로 진입
y: 선택한 텍스트를 복사
d: 선택한 텍스트를 삭제
>: 선택한 텍스트를 오른쪽으로 들여쓰기
<: 선택한 텍스트를 왼쪽으로 내어쓰기
(6) 여러 파일 작업 (탭, 버퍼 사용)
여러 파일 열기:
:tabnew 파일명: 새 탭으로 파일을 엽니다.
:tabnext: 다음 탭으로 이동
:tabprev: 이전 탭으로 이동
버퍼 사용:
:b #: 마지막 열린 파일로 전환
:bN: N 번째 열린 파일로 전환
(7) 기타 유용한 명령어
파일에 대한 정보:
:set number: 줄 번호 표시
:set relativenumber: 상대적인 줄 번호 표시
:set ignorecase: 검색 시 대소문자 구분 없이 검색
매크로 사용:
q{레지스터}: 매크로 녹음 시작 (예: qa는 a 레지스터에 녹음)
{명령어}q: 매크로 녹음 종료
{레지스터}@: 매크로 실행 (예: @a)
---
결론
vi는 매우 강력한 텍스트 편집기로, 다양한 기능을 제공하며 이를 통해 코드 작성, 텍스트 편집, 설정 파일 수정 등을 효율적으로 처리할 수 있습니다. 위 명령어들을 익히고 잘 활용하면 리눅스 환경에서 작업하는 데 많은 도움이 될 것입니다.