mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-10-02 20:30:33

vi


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
로마 숫자에 대한 내용은 6 문서
번 문단을
부분을
, 리그 오브 레전드의 등장 챔피언에 대한 내용은 바이(리그 오브 레전드) 문서
번 문단을
번 문단을
부분을
부분을
, 미국령 버진아일랜드에 대한 내용은 미국령 버진아일랜드 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
ㅤ ㅤ ㅤ ㅤㅤ 텍스트 에디터 (문서 편집기)
{{{#!wiki style="margin:0 -10px -5px; min-width:300px; min-height:calc(1.5em + 5px); word-break:keep-all"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
<colbgcolor=#887b7e> Windows 메모장 · 워드패드 · EmEditor · Notepad++ · EditPlus
크로스 플랫폼 Visual Studio Code · Sublime Text · Atom · Brackets
기타 운영체제용 vi · vim · BBEdit · Emacs
이 외 에디터는 문서 편집기 문서 참고 }}}}}}}}}

vi
개발자 빌 조이
최초 릴리스 1976년
개발 언어 C
운영 체제 BSD
언어 영어
라이선스 BSD 라이선스
웹 사이트 http://ex-vi.sourceforge.net/
1. 개요2. 역사
2.1. vi 이전2.2. vi 개발2.3. vim의 개발
3. 이용4. 특징5. 장점6. 단점7. 매뉴얼8. 관련 프로그램
8.1. IDE 에디터 플러그인8.2. 웹 브라우저 플러그인

1. 개요

vi는 빌 조이가 1976년도에 만든 UNIX 계열 운영체제에서 주로 쓰이는 유서 깊은 오픈 소스 문서 편집기이다. "Visual editor"라는 뜻이다. 요즘 대다수의 유닉스 리눅스 배포판에서 터미널에 vi를 치면 vim의 vi 호환모드가 뜨도록 하여 요즘에 리눅스나 유닉스를 배운 사람들은 vim이 vi인 줄 아는 경우도 있다. vim은 vi와 호환되기는 하지만 개발자부터 시작해서 완전히 다른 물건이다. 원칙적으로 텍스트 모드에서 작동하도록 만들어졌기 때문에 어떠한 플랫폼용 버전을 사용해도 기본적으로 모든 GUI가 텍스트 문자로 이루어져 있다. 내부 창 구분이나 구역 분할 등등.

2. 역사

vim은 어디서 왔나

2.1. vi 이전

옛날 옛적에는 텍스트를 편집할 때 라인 에디터(ed)라는 물건을 썼는데, 요즘에는 텍스트 에디터가 당연히 WYSIWYG이지만 라인 에디터는 "어디부터 어디까지 보여줘라"를 명령해야 보여주고 편집이 가능해지는 등 아주 골치 아프고 쓰기 불편한 물건이었다. 이는 당시 콘솔 환경이 모니터가 아니라 텔레타이프라는 일종의 프린터를 쓰는 경우가 있었고[1], 통신 속도가 1,000 bps도 안 되는 극저속이었기 때문에 1초에 한 화면 분량의 텍스트도 다 전송할 수 없었기 때문이다.

'편집할 줄을 선택하고, 그 줄의 내용을 바꾼다' 를 반복하는 방식의 에디터는 MS-DOS 시절에도 EDLIN이라는 이름으로 들어가 있었고, PC통신에도 회원 간 편지 보내기 기능의 기본 에디터로 들어가 있는 경우가 많았다. ed가 POSIX 표준으로 지정되어 있기 때문에 오늘날 유닉스 호환 컴퓨터에도 깔려 있다.

2.2. vi 개발

하지만 1줄씩만 보면서 코딩을 하는 건 귀찮은 일이었고, 결국, BSD 유닉스를 만들던 버클리 대학에서 빌 조이라는 전설적인 프로그래머가 ed에 '비주얼 모드'를 코딩해서 플러그인으로 만들어 넣었다고 알려져 있다.[2] 빌 조이는 후에 자바와 솔라리스 등으로 유명한 썬의 공동창업자가 된다. vi가 등장하면서 텍스트 편집이 매우 편해졌고, 라인 편집기에 플러그인으로 들어가 있던 vi가 아주 인기가 좋자 아예 별도의 프로그램으로 만들어졌다.

