[[TableOfContents]] = 개요 = Text Editor인 VI 의 확장판. [[NoSmok:CharityWare]], [[WikiPedia:Careware]] 인 아주 유연한 에디터. 처음에 접근하기 어렵지만, 익숙해지면 여러모로 편리한 응용이 가능하다. 사실 다들 오해하고 있는 것 중의 한가지로는 vim은 불편하다는 것이다. 최근의 vim은 플러그인을 통해 여러가지 기능을 지원하며 그 중에는 단어 자동완성을 물론 문맥 자동완성뿐만 아니라 대부분 언어에 대한 syntax highlight를 지원한다. 요즘에는 흔히 볼수있는 탭기능도 지원하기 시작한지 오래되었으며 좌측에 파일 트리를 띄워두고 작업할수도 있다. 또한 .vimrc파일을 통한 강력한 커스텀마이징이 가능하며 이를 이용하여 이클립스를 능가하는 편의성을 지니기도 한다. == 모드 == vi에는 여러가지 모드가 존재한다. vi를 처음 켰을때의 모드는 명령모드(command mode)이다. 각 모드는 명령모드에서 진입할수 있게끔 되어있다. 모든 모드에서는 기본적으로 esc를 눌러서 명령모드로 돌아 올수 있다[* 이때문에 CAPSLACK을 ESC키로 매핑해 놓는 사람도 있다]. 이를 [state diagram]으로 나타내면 다음과 같다. [attachment:ViImproved/vim_mode.png] === 명령모드 === 모든키가 하나하나 명령으로 동작하는 모드이며 이 모드에서는 주로 문서내에서의 이동이나 편집을 담당하게 된다. 키조합을 통해 상당히 많은 명령이 가능하며 이모든 명령을 다 외우는 사람은 없다고 봐도 무방하다. 하지만 주로 쓰는 명령은 극히 제한적이고 논리적으로 정리되어 있는 편이기 때문에 사용하는 데에는 큰 무리가 없다. === 편집모드 === 실제로 문서를 편집하는 모드이며 명령모드에서 i키를 눌러 진입할수 있고 ESC키를 눌러 빠져 나올수 있다. 이 모드는 글자의 입력에만 사용되므로 극히 일부 키만 제외하고는 window의 메모장 처럼 그져 입력만 할수 있다. 상단에 위치한 Function Key[* F1~ F12]들도 그냥 입력이 될뿐 동작하지 않는다. === ex모드 === 명령모드에서는 할수 없는 동작들을 수행한다. 주로 명령에 인자가 필요한 경우가 대부분이며 편집기를 닫거나 새로운 파일을 열거나 할때 사용된다. 명령모드에서 :를 눌러서 ex모드로 들어갈수 있으며 하단에 :과 더불어 명령의 내용을 확인할수 있다. === 비주얼 모드 === 잘라 붙이기나 복사할때의 영역을 지정할수 있는 모드로 명령모드와 유사하나 범위를 지정할수 있는 것이 큰 차이점이다. 주로 문서를 편집하기 위해 명령모드와 같이 많이 사용되며 자신이 선택한 영역이 어디에서부터 어디까지인지 알수 있다. 다만 당연하게도 마우스로 지정할수는 없고[* gvim 같은경우에는 마우스로 선택하면 자동으로 비주얼모드로 전환된다] 키보드로 지정할수 있다. === 찾기 모드 === 특정한 문구를 찾기 위한 모드이며 별도의 모드로 취급하지 않을때가 많다. ex모드처럼 하단에 명령이 보이나 :으로 시작하지 않고 /로 시작한다. [정규표현식]을 사용하여 검색할수 있으며 정규표현식에 익숙하다면 누구보다 빠르게 문서를 검색할수 있다. = 단축키 = vim에서는 단축키라기 보다는 실제 명령이라 할수 있다. 왜냐면 해당하는 작업을 하기 위한 방법이 해당 키를 누르는 것 밖에 없기 떄문이다. vim은 console기반이기 떄문에 당연히 마우스는 배제되며 마우스로 할수 있는 일을 쉽게 할수 있는 방법으로써의 key가 아니기 때문에 엄밀히 말하면 단축키는 아니다. 오히려 명령어라는 표현이 많이 사용되지만 GUI 편집기에 익숙한 사람들입장에서는 단축키로 보이므로 단축키라 하겠다. == 명령모드 == === 이동 === 이동 명령어들은 아주 중요하다. 과거에 오리지널 vi는 방향키를 인식하지 못하며[* 이전에는 키보드에 방향키가 없었다] 따라서 이동키를 이용하는 것이 유일하게 커셔를 옯길수 있는 수단이었다. ||앞으로 한칸 이동 || h || ||위로 한칸 이동 || j || ||아래로 한칸 이동 || k || ||뒤으로 한칸 이동 || l || ||다음단어의 처음으로 || w || ||다음단어의 처음으로 (특수문자 무시) || W || ||다음단어의 마지막으로 || e || ||다음단어의 마지막으로 (특수문자 무시)|| E || ||이전단어의 처음으로 || b || ||다음단어의 처음으로 (특수문자 무시) || B || 위의 키들은 숫자 키와 더불어 사용될수 있으며 이를 이용해 빠르게 이동이 가능하다. {{{3j}}}는 위로 세칸을 이동하는 것이며 {{{40w}}}는 40단어 뒤의 처음으로 이동하는 것이다. 처음에 J와 K가 많이 헷갈리게 되는데 중간에 슬래쉬를 넣어 HJ/KL로 외우면 좀더 쉽게 외우는 것이 가능하다. ||줄 끝으로 이동 || $ || ||줄 처음으로 이동 || ^ || ||일치하는 괄호로 이동 || % || ||문장 시작 || ( || ||문장 끝 || ) || ||화면의 처음 || H || ||화면의 마지막 || L || ||문서의 처음 || gg || ||문서의 마지막 || G || 여기서 문장이란 빈 줄로 구분된것을 말한다. 즉, 문장과 문장 사이에는 빈줄이 존재하고 약간 어렵게 말하면 줄바꿈 문자가 두개 연속된 곳을 문장이 구분된 곳이라고 인식한다. 이동키는 나중에 편집키들과 조합하여 범위를 지정하는데 사용할수 있다. === 편집 === 편집은 크게 자르고 붙이는 것을 말한다. ||자르기 || d || ||복사 || y || ||뒤에 붙이기 || p || ||앞에 붙이기 || P || 위의 키들은 기본적인 편집 키들이다. 자르거나 복사할때에는 범위가 필요한데 이때의 범위는 위의 이동키로 지정한다. 예를들어 {{{y3j}}}는 아래로 3번째줄까지 복사하라는 의미이며 {{{d$}}}는 현재줄의 마지막까지 잘라내라는 의미가 된다. 이때 주의 할점은 해당하는 커셔의 위치까지 적용이 된다는 것이다. 예를 들어 다음과 같은 텍스트가 있다고 하자 {{{ var express = require('express') var routes = require('./routes') var http = require('http') var path = require('path'); }}} 커셔의 위치가 express단어의 처음에 있다고 하면 {{{d3j}}}명령은 전체 내용을 지우게 된다. 이는 커셔의 위치해 해당하는 범위까지 편집명령이 적용되기 때문인데 비 직관적인것 같다면 고쳐지지 않고 그대로 사용하고 있다. 아무래도 편집명령에서 이동하는 거리와 이동명령에서 이동하는 거리를 동일하게 하는 것인것 같긴 하다. [[include(틀:작성중)]] == ex모드 == ||tabnew||새탭을 연다|| ||tabnext||다음 탭으로 간다.|| ||tabprev||이전 탭으로 간다.|| ---- * http://www.vim.org - Vim 을 얻을 수 있는 곳. * http://www.vim.org/scripts - vim plugin * [http://vim-scripts.org/ Vim Scripts] = 참고 링크 = * [Linux/Development UsingVIM] * [[http://vim.wikia.com/wiki/Vim_Tips_Wiki|Vim Tips Wiki]] * [[http://doc.kldp.org/KoreanDoc/html/Vim_Guide-KLDP/Vim_Guide-KLDP.html|Vim Guide]] * [[http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html|Graphical vi-vim Cheat Sheet and Tutorial]] * [[http://kldp.org/node/102947|Vi/Vim 단축키 모음 -KLDP]] ~ 위의 링크 한글 버전 * http://kltp.kldp.org/stories.php?topic=25 - kltp 의 vi 관련 팁 모음, 홈페이지 자체는 지원 중단됨 - DeadLink * [[http://kldp.org/node/125263|vim 사용자를 위한 플러그인 매니저 vundle 을 소개 합니다. - KLDP]] ---- ["도구분류"]