- 참고 :
<C-키>
는CTRL
과 해당 키를 함께 누르는 것을 의미합니다.
- 일종의 문자열 저장 공간.
- 50 개가 넘는 레지스터가 용도별로 있으므로 그때그때 필요한 값을 입력해가며 사용하면 됩니다.
- 레지스터가 있으므로 VIM 외의 클립보드 확장 Application 을 사용하지 않아도 됩니다.
-
:reg
또는:registers
를 입력하면 됩니다.:reg
를 실행한 결과 출력된 리스트에서^J
는 줄바꿈,^I
는 탭을 의미합니다.
-
NORMAL, VISUAL 모드에서 복사/삭제
선택액션 복사/삭제액션 선택액션 " 레지스터기호 복사/삭제액션
-
INSERT 모드일 때 붙여넣기,
:
command line 에 붙여넣기<C-r> 레지스터기호 <C-r><C-r> 레지스터기호 <C-r><C-o> 레지스터기호 <C-r><C-p> 레지스터기호
<C-r>
사용법은 INSERT 모드 입력키 설명 참고.
레지스터 | 타입 | 설명 |
---|---|---|
"" |
unnamed | 마지막으로 삭제했거나 복사한 문자열이 들어간다. |
"0 - "9 |
numbered | "" 레지스터의 히스토리. 숫자가 클 수록 오래된 값들이다. |
"a - "z |
named | 자동 입력이 없고 사용자가 자유롭게 사용할 수 있는 레지스터. |
"A - "Z |
named | 자동 입력이 없고 사용자가 자유롭게 사용할 수 있는 레지스터. |
"- |
small delete | 한 줄 미만의 삭제가 이루어진 경우 "- 레지스터에 입력된다. |
"* , "+ |
selection and drop | gui 클립보드 레지스터. (다른 프로그램의 ⌘C ) |
". |
read-only | 가장 최근에 입력된 문자열이 입력되는 레지스터. |
": |
read-only | 가장 최근에 입력한 command line 명령어가 입력되는 레지스터. |
"% |
read-only | 현재 편집중인 파일의 이름이 입력되어 있는 레지스터. |
"/ |
last search pattern | 가장 최근의 검색어가 입력되는 레지스터. |
"= |
expression register | 가장 최근에 사용한 expression 이 입력되는 레지스터. |
"_ |
black hole | 블랙홀 레지스터! /dev/null 같은 역할을 합니다. |
- NORMAL 모드
키 | 설명 |
---|---|
yy |
현재 라인을 "" 레지스터와 "0 레지스터에 입력한다. 기존 "0 레지스터의 값은 덮어 씌워진다. |
dd |
현재 라인을 삭제하고 "" 레지스터와 "1 레지스터에 입력한다. 기존 "1 레지스터의 값은 "2 로 밀려난다. |
"+yy |
현재 라인을 클립보드("+ 레지스터)에 입력한다. |
"+p |
클립보드("+ 레지스터)의 내용을 붙여넣기한다. |
"2p |
"2 레지스터의 내용을 붙여넣기한다. |
"%p |
"% 레지스터의 내용(현재 편집중인 파일의 이름)을 붙여넣기한다. |
:let @+='test' |
"+ 레지스터에 test 라는 문자열을 입력한다. |
:let @a=@+ |
"a 레지스터에 "+ 레지스터의 값을 입력한다. |
:@: |
가장 최근에 사용한 command line 명령어를 다시 실행한다. |
- INSERT 모드
키 | 설명 |
---|---|
<C-r>+ |
클립보드("+ 레지스터)의 내용을 붙여넣기한다. |
<C-r>2 |
"2 레지스터의 내용을 붙여넣기한다. |
<C-r>% |
"% 레지스터의 내용(현재 편집중인 파일명)을 붙여넣기한다. |
<C-r>=7*8 |
expression 레지스터를 사용해, 56을 입력한다. |
<C-r>=@a |
expression 레지스터를 사용해, "a 레지스터의 값을 입력한다. |
- VISUAL 모드
키 | 설명 |
---|---|
"+y |
선택한 영역을 클립보드("+ 레지스터)에 입력한다. |
"cy |
선택한 영역을 "c 레지스터에 입력한다. |
- NORMAL 모드
키 | 설명 |
---|---|
vi{"7y |
현재 커서가 위치하고 있는 { } 영역 내의 모든 문자열을 7 레지스터에 입력한다. |
ggVG"by |
현재 파일 전체를 b 레지스터에 입력한다. |
%v%y |
현재 커서가 있는 코드를 감싼가장 가까운 괄호 내 모든 문자열을 "" 레지스터에 입력한다. |
:let @+=expand('%:p') |
"+ 레지스터에 현재 파일의 경로를 입력한다. |
:let @a=@b.@c.'123' |
"b, "c 레지스터와 '123' 이란 문자열을 concat 하여 "a 레지스터에 입력한다. |
:let @a=substitute(@a,'d','a','g') |
"a 레지스터의 문자열 중 모든 d 를 a 로 replace 한다. |
- INSERT 모드
키 | 설명 |
---|---|
<C-r>=@a.@b |
"a 와 "b 레지스터의 값을 concat 하여 입력한다. |
<C-r>=@a.'123'.@b |
"a , 문자열 'test', "b 레지스터의 값을 concat 하여 입력한다. |
<C-r>=system('cat filename') |
filename 파일 내용을 붙여넣는다. |
:e ~/.vimrc
를 입력하여 .vimrc 편집을 시작합니다.- 마지막 줄에
let @e='[email protected]'
을 입력하고:wq
로 저장/종료합니다. - VIM을 실행할 때마다
"e
레지스터에 이메일 주소가 입력되어 있습니다. "ep
로 현재 커서 위치에 이메일 주소를 붙여넣을 수 있습니다.
.vimrc 에
nnoremap <SPACE>y "*y
와nnoremap <SPACE>p "*p
등으로 설정해 두면 쉽게 클립보드에 엑세스할 수 있습니다.
대신
CAPSLOCK
과CTRL
키를 바꾸는 것이 좋습니다.
- VIM 에는 사용자의 키 입력을 기록해서 반복해주는 기능인 MACRO 가 있습니다.
- 매크로는 레지스터에 기록되므로, 복사용으로 입력한 레지스터에 덮어씌우지 않도록 주의합니다.
키 | 설명 |
---|---|
q레지스터기호 |
기록 시작. |
q |
기록 종료. |
@레지스터기호 |
매크로 호출. |
@@ |
가장 최근에 호출한 매크로 호출. |
qa
:"a
레지스터에 macro 를 기록하기 시작합니다.jItest<ESC>
: 아래로 한 줄 내려가 제일 앞에 'test' 문자열을 추가하고 NORMAL 모드로 돌아옵니다.q
: 기록을 종료합니다.- 이 상태에서
:reg a
를 입력해보면"a
레지스터에 방금 기록한 내용이 들어있음을 알 수 있습니다. @a
를 입력하면 아래 줄로 내려가 test 를 입력합니다.100@a
를 입력하면 아래 100 줄에 대해 가장 앞에 test 가 추가됩니다.
qa
를 사용해"a
레지스터에 오랫동안 사용하고 싶은 매크로를 기록합니다.- .vimrc 를 열고 다음과 같이 추가합니다.
let @a='
그리고<C-r><C-r>a
로"a
레지스터의 값을 문자열로 붙여넣습니다.- 붙여넣은 문자열을 닫는 따옴표인
'
를 추가하고:wq
로 저장/종료합니다. - VIM을 실행할 때마다
"a
레지스터에 해당 매크로가 등록되어 있습니다.