당시엔 Emacs가 유료였던 시절이고, BSD에 기본으로 설치된 에디터가 ed와 vi뿐이었기 때문에 선풍적인 인기를 끌게 된다.

2.3. vim의 개발

vi는 ed에서 파생되어 자유 소프트웨어가 아니었기 때문에 AT&T의 라이선스 없이는 코드 수정이 불가능했다. 따라서 vi를 오픈소스화한 여러 vi의 복제판들이 등장했는데, 그중 하나가 vim이었다. vim은 1991년 네덜란드의 브람 몰레나르(Bram Moolenaar)가 개발했으며 vi와의 호환성을 우선으로 하였다. vim은 "vi imitation"이라는 뜻이었지만 얼마후 "vi improved"로 바뀌었다.

오늘날에는 대부분 환경에서 vi를 입력해도 자동으로 vim으로 연결되기 때문에 일반적으로 vi라고 하면 오리지널 vi뿐 아니라 vim을 포함하는 경우가 대부분이다.

3. 이용

진입장벽이 높고 복잡한 모드라는 직관성을 다소 희생하는 수단을 취하는 대신 텍스트를 조작하는 기능에 치중하여 다른 편집기에 비하여 매우 간단한 키 입력으로 텍스트를 조작하는 것이 가능해졌다. 게다가 당시 컴퓨터 화면에는 지금의 모니터처럼 다양하고 직관적인 그래픽적 표시를 할 수가 없었으므로 화면에 일일이 시각적으로 표시해 주지 않을 바에야 최대한 짧고 간결한 명령 조작 체계를 도입하는 것이 합리적이었다.

과거 편집기의 주된 사용 용도는 C 프로그래밍이었다. 프로그래밍의 특성상 한 번에 타이핑하기보다는 조금씩 변경, 추가를 하는 일이 많다. 이렇다 보니 당시에는 '라인 편집기' 개념이 중요했다. 라인 편집기는 편집할 줄과 편집 방식을 지정-> 방식에 따라 편집->다시 돌아와서 다음 번 편집할 줄과 편집 방식을 지정의 순환을 거치며 작동한다.

vi는 라인 편집기 개념에 기반하고 있어 GUI에 익숙한 사용자들에게는 접하기 힘들고 생소하다. 초보자들이 vi를 처음 보고 가장 당황하는 것은 실행을 시켰는데 키보드가 먹히질 않는다는 점이다. 당황해서 막 누르다 보면 또 어느 순간 입력이 되기 시작한다. vi에는 일반 모드, 입력 모드, 명령 모드의 세 가지 모드가 존재하기 때문인데, 그걸 모르고 초심자가 vi로 뭔가 하려고 손댔다가 입력은 안 되지, 삭제도 안 되지, 갑자기 모드가 바뀌어서 입력이 되지, Esc 눌러도 종료는 안 되지... 이런 상황 때문에 봉변을 당하는 경우가 많다.

vi의 해괴한(?) 기능 키 선정 역시 당시의 키보드 구조를 보면 납득이 가는데, 아래의 그림을 보면 알 수 있겠지만 많이 쓰는 Esc, Ctrl 키는 지금과 달리 아주 가까운 곳에 있고 방향키는 애초에 키보드에 없어서 다른 키에 매핑하고 있는 것을 알 수 있다. 물론 지금 와서 완전한 구형 키배치를 쓰는 키보드는 해피해킹과 같은 덕후용(?) 특수 생산품을 제외하고는 거의 없긴 하지만, 사람 버릇이 된 단축키라는 것이 어디 그리 쉽게 옮겨가던가. (FPS에서 마우스와 키보드를 동시에 쓰기 위해 방향을 WASD로 옮겨서 쓰는 것이 관습인 것처럼) 커서를 이동하는 것만 봐도 위, 아래, 왼쪽, 오른쪽으로 이동하는 키는 각각 K, J, H, L이고, 입력 모드에서는 Alt+(K, J, H, L)이다. 처음에는 생소하겠지만 익숙해지면 손가락이 화살표 쪽으로 갈 일이 없다는 점에서 꽤나 높은 편의성을 가져다 준다.[3]

