Vim - key mapping
.vimrc
.vimrc 파일은 홈디렉토리 밑에 있다. *nix 시스템 기준
vi ~/.vimrc //만약에 없다면 만들고 설정하면 된다.
오늘은 mapping 에 대해서 간단히 정리해 본다. vim의 매력은 키보드로 모든 것을 컨트롤 한다는 것인데, 그러한 장점을 살려주는 것이 키매핑이 아닐까? 설정파일만 보면 어떤 역할일지 감이 오지만, 어설프게 알면 아는것만 못하다고 했다. 이번기회에 매핑에 대해서 정리해 본다.
map vs noremap
map,noremap 둘다 특정키를 매핑하는 역할을 한다. 간단히 얘기하면 recursive vs non-recursive 이다. 에를 들어서
:map j gg
:map Q j
를 하면 j를 누르면 gg를 누른 것과 동일한 효과를 얻게 된다. 그렇다면 만약에 대문자 Q를 누른다면? j로 매핑한다음에 다시 j가 gg를 가리키므로 결과적으로 Q는 gg를 수행하게 된다. . 그래서 map을 ‘recursive’하다라고 얘기한다. 매핑되는 키의 또다른 매핑되는 키를 찾아가게 된다.
Q -> j -> gg 이렇게 됩니다.
:map j gg
:map Q j
:map gg Q
궁금해서 이렇게 무한 재귀 돌리면 어떻게 되나 봤는데 , 오류납니다.
Q->j->gg->Q 이런식으로 흘러가는데, 처음 누른키와 중간의 맵핑되는 키가 같게되면 예외가 발생시키게 한거 같아요.
하지만 noremap 은 다릅니다. noremap은 non-recursive map 이라고 생각하시면 됩니다.
:map j gg
:noremap Q j
Q를 눌르면 j를 누르는 것과 동일한 효과 입니다. 예문은 스택오버플로우 에서 발췌 했습니다. 설정파일 보면 대략 어떻게 작동될거라 예상은 되었지만, 이런 미세한 차이가 있는건 설정파일 정리하면서 알게됬습니다.
<leader >
<leader > 는 기본적으로 ‘\’를 가리키게 됩니다. 예를 들어서
:map <leader>A g
이러면 ‘\A’를 누르면 g를 가리키게 됩니다.
:let mapleader=","
:map <leader>A g
그런데 leader매핑되는 키를 바꿀수가 있는데요 위에 처럼 작성하면 <leader>는 ‘,’ 가 되고 ‘,A’를 누르면 g를 가리키게 됩니다. 공유되는 .vimrc 파일보면 자주 볼수 있는 부분이 mapleader=”,” 입니다. 아무래도 ’'같은 경우엔 손을 더 많이 움직여야해서 ‘,’로 대체하는거 같은데 그렇게 설정하니까 편하네요.
키맵핑에 관한 자세한 팁들은 vim.wikia.com/wiki 여기서 더 많이 볼 수 있습니다.
명령어 | 설명 |
---|---|
nmap | display normal mode maps |
imap | display insert mode maps |
vmap | display visual and select mode maps |
smap | display select mode maps |
xmap | display visual mode maps |
cmap | display command-line mode maps |
omap | display operator pending mode maps |
거기서 퍼왔는데 위의 명령어를 보시면 대략 감이 오실 겁니다. 그러면 이제 vimrc를 보는데 훨씬 수월하게 읽히실 겁니다.
또한,vim은 일관성있는 명령체계 덕분에 몇개 명령어만 알면 명령어를 유추해볼수 있는데요.
:nnoremap g gg
이렇게 매핑한다면 normal mode일때 g를 누르면 gg로 non-recursive 매핑을 하게됩니다.
마지막으로 vim에서 keymapping 시에 enter,esc,F1 등의 키를 매핑을 할 수도 있다.
vim mapping key | 대응되는 key |
---|---|
<A> | Alt |
<S> | Shift |
<C> | Ctrl |
<C-A> | Ctrl+a |
<BS> | Backspace |
<Tab> | Tab |
<BS> | Backspace |
<Tab> | Tab |
<CR> | Enter |
<Enter> | Enter |
<Return> | Enter |
<Esc> | Escape |
<Space> | Space |
<Up> | Up arrow |
<Down> | Down arrow |
<Left> | Left arrow |
<Right> | Right arrow |
<F1> - <F12> | Function keys 1 to 12 |
#1, #2..#9,#0 | Function keys F1 to F9, F10 |
<Insert> | Insert |
<Del> | Delete |
<Home> | Home |
<End> | End |
<PageUp> | Page-Up |
<PageDown> | Page-Down |
예를 들어서
:imap ,<Space> <Space><Space><Space><Space>
:nmap ,t :!phpunit tests
이렇게 작성한다면 insert mode일 경우 ,+스페이스바 를 입력하면 공백이 4개가 입력됩니다. 또한 normal mode에서 ,t를 누르면 :!phpunit tests 가 입력이 되서 phpunit이 실행됩니다.
vim의 key조합은 무궁무진 하니 vim을 사용하면서 자신에게 맞는 키조합을 만들어가는 재미도 쏠쏠할거 같네요.
'my_lesson > _Vi' 카테고리의 다른 글
Vim - vi 바꾸기와 패턴 찾아서 바꾸기 (0) | 2017.12.25 |
---|---|
Vim - Cheat Sheet (0) | 2017.11.11 |
Vim - vimrc sample (0) | 2016.12.21 |
Vim - html 특수문자 치환 vi < replace (0) | 2016.12.19 |
Vim - 7 Awesome Emmet HTML Time-Saving Tips (1) | 2016.12.17 |
댓글