본문 바로가기

코딩/Vim

Vim - Mapping (맵핑)

반응형

맵핑이란 원하는 단축키를 지정하고 그 단축키를 누를 시 원하는 명령어를 실행하게 하는 명령어다.

맵핑은 vimrc 파일에 저장해 항상 사용할 수 있도록 권장.

vimrc 파일에 맵핑 입력 시, : 빼고 map [맵핑키] [명령어] 입력해야 됨.

목차

맵핑 만들기

동작
:map [맵핑키] [명령어] 노말, 비주얼, 선택, Operator-pending 모드에서 [맵핑키] 입력 시, [명령어] 실행하기


예시: :map abc dd

결과: 위에서 말한 모드 속에서 abc 입력 시, dd (현재 줄 삭제) 실행

 

 

특정모드에서만 실행되는 맵핑 만들기

동작
:[모드]map [맵핑키] [명령어] [모드]에서 [맵핑키] 입력 시, [명령어] 실행


[모드] (:map-listing에 의하면)
[모드]가 없는 경우 (map) - 노말, 비주얼, 선택, Operator-pending모드
n - 노말모드
i - 삽입모드
v - 비주얼과 선택모드
x - 비주얼모드
s - 선택모드
c - 커맨드라인모드
o - Operator-pending모드
! - 삽입, 커맨드라인모드 (!map이 아닌 map!로 해야 함)
l - 삽입, 커맨드라인, Lang-Arg모드 (iminsert이라는 변수 값을 변경 시, 작동)
:map! [맵핑키] [명령어] 삽입모드와 커맨드라인모드에서 [맵핑키] 입력 시, [명령어] 실행

 

 

비재귀 맵핑 만들기 (non-recursive mapping)

동작
:[모드]noremap [맵핑키] [명령어] [모드]에서 [맵핑키] 입력 시, 비재귀적으로 [명령어] 실행
(실행하려는 명령어가 다른 맵핑키를 반복적으로 실행시키지 않음)

아래와 같이 맵핑 쓰는걸 추천
map   대신 noremap
map!  대신 noremap!
nmap 대신 nnoremap
imap  대신 inoremap
vmap 대신 vnoremap
xmap 대신 xnoremap
smap 대신 snoremap
cmap 대신 cnoremap
omap 대신 onoremap


비재귀 맵핑 미사용 시 문제점
- 비재귀 맵핑 미사용 시, 아래와 같이 입력
:map 11 dd
:map 22 1111

22 누를 시, 맵핑 작동 과정
- 22 입력 > 22 맵핑키가 11 맵핑키 두 번 실행 > 11 맵핑키가 두 번 실행되어 dd 명령어 두 번 실행



- 비재귀 맵핑 사용 시, 아래와 같이 입력
:noremap 11 dd
:noremap 22 1111

22 누를 시, 맵핑 작동 과정
- 22 입력 > 22 맵핑키가 11 맵핑키를 두 번 실행하지 않고 1111라는 명령어를 실행하지, 1111라는 맵핑키를 실행하지 않음)

 

 

함수 실행하는 맵핑 만들기

동작
:map [맵핑키] :call [함수]<CR> [맵핑키] 입력 시, 정의 되어있는 [함수] 실행


예시: :nnoremap abc :call Abc()<CR>
(vimrc 파일에 Abc() 함수가 정의되어 있는 경우)

결과: abc 입력 시, Abc() 실행
:map <silent> [맵핑키] :call [함수]<CR>
[맵핑키] 입력 시, 정의 되어있는 [함수] 실행하나 하단에 [함수] 호출 메세지 띄우지 않기


예시: :nnoremap <silent> abc :call Abc()<CR>
(vimrc 파일에 Abc() 함수가 정의되어 있는 경우)

결과: Abc() 실행하나, 하단에 함수 호출한 흔적인 :call Abc() 보지 않기
:map [맵핑키] :call <SID>[함수]<CR>
스크립트 스코프에 존재하는 [함수] 호출

예시: :inoremap abc :call <SID>Abc()<CR>

 

 

언맵핑 (unmapping, 맵핑 해제)

동작
:[모드]unmap [맵핑키] [맵핑키]의 맵핑 해제하기


예시: :iunmap aaa

결과: 삽입모드에서 aaa라는 맵핑키 맵핑 해제하기

 

 

vimrc 파일 속 맵핑에 주석 넣는 법

동작
[모드]map [맵핑키] [명령어]| “[주석 텍스트] (파이프 문자)문자를 사용하여 [주석 텍스트]가 명령어의 일부분이 아닌 주석으로 처리하기


예시: inoremap a' <Esc><S-a>| "삽입모드에서 커서 현재 줄 마지막으로 이동하기

결과: 삽입모드에서 a’ 입력 시, <Esc><S-a> 실행하되, 삽입모드에서 커서 현재 줄 마지막으로 이동하기는 주석으로 처리

 

 

기타

동작
:let mapleader = ‘[키]’ [키]를 <Leader> 키로 설정하기


예시: :let mapleader = ‘ ‘

결과: <Space>키를  <Leader> 키로 설정하기
:[모드]map [키] <Nop> [모드]에서 [키] 비활성화하기


예시: :map <Up> <Nop>

결과: <Up> 키 비활성화 됨 (눌러도 반응 없음)
반응형