Emacs와 비교하면, 명령 입력을 위해서는 거의 항상 양손이 키보드 위에 있어야 하는 Emacs에 비해 vi에서의 편집은 한 손만으로도 웬만한 것들은 가능하다. 그리고 한 번 여기에 맛들이면 항시 양손을 사용해야 하거나 마우스를 건드려야 하는 편집기에는 기능이고 뭐고를 떠나서 자연스레 거부반응이 늘어나게 된다.

초심자들에게는 리눅스에서는 nano를, FreeBSD에서는 ee를 권한다. 혹은 리눅스 이용자라면 대부분 배포판에 vimtutor라는 튜토리얼이 깔려 있으니 이를 사용해서 하라는 대로 해보면 어느 정도 중요한 기능들을 익힐 수 있다.

심지어 vi의 키맵을 bash에서도 쓸 수 있다. `set -o vi`라고 치면 Esc 키로 일반 모드로 들어가는 등 vi에서 쓰던 키맵을 거의 그대로 쓸 수 있다.[4] 지금 편집 모드인지 일반 모드인지 바로 알기 어렵고 선택 기능이 먹히지 않는다는 (즉 비주얼 모드가 없다는) 불편함이 있긴 하지만[5] 엄청 긴 스크립트 짜는 것도 아닌 한 줄 짜리 bash 작업을 위한 것이라고 생각하면 오히려 차고 넘치는 기능일 것이다. (심지어 yank(복사)-put도 먹힌다!) zsh에서도 같은 방식으로 사용 가능하다.

vim 8.0부터는 터미널 에뮬레이팅도 지원한다. :term이라고 입력해 보자. Ctrl+W를 위시로 한 다양한 단축키들을 이용하면 vim 내부의 터미널 내용을 편리하게 스크롤 할 수 있고 복사해서 가져 올 수도 있으며 반대로 vim 버퍼에 있던 내용을 vim 터미널 에뮬레이터에 Ctrl+V 하는 것마냥 붙여넣는 것도 가능하다.

중증 vi 중독자는 Windows에서도 편하다고 vi를 깔아서 쓴다. 실제로 Windows용이 따로 있다. 실행하면 유닉스나 리눅스에서와 똑같이 윈도우 창에 텍스트 화면만 달랑 나온다. 당연히 현재 Windows는 GUI로 쓰는 것이 일반화되어 있기 때문에, GUI 환경에서 쓰기 쉬운 버전도 있다. 리눅스에서 작성된 텍스트를 읽는데 유용하게 쓸 수 있다. 윈도우에선 일반 편집기와 같은 모드가 기본이나 설정파일을 수정하면 오리지널 모드로 변경 가능하다.

다만 상당수의 vi 사용은 리눅스에서 이루어지기 때문에, vi를 가르친다면 아예 PuTTY 같은 것을 깔아 리눅스 서버를 연결하고, 그 서버의 vi를 열어 가르치는 경우가 대부분이다. 이 경우 흔히 필수 설정을 좀 만져주지만, 거기에 자동 완성 같은 건 없다. 다른 편집기와 너무나도 다른 부분들[6]을 만져주는 정도니 크게 기대는 하지 말자.

4. 특징

편집 자체를 따로 하나의 모드로 구성하여 키 조작을 크게 단순화시킨 것이 특징이다. 일반 편집기에서는 입력모드와 편집모드가 구분이 되어있지 않기 때문에, 텍스트 입력에 쓰이는 알파벳이나 숫자 키 자체를 기능키로 사용하지는 못한다. 덕분에 편집 시에는 손가락이 거의 항상 shift, ctrl, alt 쪽에 붙어 있어야 하는데, vi에서는 그냥 단타나 연타로 끝난다. 예를 들어, 커서 움직임은 hjkl, 한 글자 지우기는 그냥 x, 한 줄 전체 지우기(컷)는 dd, 한 줄 전체 복사는 yy, 붙여넣기는 p 식이라, 기본적인 수준의 편집은 그냥 hjkl로 움직이고 지우고 복붙하고 하면서 커피 마시면서 한 손으로도 가능하다.

