리눅스 서버 관리자라면 반드시 알아야 하는 텍스트 에디터가 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는 단순한 텍스트 에디터가 아니라 강력한 텍스트 처리 도구다. 명령어와 개념을 충분히 익힌다면, 마우스 없이도 빠르고 정확하게 텍스트를 다룰 수 있게 된다는 점을 명심하자!

 

 

댓글 남기기