VIM(VIsual editor iMproved)
아주 옛날 옛적 사실상 처음으로 등장한 WYSIWYG 에디터. Mode가 존재한다는 것이 가장 큰 특징이자 초심자들에게 큰 장벽으로 작용하곤 한다. 당연히 마우스가 사용되기 전에 개발된 물건이므로 모든 작업이 키보드로만 가능하다. 이것이 오늘날에도 큰 장점이 되기 때문에1 아직까지도 많이 쓰이는 에디터이다.
사용법
vim은 어렵다고 소문나있지만 겁먹지 말자. EMACS보다는 훨씬 쉽고 모드만 이해하면 기본적인 편집은 어렵지 않게 할수 있다.
모드
Vim의 모드는 총 5가지로 나눌수 있다.2
모든 모드에서 ESC를 누르면 기본모드인 명령 모드로 돌아갈수 있도록 디자인 되어 있으며 이때문에 ESC는 굉장히 자주 누르는 키가 된다. 이는 예전 키보드에는 ESC가 CAPSLOCK위치에 있었어서 지금보다는 훨씬 누르기 편했기 때문이다. 그래서 VIM을 옛날 부터 써온 사람들은 CAPSLOCK키를 ESC키로 바꾸어 사용하기도 하나3 굳이 바꾸지 않아도 큰 불편은 없다.
그외 다른 모드로 진입하기 위해서는 명령 모드에서 각 모드로 진입할수 있는 명령키를 누르면 각 모드로 전환 할수 있다. 명령 모드를 제외하고 현재 상태가 좌측 하단에 표시되므로 이를 이용해서 현재 어떤 모드에 있는 지 알수 있다.
Mode | 명령키 |
---|---|
Edit Mode | i, a, o |
EX Mode | : |
Search Mode | / |
Visual Mode | v |
명령모드
이 모드에서는 문서의 편집을 빠르게 할수 있도록 되어 있으며 vim의 기본 모드이기도 하다. 다른 모드에서 ESC키를 누르면 명령모드로 돌아오도록 되어 있다.
편집모드
이 모드에서는 메모장과 같이 글자를 입력할수 있다. 과거의 VI에서는 줄의 삭제나 커셔의 이동이 불가능 했지만 VIM에서는 화살표 키나 HOME, END 같은 이동키는 물론 Backspace 나 Delete 키도 모두 동작하기 때문에 마우스 없는 메모장 처럼 사용할수 있다. 또한 편집 모드에서는 좌하단에 Insert가 나타난다.
EX모드
이 모드에서는 저장이나 새 파일을 여는것, 외부 스크립트 실행이나 다양한 동작들을 실행할수 있는 모드이다. 편집에 관계되지 않는 명령들이 주를 이루고 있으며 VIM의 설정값을 변경할수도 있다. EX모드에서는 좌하단에 ‘:‘이 나타나고 명령이 그뒤에 적히게 끔 되어 있다.
검색모드
이 모드는 현재 문서에서 원하는 문자열을 찾아주는 모드이다. ESC를 눌러 취소하거나 Enter키를 눌러 검색할수 있다. 검색모드에서는 좌하단에 ‘/‘가 나타난다.
Visual 모드
이 모드에서는 이동키를 활용해서 블록설정을 할수 있다. 마우스로 드래그해서 블록설정하는 것과 동일한 개념이다. 블록 설정을 통해 편집할 부분을 상세하게 설정할수 있다.
명령키
명령키는 종종 단축키라고 잘못 불려지기도 한다. 하지만 vim에는 단축키라는 개념이 없기 때문에 단축키라 부르는 것을 잘못되었다고 할수 있다. vim에서는 명령키 없이는 편집자체가 안되기 떄문에 GUI에서 흔히 하듯 마우스로 편집하는 것을 키보드 명령으로 줄이는 단축키가 있을리가 없기 때문이다. 물론 복잡한 동작을 매크로로 만들어 키에 바인딩 할수 있으나 단축키라고 부르기에는 무리가 따른다. 모든 명령키를 여기서 소개하는 것은 불가능에 가까우므로 여기에서는 자주쓰는 단축키만 소개하도록 하겠다.
일반모드(편집)
편집 모드는 모든 키가 편집에 관련된 기능으로 패핑된다. 익숙해지면 엄청난 속도로 편집이 가능하게 된다. 오리지널인 vi 와는 달리 방향키와 page up, page down, home, end 키를 모두 사용할 수 있다. 하지만 전통적인 이동키인 hjkl
도 제공한다.
key | 방향 |
---|---|
h | 왼쪽 |
j | 아래 |
k | 위 |
l | 오른쪽 |
특히 위아래가 많이 헷갈리는데 hj\kl
처럼 가운데 역슬러시가 들어가 있다라고 생각하면 조금이나마 편하게 외울수 있다. 이렇게 헷갈리는 이동키를 아직도 유지하고 있는 것은 오래전부터 이렇게 써왔기도 하지만 아래에서 소개할 편집키들과 조합하여 사용할 경우 거리가 먼 방향키 보다 간편하게 사용할수 있기 때문이다. 적어도 위아래 키정도는 외워 두는 것이 좋다.
vim에서는 복사 붙여넣기가 별도의 버퍼에서 이루어 진다. 당연히 vim 이 사용되는 곳은 콘솔이고 콘솔에서는 클립보드라는 개념이 없다. 따라서 별도의 버퍼로써 이 기능이 구현이 되는데 이를 이해하지 못하고 vim 에는 복붙이 안된다고 하는 경우도 많다. vim의 버퍼는 여러개이기 때문에 여러개를 각각 복사해두고 각각 다른곳에 붙여넣을수도 있다4.
key | 기능 |
---|---|
y | 복사 |
d | 잘라내기 |
p | 붙여넣기 |
P | 붙여넣기 |
vim에서는 지우기 기능을 잘라내기로 대신한다. 따라서 무언가 지우고 싶다면 잘라내기를 하면 된다. 붙여넣기키가 2가지 인데 현재 커셔의 앞에 붙이는가 뒤에 붙이는 가에 따라 다르다. shitf를 누른 상태면 앞에, 그렇지 않으면 뒤에 붙여넣기가 된다.
key | 기능 |
---|---|
버퍼에 있는 내용을 명령 줄에 덧붙인다. |
.vimrc(config)
Vim은 환경설정을 위해서 .vimrc파일을 사용하도록 하고 있다. .vimrc 파일에는 vim에대한 모든 설정은 물론 파일의 type에 따라서 다른 환경 설정을 하도록 셋팅할수도 있다. 환경설정을 파일로 하는 것은 Linux/Unix 환경에서는 매우 일반적인 방식이다.
Plugin
Vim에는 Plugin을 붙여 Syntax Hilight 기능을 추가하거나 기타 다른 기능을 추가할수 있다. 이런 Plugin들은 해가 갈수록 점점더 그 갯수가 늘고 있는데 이를 관리하기 위해서 Plugin Manager를 사용한다. Vim Plugin manager는 vundle이 유명하다. 어떤 plugin이 있는지 궁금하다면 Vim awesome에서 검색하면 된다.
유명한 plugin
Tip
- 붙여넣기할때 자동 들여쓰기나 기타 Syntax보조 때문에 짜증난다면
:set paste
를 써보자. 붙여넣기 모드로 바뀌어 쉽게 붙여 넣을수 있다. 해제할떄는:set nopaste
- Close other tab :
:tabonly
- 대량의 복사 붙여넣기를 할떄 줄수를 세야 하는 경우가 꽤 있다. vim 7.3 부터는 상대적인 줄번호를 보여주는 기능이 있다. relativenumber 가 그것이다. #
- 옵션을 :set inv[options] 을 하면 토글이 된다. 단축키 등록할때 유용하게 쓸수 있다.
- white space들을 잘 구별하고 싶다면
:set list
하면 된다- 해당 상황에서 어떤 글자들을 대체할지 지정하려면 https://stackoverflow.com/questions/1675688/make-vim-show-all-white-spaces-as-a-character 을 참조하면 된다.
See Also
- http://wiki.zeropage.org/wiki.php/ViImproved
- https://wiki.kldp.org/wiki.php/VimEditor
- https://nolboo.kim/blog/2017/02/10/practical-vim/
- vim 사용자를 위한 플러그인 매니저 vundle
- Vi/Vim 단축키 모음
- http://vimawesome.com/
- https://github.com/mhinz/vim-galore
- scrap box
- 키보드에서 손을 땔 일이 없어지므로 오른손이 머나먼(?) 마우스까지 갔다 올 필요가 없다. 따라서 익숙해지면 매우 빠른 속도로 문서 편집이 가능하다.
- 경우에 따라서는 3가지로 나누거나 4가지로 나누기도 한다.
- 리눅스에서는 배포판에서 제공하거나 직접 설정할수 있고 윈도우는 레지스트리편집으로 가능하다고 한다.
- 이 버퍼는 매크로에서도 사용된다.