두 번째는 함수형 명령들이다. 함수형 명령이란 예를 들어 f(x,y) 가 있다면 f x y를 순서대로 입력하는 방식이다. 쉽게 예를 들면, d라는 명령은 이것만으로는 아무것도 일어나지 않는다. 위의 예에서 f와 같은 함수라 인자를 받아야 작동한다. 물론 아무 인자나 받는 것은 아니고 '커서 이동'에 관한 명령을 인자로 받는다. 즉, 우측으로 한 칸 이동하는 명령인 l을 인자로 주어 dl을 순서대로 입력하면 우측 한 글자가 지워지고, 줄의 맨 처음으로 커서를 보내는 ^(혹은 0)과 조합하여 d^를 순서대로 입력하면 해당 위치에서 줄 첫부분까지가 모두 지워지는 식이다.

이것이 가장 많이 쓰이는 부분이 바로 수+명령인데, vi 에서 수는 뒤에 오는 인자를 받아 그 수만큼 반복 실행하는 함수로 볼 수 있다. 즉, 문자 하나를 지우는 x라는 명령과 수 50을 조합하여 50x를 입력하면 50글자가 지워지는 식이다.

함수의 인자로 다른 함수를 지정하는 것도 역시 가능하다. 즉, 5dk라는 명령은 5라는 함수, d라는 함수 그리고 k라는 커서 이동 인자로 구성되어 5(d(k)) 라는 함수로 볼 수 있다. 즉, d(k)라는 함수를 5번 반복하는 명령이 된다. k가 커서를 한 줄 위로 올리는 것이고, dk는 윗줄을 지우는 명령이 되기때문에 위로 5dk 는 위로 5줄을 삭제하는 명령 정도로 볼 수 있다.

이런 식으로 매우 간편하게 입력 가능한 편집 명령에 더해서 그것을 함수형으로 조합하여 타수를 더욱 절약하는 것이 가능하기 때문에, 그것에 특화된 기능이 따로 제공되지 않는 복잡한 작업일수록 vi에서 타수는 훨씬 줄어든다.

물론 vi/Vim 에디터 자체는 상당히 오래되었고, 레거시 유지용, 혹은 터미널 접속용 으로 사용되는것이 대부분이다. 아무리 플러그인이 많다고 해도 기본적인 에디터만 제공하기 때문. 하지만 조작방식 자체는 결코 구식이고 비효율적이라고 할 수 없기 때문에 많은 IDE 들의 플러그인으로도 존재한다. 그렇기 때문에 vi/Vim 그 자체보단 조작방식만 좋아하는 사람들은 IDE 에 vi/Vim 을 올려서 쓰는 경향이 있다.

하지만 제일 중요한건, vi/Vim 은 단순한 도구, 에디터일 뿐이며 이걸 사용 할 줄 안다고 코드 퀄리티가 높아지는 것은 아니다. 때문에 아무것도 모르는 상태에서 vi/Vim 이랑 씨름하는것은 대부분의 경우 추천되지 않는다. 우선은 개발 그 자체에 익숙해진 뒤 필요해질때 배우는 것이 이상적이다.[7]

5. 장점

숙달되면 아주 편하고 강력한 편집기가 되는데, 커서 이동을 비롯하여 대부분의 편집 명령어가 키보드 중심에 몰려있고, 모드를 이용하여 키 조합을 하지 않아도 되는 경우가 많기 때문에 같은 작업을 해도 타 편집기에 비해 손동작이나 타수가 크게 줄어든다. 텍스트 편집에 한정해서는 어떤 물건과 비교해도 크게 꿀릴 일이 없다. 즉, 단축키 등을 모두 습득하면 아주 빠르고 능률적으로 작업을 할 수 있다. 특히 중요한 점은, 어떤 유닉스나 리눅스 시스템에 가도 vim (vi Improved)는 기본적으로 깔려 있다는 것. POSIX에 포함된 사항이다. # 그 결과, vi의 키 조합은 유닉스의 상징과도 비슷한 존재가 되어 오늘날 웹브라우저, 파일 매니저 및 기타 등등 유닉스용 프로그램 상당수는 에디터가 아니라 할 지라도 기본적인 vi의 키맵을 지원하는 경우가 많다.

