정의
vi는 유닉스 및 유닉스 계열 운영 체제에서 널리 사용되는 화면 지향(visual) 텍스트 편집기이다. 터미널 환경에서 마우스 없이 키보드만을 사용하여 텍스트 파일을 편집할 수 있도록 설계되었다.
개요
vi는 1970년대 후반 빌 조이(Bill Joy)가 개발했으며, 당시 유닉스 시스템의 사실상 표준(de facto standard) 텍스트 편집기로 자리매김했다. 그 특유의 모드 기반(mode-based) 인터페이스와 강력한 키보드 중심의 명령 체계는 효율적인 텍스트 편집을 가능하게 하며, 시스템 자원을 적게 소모하여 경량 환경에서도 뛰어난 성능을 발휘한다. 오늘날에는 vi의 기능을 개선하고 확장한 Vim (Vi IMproved)과 같은 파생 버전이 더 널리 사용되지만, vi 자체는 여전히 거의 모든 유닉스 및 리눅스 시스템에 기본으로 설치되어 있어 기본적인 시스템 관리 작업에 필수적으로 활용된다.
어원/유래
vi는 1976년경 캘리포니아 대학교 버클리(UC Berkeley)의 빌 조이(Bill Joy)가 BSD(Berkeley Software Distribution) 유닉스 개발의 일환으로 만들었다. 당시 유닉스 환경에는 ex와 같은 라인 기반 편집기가 주로 사용되었는데, vi는 이 ex 편집기에 시각적(visual) 인터페이스를 추가하여 실시간으로 텍스트 파일의 내용을 화면에 표시하며 편집할 수 있도록 개발되었다. vi라는 이름은 ex 편집기의 "visual" 모드에서 유래한 것으로 알려져 있으며, ex -v 명령이나 직접 vi 명령을 사용하여 실행할 수 있다.
특징
vi의 주요 특징은 다음과 같다.
- 모드 기반 편집:
vi는 크게 세 가지 모드로 작동한다.- 명령 모드 (Command mode):
vi를 실행했을 때 기본적으로 진입하는 모드이다. 커서 이동, 텍스트 복사, 붙여넣기, 삭제, 검색, 파일 저장 및 종료 등 편집기 제어 명령을 수행한다. 이 모드에서는 입력되는 키가 명령어로 해석된다. - 입력 모드 (Insert mode): 실제 텍스트를 입력할 수 있는 모드이다. 명령 모드에서
i(insert),a(append),o(open line below) 등의 키를 눌러 진입하며,Esc키를 눌러 명령 모드로 복귀한다. - 마지막 줄 모드 (Last Line mode, ex mode): 명령 모드에서 콜론(
:)을 누르면 진입하며, 화면 하단에 프롬프트가 나타난다.ex편집기의 명령어를 입력할 수 있으며, 파일 저장(:w), 종료(:q), 파일 열기(:e), 정규 표현식을 이용한 검색 및 교체(:%s/old/new/g) 등의 작업을 수행한다.
- 명령 모드 (Command mode):
- 강력한 키보드 중심 인터페이스: 모든 편집 작업을 키보드만으로 수행할 수 있도록 설계되어, 숙련된 사용자에게 매우 빠른 편집 속도를 제공한다. 마우스는 지원되지 않는다.
- 경량성 및 높은 이식성: 시스템 자원을 적게 사용하며, 다양한 유닉스 및 유닉스 계열 운영 체제에서 높은 호환성으로 구동될 수 있다. 이는 시스템 복구 상황이나 자원이 제한적인 환경에서 특히 유용하다.
- 정규 표현식 지원: 강력한 텍스트 검색 및 교체 기능을 위해 정규 표현식(regular expression)을 지원한다.
- 매크로 기능: 복잡하거나 반복적인 작업을 자동화할 수 있는 매크로 기능을 제공한다.
- 유비쿼터스: POSIX 표준에 포함되어 있어 대부분의 유닉스, 리눅스, macOS 등 유닉스 계열 시스템에 기본적으로 설치되어 있다.
관련 항목
- Vim (Vi IMproved):
vi의 기능을 크게 확장하고 개선한 현대적인 텍스트 편집기로, 문법 강조, 다단계 되돌리기, 플러그인 지원 등 다양한 고급 기능을 제공한다. 현재 가장 널리 사용되는vi파생 버전이다. - Ex:
vi의 기반이 된 라인 기반 텍스트 편집기이다.vi의 마지막 줄 모드에서 사용되는 명령들은ex명령들과 동일하다. - Elvis, nvi, busybox vi:
vi의 다른 파생 버전 또는 최소 구현체들이다. - Emacs:
vi와 함께 유닉스/리눅스 환경의 양대산맥을 이루는 또 다른 강력한 텍스트 편집기이다.vi와는 다른 접근 방식과 철학을 가진다. - POSIX: 이식 가능한 운영 체제 인터페이스 표준으로,
vi의 기본적인 동작 방식과 명령어가 표준으로 정의되어 있다.