Vim 3D

Vim은 25년 된 텍스트 에디터이고, 조상인 vi와 호환성을 남겨두기 위해 (어찌 보면 갸륵하기까지 한) 노력을 하는 에디터라고 생각한다.

파일을 메모리로 불러들여 편집한 후 저장하는 프로세스는 (버퍼라는 용어만 빼면) 최근에 나오는 에디터와 다른 바가 없다. 그러나, vi와 이전 버전과의 호환성을 이유로(?) 수동으로 저장을 하는 것이 기본으로 하고 있다.

메모리에서 편집한 버퍼를 저장하는 명령 중 가장 많이 알려진 “:write”는 “:w”로 줄여 쓸 수 있다.

:w<CR>
"filename.txt" 42L, 1200C written
  • 명령 모드에서 모든 명령은 로 끝낸다.
  • 저장한 결과로 “파일명”과 파일의 크기, 저장함(written)으로 메시지를 보여준다.

그러나, 저장할 때마다 세 번의 키 입력을 한다는 것은 아무래도 불편하다. 그래서 많은 사용자가 키매핑을 ~/.vimrc 파일에 추가한다.

nmap <C-S> :w<CR>
imap <C-S> <ESC>:w<CR>a

<CTRL-S> 키를 “:w”로 매핑하고, 입력 모드에서는 일반 모드로 나온 후(“) “:w”로 저장한 후 다시 “a” 명령으로 커서 위치로 돌아오게 된다.

입력 모드에서 일반 모드 명령을 하나 실행할 수 있는 <CTRL-O> 명령을 이용하면 Vim이 알아서 커서 위치를 지켜준다.

imap <C-S> <C-O>:w<CR>

그러나, 이 방법은 <CTRL-S>가 제대로 매핑되지 않는 시스템이 있다. <CTRL-S>가 아닌 다른 키나 기능키를 매핑할 수도 있지만, 입력 모드에서 기능키가 그냥 텍스트로 입력되는 시스템도 있다.

그래서인지 일반 모드에서 리더키를 이용하는 방법도 많이 사용하고 있다.

nnoremap <Leader>w :w<CR>

“:w” 명령과도 비슷하고 기억하기도 쉬워서 많은 사용자가 애용하는 방법이다.

그러나, 최근 텍스트 에디터는 대부분 텍스트가 입력되지 않는 시간을 이용한 자동 저장 기능을 기본으로 제공하니 아직도 만족스럽지 않다. 그래서 방법을 찾던 중 발견한 것이 AutoSave 플러그인이다.

AutoSave 플러그인인 일반 모드에서 변경하거나 입력 모드에서 벗어날 때마다 “:w” 명령을 실행하여 파일을 저장한다.

Vim 플러그인 관리자를 사용하고 있다면 vimrc 파일에서 쉽게 추가할 수 있다. vim-plug를 사용하면:

Plug '907th/vim-auto-save'
let g:auto_save = 1
let g:auto_save_silent = 1

“let g:auto_save = 1”은 Vim이 시작할 때 자동 저장을 기본으로 한다. “let g:auto_save_silent = 1”은 저장할 때 나오는 메시지를 보여주지 않는다.

2분간 텍스트를 입력하지 않으면 자동 저장하는 다른 텍스트 에디터와는 약간 다르지만, Vim에서의 변경은 언제든지 반복할 수 있어야 하고, 실행 취소의 단위도 되기 때문에 이 방법이 합리적이라고 생각된다.

몇 개월간 사용해 보니 안정적이고, 다른 방법보다 편리하다. 다만 지금처럼 블로그 글을 쓸 때 지킬을 로컬로 실행하고 있으면 저장될 때마다 제너레이트하기 때문에 미리보기 지연이 많다. 이럴 때는 AutoSave에서 제공하는 “AutoSaveToggle” 명령으로 자동 저장을 끌 수 있다.

:AutoSaveToggle<CR>

같은 명령으로 다시 켤 수 있다. 토글 명령이다.

즐빔!