vi가 어렵다는 인식이 있지만 그래도 Emacs에 비하면 훨씬 심플하다. vi가 다양한 빌트인 함수를 이용하는 것이라면, emacs의 경우에는 아예 함수를 바닥부터 직접 만들어서 쓰는 편집기라 보면 된다. 덕분에 Emacs는 단순 편집기의 영역을 넘어 뉴스리더, 웹서핑, 메일 클라이언트, 파일 관리자 등을 모두 수행할 수 있고(물론 vim으로도 가능하다.) 그만큼 제대로 사용하기가 엄청나게 어렵다.

예를 들어 문서의 특정 문구나 구간을 반복작업하거나 일명 '노가다 편집'을 해야 할 경우, vi의 입력기능을 사용하면 매우 단축시켜서 작업을 수행할 수 있다. 명령어를 외울 때도 자주 쓰는 명령어조차 키 조합을 추가로 조합해서 사용하는 경우가 잦은 Emacs에 반해 vi에서는 그냥 영문 단타로 끝나는 경우가 많아 금방 손에 익게 된다. 물론 강력한 사용을 위해서는 정규표현식도 습득할 필요가 있지만, 이것은 굳이 vi가 아니더라도 유닉스 환경이나 프로그래밍에서 모르면 안 되는 것에 속하고, 굳이 모르더라도 매크로 기능으로 대부분 대체가 가능하다. 말 그대로 키 스트로크를 레코딩해서 원하는 횟수만큼 자동 반복을 시키는 기능이다. 정규표현식의 경우 더 편리하긴 하지만, 사소한 오타에 왕창 잘못되는 경우가 많아(undo 기능이 있으니 큰 문제는 아니다.), 직접 눈으로 중간과정을 보면서 컨트롤이 가능한 매크로 기능을 더 애용하는 사람도 많다. 즉 기본적인 커서 이동, 모드 전환, kill/yank/put, 버퍼/창 관리에 더해 정규표현식과 매크로만 어느 정도 알아도 기본적인 사용에는 거의 문제가 없으며, 텍스트 편집 시 훨씬 적어지는 키보드 타수를 느낄 수 있다.

파일:attachment/vi/vi-keyboard.png

