vi 텍스트 편집기(또는 유사 복제본)는 1978년 이후로 모든 UNIX 및 UNIX형 시스템의 일부로 포함되었다. AT&T 라이센싱 제한으로 인해 UNIX형 오픈 소스 시스템은 자체적인 vi 복제본을 처음부터 작성해야 했으며, 이는 Elvis, nvi 및 Vim(원본 vi와 함께 이 기사에서 논의된 후자) 등 vi 유사품이 나타났다. 이렇게 도처에 있기 때문에 UNIX, Linux, Berkeley Software Distribution(BSD) 또는 기타 UNIX형 컴퓨터 시스템의 시스템 관리자들이 진정으로 없어서는 안될 도구 중 하나가 된다.
필자를 비롯한 UNIX 및 UNIX형 시스템에서 Emacs 텍스트 편집기 애호가들은 유연성, 확장성 및 구성 가능성 측면에서 만족한다. 이 기사에서는 vi와 가장 대중적인 복제본인 Vim에서 동일한 기능을 강조한다. vi와 Vim 편집기는 근본적으로 Emacs와 동일한 사용자 정의와 구성 가능성을 제공하고 약어에 대한 vi의 지원은 Emacs와 일치하지 않는다. vi를 알면 어느 시스템 관리자나 Emacs를 설치하는 방법을 알아내기 전에 어느 UNIX형 시스템에서나 즉시 생산적이 될 수 있다.
이 기사는 vi와 Vim을 사용하는 방법이 아니라 사용자 정의하는 방법을 설명한다. 훌륭한 vi와 Vim 튜토리얼로의 몇 가지 링크는 참고자료를 참조한다. 그 섹션도 또한 다른 대중적인 vi 복제본과 이를 찾을 수 있는 장소를 나열한다.
vi 및 Vim 편집기는 텍스트 파일이나 환경 변수에서 사용자 정의를 저장한다(다음 섹션에서 논의됨). vi 또는 Vim 구성 파일은 각각 표 1과 같이 구성 및 사용자 정의 명령의 유형을 얼마든지 포함할 수 있다.
표 1. 구성 및 사용자 정의 명령
| 명령 | 설명 |
|---|---|
ab | 확장된 약어를 Insert 모드에서 텍스트를 입력하는 동안 직면하는 문자들의 특정 순서로 정의한다. 이러한 약어는 Microsoft® Word에서 AutoCorrect 기능과 같이 작동할 수 있다. |
map | 기존 vi 또는 Vim 명령을 사용자 정의 키로 지정하거나 자체적인 사용자 정의 명령을 정의한다. 자세한 정보는 "키 바인딩 사용자 정의 및 명령 작성"을 참조한다. |
set | vi 또는 Vim 변수를 설정한다. 변수의 유형 및 사용되는 방법에 따라 변수는 특정 변수를 간단히 이름 지정하거나 명시된 값을 지정하여 설정된다. 자세한 정보는 "vi 및 Vim 구성 옵션 설정"을 참조한다. |
구성 명령과 해당 명령 내의 주석을 vi 또는 Vim 구성 파일에 산재시킬 수 있다. Vim 구성 파일에서 행 어디서나 나타나는 큰 따옴표(") 다음의 어느 문자나 주석으로 확인되는 반면, 표준 vi 구성 파일에서 주석은 행의 첫 문자로 큰 따옴표가 있어야 한다. 표준 vi 구성 파일은 빈 행을 포함할 수는 없다. 반면, 이는 Vim 구성 파일에서는 있어도 된다.
Vim 편집기는 원본 vi 편집기에 없는 기능을 활용할 수 있는 추가 키워드를 지원한다. 이러한 예는 표 2와 같이 나타난다.
표 2. Vim으로 지원되는 추가 키워드
| 키워드 | 설명 |
|---|---|
autocmd | 편집 중인 파일 유형에 따라 특정 명령을 자동으로 실행한다. autocmd 예제를 포함한
sample.vimrc 파일은 다운로드를 참조한다. |
filetype | 특정 파일 유형을 편집하고 있을 때 추가 기능을 제공하는 다양한 플러그인을 로드하고 활성화한다. |
function | 핵심 명령으로 맵핑할 수 있는 사용자 정의 함수를 정의한다. |
syntax | 구문 강조표시를 활성화하거나 비활성화한다. |
Vim이 사용한 구성 파일도 조건부 표현식을 사용할 수 있는 풍부한 내부 함수 세트를 지원한다. 이를 사용하면 다른 컨텍스트에서 자체 함수를 써서 실행할 수 있다. 이러한 조건에 대한 자세한 정보로의 링크는 참고자료를 참조한다.
환경 변수, 구성 파일 각각 또는 둘 다에서 이전 섹션에서 논의한 vi 및 Vim 구성 옵션을 정의할 수 있다. vi와 Vim 둘 다 환경 변수 및 구성 파일의 순서를 사용하여 사용자 정의를 로드하고 거의 동일한 구성 순서를 공유한다. 비록 Vim이 더 광범위한 세트를 사용하더라도 말이다.
기본값으로 vi와 Vim 편집기는 구성 정보에 대해 나열된 순서대로 표 3에서 위치를 확인한다.
표 3. 구성 정보에 대한 위치 vi 및 Vim 확인
| 순서 | 위치 | 설명 | |
|---|---|---|---|
| 1 | -u 옵션으로 호출되는 특정 파일 | (Vim만 해당): 표준 vi가
| |
| 2 | Vim이 컴파일될 때 식별되는 특정 구성 파일 | (Vim만 해당): Vim에 대한 전체 시스템적인 구성 설정이 들어있는 Vim이 컴파일될 때 식별되는 특정 구성 파일(대개 /etc/vim/vimrc 또는 /usr/share/vim/vimrc). 이 파일은 일반적으로 일부 구성 옵션을 설정하고 실행 중인 운영 체제 및 운영 체제 배포에 특화된 다른 Vim 구성 파일을 로드한다. | |
| 3 | VIMINIT 환경 변수 | (Vim만 해당): 하나 이상의 구성 명령의 순서를 구성하는 환경 변수. 이 환경 변수가 설정되면, Vim은 차후 구성 파일을 찾거나 다른 환경 변수를 조사하지 않는다. | |
| 4 | $HOME/.vimrc | (Vim만 해당): 구성 옵션이 들어있는 사용자의 홈 디렉토리에 있는 .vimrc라는 파일. 이 파일을 찾으면 Vim은 차후 구성 파일을 찾거나 다른 환경 변수를 조사하지 않는다. sample.vimrc 파일은 다운로드를 참조한다. | |
| 5 | EXINIT 환경 변수 | 하나 이상의 구성 명령의 순서로 구성된 환경 변수. | |
| 6 | $HOME/.exrc | 구성 옵션이 들어있는 사용자의 홈 디렉토리에 있는 .exrc라는 파일. 이 파일을 찾으면
exrc 옵션이 이 구성 파일에 설정되지 않는 한, vi와 Vim은 차후 구성 파일을
찾지 않는다. sample.exrc 파일은 다운로드를 참조한다. | |
| 7 | .exrc | 구성 옵션이 들어있는 현재 작업 중인 디렉토리에 있는 .exrc라는 파일. (Microsoft Windows®
시스템에서 Vim을 사용 중인 경우, 이 파일의 이름은 _exrc이다.) 현재 디렉토리의 .exrc 파일은
이전 구성 지시사항 또는 파일이 exrc 옵션을 설정하는 경우
(또는 홈 디렉토리에서 vi 또는 Vim을 시작하는 중이고 .exrc 파일이 거기 있는 경우, 따라서
이는 검색 순서에서 다음 단계와 일치함) 읽기 전용이다. |
대안의 이 훌륭한 시리즈는 특히 Vim에 대한 전체 시스템적인 기본값을 구성하기에 간편해지는 한편, Vim과 표준 vi 구성 파일 사이에 일부 영리한 상호 작용도 사용하게 된다. 예를 들어, 필자의 홈 디렉토리가 네트워킹된 파일 시스템에 없을 때마다, 필자는 쉘과 애플리케이션에 대한 필자의 모든 구성 파일을 필자가 계정이 있는 각 시스템에 복사한다. 이러한 일부 시스템은 vi를 사용하는 반면, Vim은 다른 시스템에(vi로) 제공된다. 그러므로 필자는 모든 vi 특화된 구성 옵션을 .exrc 파일에 두고, 모든 Vim 특화된 구성 명령을 .vimrc 파일에 두고, 다음 행을 필자의 .vimrc 파일의 시작부에 둔다.
so .exrc |
이렇게 하면 필자의 .vimrc 파일의 나머지에서 구성 명령을 로드하기 전에 Vim이 필자의 .exrc 파일에 저장된 구성 명령을 모두 읽게 된다. vi만 존재하는 시스템에서 필자의 .exrc 파일이 정상적으로 읽히고 .vimrc 파일은 무시된다. .vimrc 파일의 시작 부분에서 구성 명령을 로드하면 필자가 Vim을 사용할 때보다 더 세련된 Vim 버전으로 오버라이드되는 두 파일 모두에 존재하는 키 맵핑을 사용할 수 있다.
set 명령을 통해 사용자는 내부 vi 및 Vim 변수를 설정할 수 있다. 변수는
다음과 같이 유형에 따라 다른 방식으로 설정된다.
-
켜짐 또는 꺼짐으로 설정되는 변수는
set variable명령으로 설정되고set novariable명령을 사용하여 설정 해제된다. -
값을 취하는 변수는
set variable=value명령으로 설정된다.
예를 들어, set list 명령은 목록 옵션을 설정하며, 이는
vi 또는 Vim에 행의 끝 부분을 표현하는 문자($)와 축소된 탭(^I) 문자를
표시하도록 알려준다. (Vim에서 이 옵션은 후미 공백도 표시한다.) list
옵션은 값이 필요하지 않다—설정하는 것만으로도 기능이 활성화되기에 충분하다. set
nolist 명령을 실행하여 list 옵션을 설정 해제할 수 있다.
다른 변수는 명시적인 값 또는 값의 유형을 취하며, 이는 등호 기호(=) 다음에 값 또는 콤마로 분리된 값의 목록을
사용하여 지정한다. 예를 들어, Vim 편집기에서 listchars 변수의
값을 설정하여 행의 끝 부분, 후미 공백 및 축소된 탭을 표현하기 위해
list 명령이 사용하는 문자를 구성할 수 있다. 다음 명령은
축소된 탭을 >>로, 후미 공백을 !로,
행의 끝 부분을 $로 표시한다.
set listchars=tab:>>,trail:!,eol:$ |
vi 또는 Vim에서 설정할 수 있는 모든 옵션의 현재 값을 확인하려면 vi 또는 Vim 내에서
:set
all 명령을 사용한다. 특정 옵션의 현재 값을 표시하려면
f:set option? 명령을 사용한다. 기본값에서부터 수정한 옵션을 모두 표시하려면
:set 명령을 사용한다.
map 명령을 사용하면 사용자는 특정 키 또는
vi의 명령 모드에 대해 map key-sequence command 구문
및 vi의 삽입 모드에 대해 map! key-sequence command 구문을
사용하는 키 결합으로 기존 명령 또는 새 명령을 바인드할 수 있다.
다음은 Vim에 대한 일부 샘플 map 명령이다.
map <C-T> hhxp |
이 중 첫 번째는 키 순서 control-t를
vi 명령 순서 hhxp로 맵핑하며, 이는 현재 커서 위치의 앞에 두 문자의
순서를 역전한다(Emacs에서 control-t를 수행하는 것처럼). 이 중 두 번째는
F5 키를 fmt 명령을 호출하는 키 순서로 맵핑하여 현재 단락을 다시 포맷한다.
표준 vi 및 Vim에 대한 구성 파일에서 map 명령 사이의 중요한 차이점 중
하나는 이전 예제에서 나온 것처럼 Vim은 꺾쇠괄호 내에서 키 식별자를 지원하여
그렇지 않으면 인쇄 가능하지 않은 문자가 될 키를 식별한다. vi는 실제로 제어 순서를 삽입하도록
요구한다(이는 control-v를 누른 다음에 키 순서로 이어져 수행함). 샘플 map
명령의 vi 버전은 다음과 같다.
map ^T hhxp |
ab 명령을 사용하면 길지만 일반적으로 사용되는 용어, 코드의 비트,
철자법 수정 및 기타 등등에 대한 약어를 식별할 수 있다. 독자가 정의한 약어는 공백 또는 맞춤법 문자를
입력할 때마다 삽입 모드에서 텍스트를 입력하면 확장된다. 예를 들어, 필자가 선호하는 몇 가지 약어는
다음과 같다.
ab het the |
약어는 표준 vi에서 삽입 모드에서만 작동하지만 Vim에서 대체 모드 및 명령행 모드에서도 작동한다. Vim
편집기는 cab(명령행 약어),
iab(삽입 모드 약어) 및 rab(대체 모드 약어)
명령을 제공하여 Vim에서 특정 모드에서 특정 약어의 확장을 제한할 수 있다.
vi와 Vim 편집기를 사용하는 방법을 아는 것은 UNIX, Linux 또는 다른 UNIX형 시스템의 어느 관리자에게나 기초적인 기술이다. vi는 고전적인 UNIX 도구이지만 고도로 구성 가능하고 많은 개발자들이 일상적인 작업에 사용될 뿐만 아니라 vi가 사용 가능한 유일한 편집기인 시스템에서도 사용된다.
이 기사는 기본 vi 및 Vim 구성 명령을 소개했고 vi와 Vim이 사용자 정의된 구성 설정을 찾고 로드하는 방법의 개요를 제공했다. 하나의 기사에 적합할 수 있는 것보다 이러한 주제에 대해 배워야 할 내용이 훨씬 더 많다. 자세한 정보를 확인할 수 있는 링크는 참고자료를 참조한다.
| 설명 | 이름 | 크기 | 다운로드 방식 |
|---|---|---|---|
| Sample .vimrc file | sample.vimrc | 3KB | HTTP |
| Sample .exrc file | sample.exrc | 1KB | HTTP |
교육
-
"Interview with Bill Joy"(Unix Review, 1984년 8월)는
vi의 역사와 초기 개발에 관해 vi의 원본 작성자로부터 흥미로운 정보를 제공한다.
-
튜토리얼과 고급 정보가 들어있는 vi 및 Vim에 대한 훌륭한 소개글을 보려면
Linux vi and Vim editor: Tutorial and advanced
features 및 Mastering
the VI editor를 참조한다.
-
Vi Lover's Home
Page는 많은 기타 vi 관련 사이트로 링크를 제공하는 정보의 또 다른 훌륭한 원천이다.
-
Vim 문서의 특정 섹션은
abbreviations,
functions,
key
mappings 및 options를
설정하고 사용자 정의하는 것에 대한 완성된 정보를 제공한다.
-
Vim 스크립트를 작성하는 것에 대한 탁월한 기사를 보려면
developerWorks의 "Scripting the Vim editor"
시리즈를 참조한다.
-
AIX와 UNIX developerWorks 영역에서는
AIX 시스템 관리의 모든 측면과 UNIX 기술 확장의 모든 측면과 관련된 풍부한 정보를 제공한다.
제품 및 기술
-
Vim의 전체 정보와 다운로드 링크는 Vim
홈 페이지 또는 SourceForge의 Vim
페이지를 참조한다.
-
Elvis
및 nvi는 또 다른 대중적인 오픈
소스 vi 복제본이다.
토론
-
developerWorks
커뮤니티에 참여하여 개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서
다른 developerWorks 사용자와 의견을 나누자.
- Twitter의 developerWorks 페이지를 살펴보자.
- developerWorks 커뮤니티에 참여하자.
-
AIX 및 UNIX® 포럼에 참여하자.
- AIX Forum
- AIX Forum for developers
- Cluster Systems Management
- IBM Support Assistant Forum
- Performance Tools Forum
- Virtualization Forum
- 기타 AIX and UNIX Forums
William von Hagen은 20여 년간 UNIX 시스템 관리자로 일하며 다양한 기술적 주제에 관해 집필해왔고, 1993년 이후로는 Linux를 적극 지지하며 활발한 활동을 펼치고 있다. Bill은 Ubuntu Linux, Xen Virtualization, GCC(GNU Compiler Collection), SUSE Linux, Mac OS X, Linux 파일 시스템 및 SGML과 같은 주제에 관한 서적의 저자 또는 공동 저자이기도 하다. Bill은 Linux 및 Mac OS X 관련 출판물과 웹 사이트에 게재된 수많은 기사를 작성하기도 했다. Bill의 이메일 주소는 wvh@vonhagen.org이다.