Snow flake

[command] vi, vim 기본 사용법 본문

카테고리 없음

[command] vi, vim 기본 사용법

MAYSON 2026. 9. 16. 22:11
반응형

지금까지 다룬 명령어들은 모두 터미널에서 한 줄로 실행하는 것들이었는데, 실제로 설정 파일을 열어서 내용을 직접 편집해야 하는 경우도 많습니다. GUI 환경이 없는 리눅스 서버에서는 거의 항상 vi 또는 vim이 기본으로 설치되어 있어서, 이 편집기 사용법은 서버 작업의 기본기라고 할 수 있습니다.

vi와 vim의 관계

vi는 오래된 유닉스 계열 표준 편집기이고, vim(Vi IMproved)은 vi를 개선한 버전입니다. 대부분의 최신 리눅스 배포판에서는 vi라고 입력해도 실제로는 vim이 실행되도록 설정되어 있습니다. 문법 강조, 실행 취소(undo) 등 vi보다 편의 기능이 많아서, 실무에서는 보통 vim을 쓴다고 봐도 됩니다.

모드 개념 이해하기

vi/vim을 처음 접했을 때 가장 헷갈리는 부분이 "모드" 개념입니다. 일반 편집기와 달리 vi는 상황에 따라 다른 모드로 동작합니다.

명령 모드(Normal/Command mode): 파일을 열면 기본으로 시작되는 모드. 이동, 삭제, 복사 등 명령을 입력하는 상태이며, 글자를 입력해도 바로 텍스트로 들어가지 않습니다
-- 입력 모드(Insert mode): 실제로 텍스트를 입력/수정할 수 있는 상태
-- 명령줄 모드(Command-line mode): :로 시작하며, 저장/종료/치환 등의 명령을 실행하는 상태

# 파일 열기
vi readme.txt

# 명령 모드에서 입력 모드로 전환
i    # 현재 커서 위치에서 입력 시작
a    # 커서 다음 위치에서 입력 시작
o    # 현재 줄 아래에 새 줄을 만들고 입력 시작

# 입력 모드에서 명령 모드로 복귀
ESC

vi를 처음 쓸 때 가장 많이 하는 실수가, 파일을 열자마자 글자를 입력하려다가 화면이 이상하게 움직이는 경우입니다. 이는 아직 명령 모드인 상태에서 글자를 쳤기 때문에, 그 글자들이 각각 명령으로 해석돼서 생기는 현상입니다. 먼저 i를 눌러 입력 모드로 전환한 다음 텍스트를 입력해야 합니다.

저장하고 종료하기

# 명령줄 모드로 전환 후 아래 명령 입력 (ESC를 먼저 눌러 명령 모드로 돌아온 상태에서 : 입력)

:w        # 저장만 (종료하지 않음)
:q        # 종료 (변경사항 없을 때만 가능)
:wq       # 저장 후 종료 (가장 많이 씀)
:q!       # 저장하지 않고 강제 종료 (변경사항 버림)
:wq!      # 강제로 저장 후 종료 (읽기 전용 파일 등에서 사용)

:wq는 실무에서 가장 자주 쓰는 조합입니다. 설정 파일을 수정하고 저장할 때 바로 이 명령을 씁니다. 반대로 실수로 뭔가를 잘못 건드렸을 때는 :q!로 변경사항을 버리고 나가면 안전합니다.

삭제, 복사, 붙여넣기 (명령 모드)

# 삭제 (delete)
x         # 커서 위치의 글자 한 개 삭제
dd        # 현재 줄 전체 삭제
5dd       # 현재 줄부터 5줄 삭제
dw        # 커서 위치부터 단어 하나 삭제

# 복사 (yank)
yy        # 현재 줄 복사
5yy       # 현재 줄부터 5줄 복사

# 붙여넣기 (put)
p         # 커서 다음 줄(또는 위치)에 붙여넣기
P         # 커서 이전 줄(또는 위치)에 붙여넣기

# 실행 취소/재실행
u         # 실행 취소 (undo)
Ctrl + r  # 재실행 (redo)

dd로 지운 줄이나 yy로 복사한 줄은 클립보드처럼 임시 저장되기 때문에, 바로 p를 누르면 그 내용이 붙여넣어집니다. 숫자를 명령 앞에 붙이면(5dd, 5yy) 해당 줄 수만큼 한 번에 처리할 수 있어서 여러 줄을 다룰 때 유용합니다.

검색과 치환

# 검색
/oracle       # 아래 방향으로 "oracle" 검색
?oracle       # 위 방향으로 "oracle" 검색
n             # 다음 검색 결과로 이동
N             # 이전 검색 결과로 이동

# 치환 (명령줄 모드에서 실행, sed와 문법이 유사함)
:s/old/new/          # 현재 줄에서 첫 번째로 매칭된 것만 치환
:s/old/new/g         # 현재 줄 전체에서 매칭된 것 전부 치환
:%s/old/new/g        # 파일 전체에서 매칭된 것 전부 치환

:%s/old/new/g는 파일 전체를 대상으로 특정 문자열을 한꺼번에 바꾸는 명령입니다. sed 글에서 다뤘던 sed -i 's/old/new/g'와 문법이 거의 비슷한데, 이는 vi/vim의 치환 문법이 sed에서 유래했기 때문입니다. 파일을 열어서 직접 눈으로 확인하며 치환할 때는 vi에서, 파일을 열지 않고 스크립트로 자동 처리할 때는 sed를 쓰는 식으로 구분하면 됩니다.

화면 이동과 줄 번호

# 커서 이동
gg        # 파일 맨 처음 줄로 이동
G         # 파일 맨 마지막 줄로 이동
숫자G      # 해당 줄 번호로 이동 (예: 50G는 50번째 줄로 이동)

# 줄 번호 표시
:set number    # 줄 번호 표시 켜기
:set nonumber  # 줄 번호 표시 끄기

로그 파일이나 설정 파일에서 특정 줄을 지목해서 확인해야 할 때, :set number로 줄 번호를 켜두면 grep 글에서 다뤘던 grep -n 결과(라인 번호)와 대응해서 바로 찾아갈 수 있어 편리합니다.

실무에서 자주 마주치는 상황

설정 파일을 수정하는 일반적인 흐름은 다음과 같습니다.

# 1단계: 설정 파일 열기
vi /home/oracle/scripts/connect.conf

# 2단계: 특정 값 검색
/OLD_DB_HOST

# 3단계: 커서를 값 위치로 옮긴 후 입력 모드로 전환해서 수정
i        # (또는 검색된 값을 지우고 새로 입력)

# 4단계: 수정 완료 후 명령 모드로 복귀
ESC

# 5단계: 저장하고 종료
:wq

# 6단계: 수정이 잘 됐는지 확인
cat /home/oracle/scripts/connect.conf

설정값 하나만 바꿀 때는 이렇게 vi로 직접 열어서 확인하며 수정하는 게 안전하고, 여러 서버의 같은 설정 파일을 일괄로 바꿔야 할 때는 sed 글에서 다뤘던 sed -i 방식이 더 효율적입니다. 상황에 맞게 두 방법을 구분해서 쓰는 게 실무에서 시간을 아끼는 방법입니다.

반응형
Comments