이것이 처음 나온 1976년 당시에는 사진과 같이 키보드에 화살표 키가 따로 배정되지 않았다. 일반 모드에서의 hjkl 키는 이 화살표 키를 대신하는 키들. vim에서는 화살표 키를 사용해도 된다. 그리고 진성 vi빠들은 화살표까지 손을 옮겨가며 타이핑하려면 '손이 항상 자판키 위에 있다'라는 vi만의 장점이 사라지니까 화살표를 쓰면 그건 vi가 아니라고 한다.[8] 그리고 당시 키보드는 사진에서 보이듯이 Esc와 Ctrl이 누르기 아주 편한 위치에 있기 때문에 vi의 키 배열도 이에 최적화되어 Esc와 Ctrl을 많이 사용한다. 하지만, 오늘날 키보드에서는 이 두 키 모두 키보드 중심에서 가장 멀리 떨어져 있기 때문에 키보드 펌웨어 OS 상에서 키 배열을 바꿔쓰는 게 편하다. 예를 들면 Caps Lock과 LCtrl, Tab과 Esc 등을 바꿔 쓰면 vi 외의 경우에도 편한 경우가 많다. 혹은 Esc 키 대신에 Ctrl+[를 써도 된다. 해피 해킹 키보드 같은 경우는 아예 윈도우 사용자를 전혀 고려하지 않고 vi에 최적화되어 나온 키보드라 볼 수 있으니 골수 vi 팬이라면 가격이 비싸지만 장만하는 것도 나쁘지 않을 것이다.

세상에 공개되고 많은 시간이 흐른 만큼, 커뮤니티가 커서 관련 노하우를 쉽게 검색할 수 있다. 커스터마이징이 쉽다는 점, 그리고 많은 사용자들이 사랑한다는 점이 만나 유용한 플러그인들이 굉장히 많이 개발되었고, 또 지금도 개발되고 있다. 관련 플러그인들은 공식 홈페이지의 스크립트 페이지 Awesome 페이지에서 쉽게 접할 수 있다.

프로그래머를 위한 다양한 플러그인들이 존재하는데, 특히 YouCompleteMe를 추가하고, 각 개발 언어에 따른 세팅을 하고 나면 IDE와 동급이거나 그 이상의 편리함을 자랑한다.

굳이 vi/vim 오리지널 뿐만 아니라도 수많은 IDE 들은 vi/vim 의 키맵을 사용가능하다. 이는, IDE 마다 단축키를 따로 기억하지 않아도 된다는 장점도 같이 가져온다. 만약 본인이 사용하는 플랫폼, IDE 가 너무 다양하여서 단축키 설정이 곤란하다면 전부 vi/vim 플러그인을 사용한다면 단축키가 통일되게 된다.

장점이자 단점으로 키보드 의존도가 높아 영타가 적어도 250[9]은 넘겨야 본 효율이 나온다. 하지만 반대로 키보드 의존도가 높다는 점 때문에 vi/vim 을 사용하면 영타속도가 급격히 빨라지는 경험을 하게 된다. 혹은 vi와 영타 모두 포기하게 되거나

6. 단점

파일:VOe71EA.png
"전 지금 거의 2년째 vi를 사용하고 있어요.
어떻게 나가는지를 모르거든요."

숙련된 프로그래머가 사용할 경우 일반적인 편집기보다 빠르게 소스 코드를 편집할 수 있긴 하나, 그렇다고 현대의 개발업계에서 생산성을 극적으로 올려 준다고 보기는 힘들다. 예를 들어 윈도우즈 프로그램을 vi와 WinAPI를 써서 개발하는 것보다 그냥 VS MFC로 개발하는 것이 더 빠를 것이며, Visual Studio, IntelliJ IDEA, 이클립스 등 강력한 IDE에서 언어에 특화된 여러 기능들을 제공하기 때문에 그런 기능을 이용하지 않는다면 구질구질하게 암기해서 타이핑 할 것을 내장된 단축키 조합만으로도 코딩, 리팩터링 작업을 할 수도 있다. vi가 텍스트 편집에 이점이 있더라도 좋은 프레임워크와 클릭 몇 번으로 많은 타이핑 작업을 대체할 수 있는 IDE를 사용하는 것보다 생산성이 높다고 할 수는 없다. 게다가 최근의 IDE의 경우, 인텔리센스 및 스마트 리팩토링 기능이 워낙 강력해서 평범하게 입력하는 것 만으로도 상당한 정보를 자동완성해주거나 코드를 꼬이지 않게 자동으로 수정해 주는 기능이 매우 뛰어나 vim의 '매크로화된 단축 입력'의 빛이 많이 바랬다. 심지어 최신 Visual Studio의 경우 딥러닝 인공지능이 현재 입력하고 있는 코드를 보고 '아마 앞으로 이런 동작을 하는 이런이런 코드를 입력할 것 같다' 라고 자동완성 제안으로 코딩을 대신해주는 등 어마어마한 수준의 기능들이 IDE에 추가되는 실정이다.



물론 vi와 육중한 IDE의 기능은 서로 충돌하는 것이 아니다. vi의 핵심은 키맵이고, IDE의 핵심은 특정 언어에 특화된 여러가지 편의 기능들이다. 즉, 다양한 편의 기능을 갖고 있는 IDE에 vi의 키맵을 올려 사용한다거나 혹은 vi에서 편집하고 IDE로 불러와서 원하는 기능을 적용하는 식으로 얼마든지 절충이 가능하다. 단순한 비호가 아니고, vi와 IDE를 동시에 사용하는 프로그래머도 적지 않으며, 실제로 많이 쓰는 IDE&편집기에는 vi 플러그인이 있는 경우가 많다. 그 예는 아래 번외편을 참조.

반대로, 전세계 vim 덕후들이 만들어 놓은 vim 플러그인을 붙이고 설정 파일 커스터마이징하면 텍스트 편집기 수준을 넘은 강력한 자동 완성 기능을 포함한 일종의 IDE로 만들어 놓을 수 있다.




7. 매뉴얼

다음은 vi에서 주로 사용하는 3가지 모드.

파일:attachment/Vi_How_it_Works_angelhalo.png
일단 처음 사용할 때는 대부분 기존에 있는 파일을 수정하는 경우일 것이다. vi는 리눅스를 처음 접할 때 거의 백이면 백 필수적으로 접하게 되고, 리눅스의 각종 설정 변경은 설정이 담겨 있는 텍스트 파일을 직접 수정하는 일이 많기 때문이다. 이 경우는 많은 명령어를 기억할 필요 없이 위에 있는 설명만으로도 충분히 사용 가능하다. 요즘 리눅스 배포판에 기본으로 들어 있는 vi는 입력 모드가 일반적인 텍스트 에디터와 거의 비슷하게 작동한다. 커서도 화살표 키로 이동 가능하다.

vim에서는 wq 대용으로 x 명령어가 있다. :x 의 경우 변동 사항이 없으면 그냥 종료한다. 반면 :wq는 항상 저장하고 종료한다. :x와 달리 :X는 파일 암호화에 사용되는 명령이므로 절대로 혼동하지 않도록 하자.

스크립트를 통한 확장 기능을 사용할 수 있다. vim 사이트에서 하나씩 받아서 적용할 수도 있으나, vundle이란 확장 기능을 통해 플러그인 설치 자동화를 할 수 있다. http://wiki.kldp.org/wiki.php/VimEditor 에서 vundle 관련 내용을 참조.

8. 관련 프로그램

8.1. IDE 에디터 플러그인

Visual Studio VsVim
Xcode Xvim
Eclipse Vrapper
IntelliJ IDEA / Android Studio IdeaVim
Atom vim-mode-plus
Visual Studio Code VSCodeVim
NetBeans / JBuilder jVi
Jupyter notebook jupyter-vim-binding
Sublime Text vintage
Emacs Viper Mode Evil
Qt Creator FakeVim

8.2. 웹 브라우저 플러그인

브라우저 vim의 키 매핑을 적용해서 웹서핑을 즐기는 것도 가능하다. 마우스 트랙패드의 필요성이 사라지거나 최소화된다. 특히 포인팅스틱이 탑재된 키보드와 같이 사용하면 매우 최적화된 웹서핑을 할 수 있다. 키보드 정중앙에 위치한 포인팅스틱과 키보드 아래의 버튼들이 마우스 역할을 대신하고, 그럼으로써 키보드에서 손이 떠나지 않고 웹서핑을 할 수 있기 때문이다.
하지만 어디까지나 브라우저 확장기능이기 때문에, 확장기능 제한이 걸린 페이지에서는 동작하지 않을 가능성이 매우 크다. 페이지의 구성요소들이 HTML 보다 JavaScript 의 의존도가 높은 페이지여도 동작이 정상적으로 되지 않는 경우가 다수.
Firefox Vimium - FF[15], Vim Vixen[16]
Chrome, Chromium cVim, Vimium
Microsoft Edge Vimium C[17]]
Opera VimOperate[18]
Safari Vimari


