리눅스 서버 관리자라면 반드시 알아야 하는 텍스트 에디터가 vi다. 터미널 환경에서 파일을 편집할 때 가장 많이 사용하는 도구로, 어떤 리눅스 배포판에서도 기본적으로 설치되어 있다. vi(또는 vim)는 처음 접하면 다소 생소하고 어렵게 느껴질 수 있지만, 기본 명령어만 익히면 매우 강력하고 효율적인 텍스트 편집 도구로 활용할 수 있다. 20년 가까이 리눅스 서버를 관리하면서 느낀 점은, vi를 능숙하게 다루는 것이 시스템 관리의 효율성을 크게 높인다는 사실이다. GUI 환경이 없는 서버에서 작업할 때 vi는 내 손과 눈의 감각이 연결 된 몸의 신경 일부처럼 느껴지기도 한다.
1. vi 시작하기
vi를 시작하는 방법은 매우 간단하다. 터미널에서 다음과 같이 입력하면 된다:
vi 파일명
이미 존재하는 파일이라면 해당 파일을 열고, 존재하지 않는 파일이라면 새 파일을 생성한다.
예제 1: 새 파일 생성하기
vi test.txt
위 명령어를 입력하면 test.txt 파일이 열린다. 파일이 없으면 새로 생성된다.
예제 2: 기존 파일 열기
vi /etc/hosts
시스템의 hosts 파일을 열어 편집할 수 있다. 단, 권한이 필요한 파일은 sudo를 사용해야 한다.
예제 3: 특정 줄부터 파일 열기
vi +100 longfile.txt
longfile.txt 파일을 열면서 커서를 100번째 줄에 위치시킨다.
예제 4: 특정 패턴 위치로 파일 열기
vi +/검색어 filename.txt
파일을 열자마자 ‘검색어’가 처음 나타나는 위치로 이동한다.
2. vi의 세 가지 모드
vi를 사용하면서 가장 먼저 이해해야 할 개념은 ‘모드’다. vi는 크게 세 가지 모드로 작동한다:
2.1. 명령 모드(Command Mode)
vi를 처음 실행하면 명령 모드로 시작된다. 이 모드에서는 커서 이동, 텍스트 삭제, 복사, 붙여넣기 등의 명령을 수행할 수 있다. 텍스트를 직접 입력할 수는 없다.
다른 모드에서 명령 모드로 돌아오려면 Esc
키를 누르면 된다.
예제:
1. vi로 파일을 열면 명령 모드 상태다.
2. 입력 모드에서 작업 후 Esc
를 누르면 명령 모드로 돌아온다.
3. 명령 모드에서 dd
를 입력하면 현재 줄이 삭제된다.
2.2. 입력 모드(Insert Mode)
텍스트를 직접 입력할 수 있는 모드다. 명령 모드에서 다음 키 중 하나를 누르면 입력 모드로 전환된다:
i
: 현재 커서 위치에서 입력 시작I
: 현재 줄의, 맨 앞에서 입력 시작a
: 현재 커서 다음 위치에서 입력 시작A
: 현재 줄의 맨 끝에서 입력 시작o
: 현재 줄 아래에 새 줄을 만들고 입력 시작O
: 현재 줄 위에 새 줄을 만들고 입력 시작
입력 모드에서는 화면 왼쪽 하단에 “– INSERT –“라는 표시가 나타난다(vim의 경우).
예제:
1. i
를 누르고 “Hello, World!”를 입력한다.
2. A
를 누르고 줄 끝에 “This is vi editor.”를 추가한다.
3. o
를 누르고 새 줄에 “New line here.”를 입력한다.
2.3. 마지막 행 모드(Last Line Mode)
파일 저장, 종료, 검색, 치환 등의 특수 명령을 수행하는 모드다. 명령 모드에서 :
, /
, ?
등을 입력하면 화면 맨 아래 행에 커서가 위치하며 마지막 행 모드로 전환된다.
예제:
1. :w
를 입력하여 파일을 저장한다.
2. :q
를 입력하여 vi를 종료한다.
3. /error
를 입력하여 ‘error’ 문자열을 검색한다.
3. 기본 이동 명령어
vi에서 효율적으로 작업하려면 커서 이동 명령어를 능숙하게 사용해야 한다. 명령 모드에서 사용할 수 있는 이동 명령어들이다:
3.1. 기본 커서 이동
h
: 왼쪽으로 이동j
: 아래로 이동k
: 위로 이동l
: 오른쪽으로 이동
화살표 키도 사용할 수 있지만, 손가락을 키보드 중앙에서 떼지 않고 작업하려면 hjkl 키를 사용하는 것이 효율적이다.
예제:
1. 5j
를 입력하면 현재 위치에서 5줄 아래로 이동한다.
2. 10l
을 입력하면 현재 위치에서 오른쪽으로 10칸 이동한다.
3.2. 단어 단위 이동
w
: 다음 단어의 시작으로 이동e
: 현재 단어의 끝으로 이동b
: 이전 단어의 시작으로 이동
예제:
1. 3w
를 입력하면 3개의 단어만큼 앞으로 이동한다.
2. 문장 “The quick brown fox jumps”에서:
– ‘T’에 커서가 있을 때 w
를 누르면 ‘q’로 이동
– ‘q’에 커서가 있을 때 e
를 누르면 ‘k’로 이동
– ‘b’에 커서가 있을 때 b
를 누르면 ‘q’로 이동
3.3. 라인 내 이동
0
: 현재 줄의 맨 처음으로 이동^
: 현재 줄의 첫 번째 공백이 아닌 문자로 이동$
: 현재 줄의 맨 끝으로 이동
예제:
1. ” This is a line with leading spaces.”에서:
– 0
을 누르면 줄의 맨 앞(첫 번째 공백)으로 이동
– ^
를 누르면 ‘T’로 이동
– $
를 누르면 맨 끝의 ‘.’으로 이동
3.4. 페이지 단위 이동
Ctrl + f
: 한 페이지 아래로 이동(Forward)Ctrl + b
: 한 페이지 위로 이동(Backward)Ctrl + d
: 반 페이지 아래로 이동(Down)Ctrl + u
: 반 페이지 위로 이동(Up)
예제:
1. 긴 로그 파일을 검토할 때 Ctrl + f
를 반복해서 누르면 페이지 단위로 빠르게 스크롤할 수 있다.
3.5. 파일 내 위치 이동
gg
: 파일의 맨 처음으로 이동G
: 파일의 맨 끝으로 이동숫자G
또는:숫자
: 지정한 줄 번호로 이동
예제:
gg # 파일 맨 처음으로 이동
G # 파일 맨 끝으로 이동
5G # 5번째 줄로 이동
:10 # 10번째 줄로 이동
실제 사용 시나리오:
긴 코드 파일에서 에러가 발생했다는 메시지가 “Line 234: Syntax error”라고 표시된다면, vi에서 :234
를 입력하여 해당 줄로 빠르게 이동할 수 있다.
4. 텍스트 편집 명령어
vi에서 텍스트를 편집하는 명령어들을 살펴보자.
4.1. 삭제 명령어
x
: 현재 커서 위치의 한 글자 삭제X
: 현재 커서 위치 앞의 한 글자 삭제dw
: 현재 커서 위치부터 단어의 끝까지 삭제d0
: 현재 커서 위치부터 줄의 시작까지 삭제d$
또는D
: 현재 커서 위치부터 줄의 끝까지 삭제dd
: 현재 줄 전체 삭제숫자dd
: 현재 줄부터 지정한 수만큼의 줄 삭제
예제:
1. 3x
를 입력하면 현재 위치에서 연속된 3개의 문자를 삭제한다.
2. “The quick brown fox”에서:
– ‘q’에 커서를 두고 dw
를 입력하면 “The brown fox”가 된다.
– ‘b’에 커서를 두고 D
를 입력하면 “The quick “가 된다.
3. 5dd
를 입력하면 현재 줄부터 5줄을 삭제한다.
실전 예제: 불필요한 공백 제거하기
문장: "Hello World !"
1. 첫 번째 'H'에 커서를 놓는다.
2. `/\s\+`를 입력하여 연속된 공백을 찾는다.
3. `dw`를 입력하여 공백을 삭제한다.
4. `i`를 누르고 공백 하나만 입력한다.
5. 다음 공백 그룹에 대해 반복한다.
결과: "Hello World!"
4.2. 변경 명령어
r
: 현재 커서의 문자 하나를 대체cw
: 현재 커서부터 단어의 끝까지 삭제하고 입력 모드로 전환cc
: 현재 줄 전체를 삭제하고 입력 모드로 전환c$
또는C
: 현재 커서부터 줄의 끝까지 삭제하고 입력 모드로 전환
예제:
1. “Thr quick brown fox”에서:
– ‘r’에 커서를 두고 re
를 입력하면 “The quick brown fox”로 수정된다.
2. “Hello World”에서:
– ‘W’에 커서를 두고 cw
를 입력한 후 “Universe”를 입력하면 “Hello Universe”가 된다.
3. “This is wrong”에서:
– ‘T’에 커서를 두고 cc
를 입력한 후 “This is correct”를 입력하면 전체 줄이 바뀐다.
실전 예제: 변수명 변경하기
코드: "int counter = 0;"
1. 'c'에 커서를 놓는다.
2. `cw`를 입력하고 "total"을 입력한다.
결과: "int total = 0;"
4.3. 실행 취소 및 재실행
u
: 마지막 명령 실행 취소(Undo)Ctrl + r
: 실행 취소한 명령 다시 실행(Redo)
예제:
1. 실수로 dd
를 입력하여 중요한 줄을 삭제했다면, 즉시 u
를 눌러 복구할 수 있다.
2. u
를 여러 번 눌러 여러 단계 전으로 되돌린 후, Ctrl + r
을 눌러 다시 최근 상태로 돌아갈 수 있다.
실전 예제: 실수 수정하기
1. 여러 줄을 수정한 후 실수로 "The quick brown fox"를 삭제했다.
2. `u`를 눌러 삭제를 취소한다.
3. 의도적으로 삭제한 이전 내용을 다시 삭제하고 싶다면 `Ctrl + r`을 누른다.
5. 검색 및 치환
효율적인 텍스트 편집을 위해 검색과 치환 기능을 자주 사용한다.
5.1. 검색
/단어
: 현재 커서 위치부터 아래쪽으로 ‘단어’를 검색?단어
: 현재 커서 위치부터 위쪽으로 ‘단어’를 검색n
: 같은 방향으로 다음 검색 결과로 이동N
: 반대 방향으로 다음 검색 결과로 이동
예제:
1. /error
를 입력하면 현재 커서 위치에서 아래쪽으로 ‘error’ 단어를 검색한다.
2. 검색 후 n
을 누르면 다음 ‘error’로 이동한다.
3. ?function
을 입력하면 현재 커서 위치에서 위쪽으로 ‘function’ 단어를 검색한다.
실전 예제: 로그 파일에서 오류 찾기
1. 대용량 로그 파일에서 gg를 입력해 파일의 맨 처음으로 이동한다.
2. /ERROR를 입력해 첫 번째 오류를 찾는다.
3. n을 반복해서 눌러 다음 오류들을 찾아나간다.
4. 각 오류를 찾을 때마다 조사하고 필요한 경우 수정한다.
5.2. 치환
:s/old/new/
: 현재 줄에서 처음 발견되는 ‘old’를 ‘new’로 치환:s/old/new/g
: 현재 줄에서 모든 ‘old’를 ‘new’로 치환:%s/old/new/g
: 파일 전체에서 모든 ‘old’를 ‘new’로 치환:%s/old/new/gc
: 파일 전체에서 ‘old’를 ‘new’로 치환(각 변경 사항마다 확인)
예제:
:s/error/warning/ # 현재 줄에서 첫 번째 'error'를 'warning'으로 치환
:s/error/warning/g # 현재 줄에서 모든 'error'를 'warning'으로 치환
:%s/error/warning/g # 파일 전체에서 'error'를 'warning'으로 치환
:5,10s/yes/no/g # 5~10줄 사이에서 'yes'를 'no'로 치환
:%s/setvalue(/setValue(/g # 파일 전체에서 함수명 표기법 변경
실전 예제: HTML 태그 변경하기
파일 내용: <div class="header">Title</div><div class="header">Subtitle</div>
명령어: :%s/<div class="header">/<h2>/g
:%s/<\/div>/<\/h2>/g
결과: <h2>Title</h2><h2>Subtitle</h2>
6. 복사 및 붙여넣기
vi에서는 복사를 ‘yank’, 붙여넣기를 ‘put’이라고 한다.
7.1. 복사(Yank)
yy
또는Y
: 현재 줄 전체 복사숫자yy
: 현재 줄부터 지정한 수만큼의 줄 복사yw
: 현재 커서 위치부터 단어의 끝까지 복사
예제:
1. yy
를 입력하면 현재 줄 전체가 복사된다.
2. 3yy
를 입력하면 현재 줄부터 3줄이 복사된다.
3. “Hello World”에서 ‘H’에 커서를 두고 yw
를 입력하면 “Hello “가 복사된다.
6.2. 붙여넣기(Put)
p
: 현재 커서 다음 위치에 붙여넣기P
: 현재 커서 위치에 붙여넣기
예제:
1. 줄을 yy
로 복사한 후 다른 위치로 이동하여 p
를 누르면 현재 줄 아래에 복사한 줄이 붙여넣어진다.
2. 단어를 yw
로 복사한 후 다른 위치로 이동하여 p
를 누르면 현재 커서 다음 위치에 복사한 단어가 붙여넣어진다.
실전 예제: 코드 블록 복제하기
1. 함수 정의 시작 부분에 커서를 놓는다.
2. 함수가 10줄이라면 `10yy`를 입력하여 전체 함수를 복사한다.
3. 새로운 함수를 넣을 위치로 이동한다.
4. `p`를 눌러 복사한 함수를 붙여넣는다.
5. 함수명과 필요한 부분을 수정한다.
7. 파일 저장 및 종료
vi 작업을 마치고 파일을 저장하거나 종료하는 명령어들이다:
:w
: 현재 파일 저장:w 파일명
: 다른 이름으로 저장:q
: vi 종료(변경 사항이 없을 경우):q!
: 저장하지 않고 강제 종료:wq
또는ZZ
: 저장하고 종료:x
: 변경 사항이 있을 경우만 저장하고 종료
예제:
:w # 현재 작업 내용 저장
:w backup.txt # 현재 내용을 backup.txt로 저장(원본 파일은 그대로)
:wq # 저장하고 vi 종료
:q! # 변경 사항을 저장하지 않고 강제 종료
실전 예제: 구성 파일 수정하기
1. sudo vi /etc/ssh/sshd_config를 실행해 SSH 구성 파일을 연다.
2. 필요한 설정을 변경한다(예: Port 22를 Port 2222로 변경).
3. :w를 입력해 변경 사항을 저장한다.
4. :q를 입력해 vi를 종료한다.
5. sudo systemctl restart sshd를 실행해 SSH 서비스를 재시작한다.
8. 고급 vi 기능
기본 기능에 익숙해졌다면 다음 고급 기능들도 알아두면 좋다:
8.1. 시각적 선택 모드(Visual Mode, vim에서만 가능)
v
: 문자 단위 선택 모드V
: 줄 단위 선택 모드Ctrl + v
: 블록 단위 선택 모드
시각적 선택 모드에서는 hjkl로 영역을 선택한 후, d
로 삭제하거나 y
로 복사할 수 있다.
예제:
1. v
를 누른 후 화살표 키나 hjkl
로 선택 영역을 확장한다.
2. 여러 줄을 선택한 후 d
를 누르면 선택한 부분이 삭제된다.
3. 여러 줄을 선택한 후 y
를 누르면 선택한 부분이 복사된다.
실전 예제: 블록 선택과 편집
1. Ctrl + v를 눌러 블록 선택 모드로 들어간다.
2. 화살표 키나 hjkl을 사용해 여러 줄의 시작 부분을 선택한다.
3. I를 누른 후 # 기호를 입력하고 Esc를 누른다.
4. 선택한 모든 줄의 시작 부분에 # 기호가 추가되어 주석 처리된다.
8.2. 다중 파일 편집
:e 파일명
: 새 파일 열기:bn
: 다음 파일로 이동:bp
: 이전 파일로 이동:ls
: 열려 있는 파일 목록 표시
예제:
:e config.txt # 현재 파일을 저장한 후 config.txt 파일 열기
:bn # 다음 버퍼(파일)로 이동
:bp # 이전 버퍼(파일)로 이동
:ls # 현재 열려 있는 모든 파일 목록 표시
실전 예제: 여러 파일 동시 편집
1. vi 실행 시 여러 파일을 한 번에 열기: vi file1.txt file2.txt
2. :ls를 입력해 열린 파일 목록을 확인한다.
3. :bn을 입력해 다음 파일로 이동한다.
4. 각 파일을 편집한 후 :wq로 저장하고 종료한다.
8.3. 분할 창
:split
또는:sp
: 가로로 창 분할:vsplit
또는:vsp
: 세로로 창 분할Ctrl + w, w
: 분할 창 간 이동Ctrl + w, h/j/k/l
: 분할 창 간 방향키 이동
예제:
:sp hello.txt # 화면을 가로로 분할하고 hello.txt 파일 열기
:vsp config.properties # 화면을 세로로 분할하고 config.properties 파일 열기
Ctrl + w, w # 다음 분할 창으로 이동
Ctrl + w, k # 위쪽 분할 창으로 이동
실전 예제: 코드와 설정 파일 비교
1. :sp를 입력하여 화면을 가로로 분할한다.
2. 위쪽 창에서 :e app.conf.old를 입력하여 이전 설정 파일을 연다.
3. Ctrl + w, j를 눌러 아래쪽 창으로 이동한다.
4. :e app.conf를 입력하여 새 설정 파일을 연다.
5. 두 파일을 비교하며 필요한 부분을 수정한다.
8.4. 매크로 기록
q알파벳
: 매크로 기록 시작 (기록할 매크로를 알파벳 키에 할당)q
: 매크로 기록 종료@알파벳
: 매크로 실행@@
: 마지막으로 실행한 매크로 다시 실행
예제:
qa # a 키에 매크로 기록 시작
I# j # 현재 줄 앞에 # 추가하고 다음 줄로 이동하는 매크로
q # 매크로 기록 종료
@a # a 매크로 실행
10@a # a 매크로를 10번 실행
실전 예제: 반복 작업 자동화
# 여러 줄의 데이터를 다음과 같이 SQL INSERT 문으로 변환:
# 원본:
# 1,John,Doe,30
# 2,Jane,Smith,25
1. 첫 번째 줄의 시작 부분에 커서를 놓는다.
2. qa를 눌러 매크로 기록을 시작한다.
3. IINSERT INTO users VALUES (A);j를 입력한다.
(이는 줄 앞에 "INSERT INTO users VALUES ("를 삽입하고,
줄 끝에 ");"를 추가한 후 다음 줄로 이동한다)
4. q를 눌러 매크로 기록을 종료한다.
5. @a를 눌러 매크로를 실행하거나, 10@a와 같이 여러 번 실행할 수 있다.
결과:
INSERT INTO users VALUES (1,John,Doe,30);
INSERT INTO users VALUES (2,Jane,Smith,25);
8.5. 설정 변경
:set number
또는:set nu
: 줄 번호 표시:set nonumber
또는:set nonu
: 줄 번호 숨기기:set autoindent
: 자동 들여쓰기 설정:syntax on
: 구문 강조 표시 활성화(vim)
예제:
:set nu # 줄 번호 표시
:set tabstop=4 # 탭 간격을 4칸으로 설정
:syntax on # 구문 강조 표시 활성화
:set paste # 붙여넣기 모드 활성화(들여쓰기 유지)
실전 예제: 코딩을 위한 vi 환경 설정
1. :set nu를 입력하여 줄 번호를 표시한다.
2. :set tabstop=4를 입력하여 탭 간격을 4칸으로 설정한다.
3. :set autoindent를 입력하여 자동 들여쓰기를 활성화한다.
4. :syntax on을 입력하여 구문 강조 표시를 활성화한다.
5. :set expandtab를 입력하여 탭을 공백으로 변환한다.
9. 실전 vi 사용 팁
아래는, 20년 가까이 vi를 사용하면서 잘 사용한 실용적인 팁이다:
9.1. .vimrc 파일 활용하기
vi(vim)의 설정 파일인 .vimrc를 활용하면 자신만의 환경을 구축할 수 있다. 홈 디렉토리에 .vimrc 파일을 만들고 다음과 같은 기본 설정을 추가해 두면 좋다:
set number " 줄 번호 표시
set autoindent " 자동 들여쓰기
set tabstop=4 " 탭 간격을 4칸으로 설정
set shiftwidth=4 " 자동 들여쓰기 간격을 4칸으로 설정
syntax on " 구문 강조 표시
set hlsearch " 검색어 강조 표시
set ignorecase " 검색 시 대소문자 무시
set smartcase " 대문자 포함 검색 시 대소문자 구분
set backup " 백업 파일 생성
set ruler " 상태 표시줄에 커서 위치 표시
예제: 개인화된 .vimrc 파일 만들기
1. vi ~/.vimrc를 입력하여 설정 파일을 연다.
2. 위의 설정을 복사하여 붙여넣는다.
3. 자신의 선호도에 맞게 설정을 추가하거나 수정한다.
예: colorscheme desert (배경색 테마 변경)
4. :wq로 저장하고 종료한다.
5. 다음에 vi를 실행하면 설정이 자동으로 적용된다.
9.2. 자주 사용하는 명령어 조합
자주 사용하는 명령어 조합들이다:
gg=G
: 파일 전체 자동 들여쓰기dG
: 현재 커서부터 파일 끝까지 삭제ggdG
: 파일 내용 전체 삭제:.,$d
: 현재 줄부터 파일 끝까지 삭제:%s/\s\+$//g
: 모든 줄의 끝에 있는 공백 제거
예제: 코드 전체 포맷팅하기
1. vi에서 파일을 연다.
2. gg를 입력하여 파일의 맨 처음으로 이동한다.
3. =G를 입력하여 파일 전체에 자동 들여쓰기를 적용한다.
4. :%s/\s\+$//g를 입력하여 모든 줄 끝의 불필요한 공백을 제거한다.
실전 예제: 스크립트 파일 정리하기
# 기존 스크립트 파일을 정리하는 과정:
1. vi script.sh를 입력하여 파일을 연다.
2. gg=G를 입력하여 전체 코드에 자동 들여쓰기를 적용한다.
3. :%s/\s\+$//g를 입력하여 모든 줄 끝의 공백을 제거한다.
4. :%s/\t/ /g를 입력하여 모든 탭을 4개의 공백으로 변환한다.
5. :wq로 저장하고 종료한다.
9.3. 효율적인 작업 방식
- 반복 작업이 필요할 때는 매크로를 활용하자.
- 큰 파일을 편집할 때는
:set nowrap
으로 줄 바꿈을 비활성화하면 더 빠르게 탐색할 수 있다. /검색어/e
를 사용하면 검색 결과의 끝 부분으로 커서가 이동한다..
명령어는 마지막으로 수행한 변경 작업을 반복한다. 반복 작업에 매우 유용하다.
예제: 점(.) 명령어 활용하기
1. i를 누르고 "Hello, world!"를 입력한 후 Esc를 누른다.
2. 다른 위치로 이동한 후 .을 누르면 "Hello, world!"가 다시 입력된다.
3. cw로 단어를 변경한 후, 다른 위치에서 .을 누르면 같은 변경 작업이 반복된다.
실전 예제: 효율적인 여러 줄 주석 처리
# HTML 파일에서 여러 줄을 주석 처리하는 과정:
1. Ctrl + v를 눌러 블록 선택 모드로 들어간다.
2. 화살표 키로 주석 처리할 여러 줄의 시작 부분을 선택한다.
3. I를 누르고 <!-- 를 입력한 후 Esc를 누른다. 4. 다시 Ctrl + v로 블록 선택 모드로 들어간다. 5. 화살표 키로 같은 줄들의 끝 부분을 선택한다. 6. $를 누르고 A를 누른 후 --> 를 입력하고 Esc를 누른다.
10. 자주 묻는 질문
10.1. vi와 vim의 차이점은 무엇인가?
vim(Vi IMproved)은 vi의 향상된 버전이다. 구문 강조 표시, 다중 실행 취소, 시각적 선택 모드, 분할 창, 탭 등 vi에 없는 많은 기능을 제공한다. 대부분의 현대 리눅스 배포판에서는 vi를 실행해도 실제로는 vim이 실행된다.
예제: vim 확인하기
1. vi --version 명령을 실행하면 실제로 vim인지 확인할 수 있다.
2. vim에서만 가능한 기능을 시도해본다:
- :syntax on (구문 강조 표시)
- v (시각적 선택 모드)
10.2. vi에서 한글 입력이 깨질 때 어떻게 해야 하나?
터미널과 vim의 인코딩 설정을 UTF-8로 맞춰주면 된다. .vimrc 파일에 다음 설정을 추가하자:
set encoding=utf-8
set fileencodings=utf-8,cp949
예제: 한글 파일 편집하기
1. vi ~/.vimrc에서 위 설정을 추가한다.
2. 터미널 환경변수 설정: export LANG=ko_KR.UTF-8
3. vi korean.txt로 한글 파일을 열고 편집한다.
10.3. 실수로 파일을 저장하지 않고 vi를 종료했을 때 복구할 방법이 있나?
vim을 사용하고 있다면 스왑 파일(.swp)을 통해 복구할 가능성이 있다. 동일한 파일을 다시 열었을 때 복구 옵션이 표시된다. 또는 :recover
명령어를 사용할 수도 있다.
예제: 스왑 파일을 통한 복구
1. 갑작스러운 연결 끊김으로 vi 세션이 종료되었다.
2. 같은 파일을 다시 열면 다음과 같은 메시지가 표시된다:
"파일 이름.swp가 이미 존재합니다!"
3. R을 눌러 복구 모드로 들어간다.
4. 복구된 내용을 확인하고 :w로 저장한다.
vi는 처음에는 불편하게 느껴질 수 있지만, 기본 명령어만 익히면 빠르고 효율적인 텍스트 편집이 가능하다. 서버 관리자나 개발자라면 GUI 환경 없이도 생산성을 유지할 수 있는 필수 도구라고 할 수 있다. 처음에는 간단한 명령어부터 시작하여 점진적으로 고급 기능을 익혀나가는 것이 좋다. vi는 단순한 텍스트 에디터가 아니라 강력한 텍스트 처리 도구다. 명령어와 개념을 충분히 익힌다면, 마우스 없이도 빠르고 정확하게 텍스트를 다룰 수 있게 된다는 점을 명심하자!