[1] 예컨대 셸에 디렉토리의 파일과 디렉토리를 모두 보여주는 유닉스/리눅스 명령인 ls를 치면 모니터가 아니라 연결된 프린터를 통해 종이에 해당 명령의 결과가 표시되는 식이었다. 물론 이때 프린터는 구식 카드단말기의 '찌지직~'하며 영수증을 뽑아내는 서멀 프린터처럼 도트 형태의 프린터라 매우 느렸다. 거의 초당 2줄 정도를 인쇄한다고 생각하면 쉽다. [2] 할 일 없는 주말에 만들었다는 설도 있으나 나중에 인터뷰에서 진짜 주말에 잠깐 해서 만든건 아니라고 이야기했다. [3] 쿼티 키보드 상에서 나타나는 HJKL 순서로 놓으면 ←↓↑→이 되는데 이는 댄스 댄스 레볼루션의 화살표 순서와 일치한다. 단순한 우연인지 아니면 DDR 제작진들이 HJKL 순서를 참고했는지는 알려지지 않았다. [4] 다만 이런 세팅 없이도 Emacs의 키맵은 처음부터 쓸 수 있긴 하다. [5] 선택을 쓴다고 v를 누르면 (혹은 입력 모드에서 Ctrl+X-Ctrl+E를 누르면) 소위 커맨드 라인 편집 모드(command line editing mode)라고 해서 미리 지정된 편집기에서 쓰고 있던 명령 라인을 수정할 수 있다. 명령어가 너무 길어지면 나름 쓸만한 물건이다. 다만 기본으로 지정된 편집기가 쓰던 것과 다를 수 있다. 예를 들어 우분투에선 무려 nano가 기본으로 지정되어 있다. $VISUAL이나 $EDITOR를 바꿔서 원하는 걸로 바꾸자. 다만 zsh에서는 안 먹히는 듯. [6] 지 혼자 들여쓰기의 간격이 2배(8칸)라든가 [7] 일부 대학이나 교육기관에서 교수나 강사가 저지르는 가장 큰 실수중 하나라고 볼 수 있는데, 리눅스를 겨우 버츄얼 머신에서 설치한 교육생에게 대충 기능설명 후 바로 터미널과 vi부터 꺼내 윈도우나 맥보다도 너무나도 다른 에디팅 환경에 놀라 리눅스 포기자로 만들어 버린다. [8] 취소선이 그어져 있지만 실제로 진성 vi 유저는 이것을 최강의 장점으로 친다. 사용법만 익히면 이만하게 손이 덜 움직이는 에디터도 없다는 뜻이다. 세벌식 자판과 비슷한 부분. [9] 글자수(letters) 기준. wpm으로는 50에서 70 정도가 된다. 즉, 자판을 보지 않고 어떤 문자가 어디에 있는 지는 알아야 한다는 소리. [10] 우선 리눅스를 배우는 과정에서 리눅스 설치 이후 터미널과 vi/Vim을 연습해본다. 이게 말로만 듣던 리눅스의 메모장이래! 해서 열었더니 터미널에거 vi를 실행하면 무의 검은 화면만 뜬다. 몇번 타이핑 해본 뒤, 여기서 사용법을 더 알기 위해(또는 저장후 종료하기 위해) 일단 끄려고 해도 검색할 스마트폰이나 책과 같은 교보재가 없으면 여기서 위의 짤처럼 vi에 갇혀버린다. 답은 터미널 또는 리눅스 강종. CUI 환경에 익숙하지 않은 현세대 유저들이 필수적으로 겪는 첫번째 벽이나 마찬가지이다. 타 언어도 조금 딥하게 파다보면 벽이 느껴지지만 다른 IDE의 자동완성으로 도움을 받아 hello world는 간단히 만들고 흥미를 느낄 수 있으나, 윈도우에서 메모장에 hello world 쓰고 컨트롤 S 누르면 늦어도 10초정도 걸릴시간에 터미널에서 vi로 hello world를 치고 저장후 터미널에서 저장한 파일을 불러오려면 MS-DOS나 파워셸을 조금이라도 만져본 사람이라면 간단히 해내겠지만 CUI 환경 자체가 처음이라면 이것부터 끔직하게 오랜시간이 걸릴 수 있다. [11] 당장 MS-DOS 시절의 도스 에디터만 하더라도 복사를 Ctrl+Ins, 붙여넣기를 Shift+Ins로 사용했다. 도스 시절 아래아 한글도 마찬가지. Ctrl+C,V가 보편화된 것은 윈도우 시절에 들어선 이후이다. [12] 물론 터미널에서 Ctrl C를 누르면 중지 인터럽트가 나가기 때문에 vi에만 한정된 문제는 아니다. [13] 읽기전용 파일을 수정 후 저장할 때라든지. [14] wq!는 ZZ(shift 누른 상태로 z키 연타), q!는 ZQ로 대신할 수 있는데, 이쪽은 엔터를 칠 필요 없이 입력하는 즉시 실행된다. 익숙해지면 매우 편하다! [15] 아래 Vimium의 파이어폭스 포팅 버전. [16] 파이어폭스 57 이상 버전과 호환된다. [17] 개발자가 하나의 중국을 지지한다. [[https://github.com/gdh1995/vimium-c?tab=readme-ov-file#declaration-for-applicable-regions|#] [18] 404에러와 함께 플러그인이 설치되지 않을 경우 크롬 플러그인을 사용가능해주는 오페라 플러그인( Install Chrome Extensions)을 설치한 다음, Vimium을 설치하면 된다. 자세한 사항은 https://superuser.com/questions/406210/what-is-the-closest-pentadactyl-vimperator-clone-for-opera 참고하기 바란다.