Skip to content

Latest commit

 

History

History
159 lines (129 loc) · 8.64 KB

register.md

File metadata and controls

159 lines (129 loc) · 8.64 KB

레지스터와 매크로


  • 참고 : <C-키>CTRL과 해당 키를 함께 누르는 것을 의미합니다.

REGISTER

  • 일종의 문자열 저장 공간.
  • 50 개가 넘는 레지스터가 용도별로 있으므로 그때그때 필요한 값을 입력해가며 사용하면 됩니다.
  • 레지스터가 있으므로 VIM 외의 클립보드 확장 Application 을 사용하지 않아도 됩니다.

register 보는 방법

  • :reg 또는 :registers 를 입력하면 됩니다.

    :reg 를 실행한 결과 출력된 리스트에서 ^J 는 줄바꿈, ^I 는 탭을 의미합니다.

register 사용 방법

  • NORMAL, VISUAL 모드에서 복사/삭제

    선택액션 복사/삭제액션
    선택액션 " 레지스터기호 복사/삭제액션
    
  • INSERT 모드일 때 붙여넣기, :command line 에 붙여넣기

    <C-r> 레지스터기호
    <C-r><C-r> 레지스터기호
    <C-r><C-o> 레지스터기호
    <C-r><C-p> 레지스터기호
    

register 목록

레지스터 타입 설명
"" 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 같은 역할을 합니다.

register 사용 예제 (기초)

  • 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 레지스터에 입력한다.

register 사용 예제 (응용)

  • 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파일 내용을 붙여넣는다.

register 팁

자주 쓰는 문자열 값이 있다면 .vimrc 에 등록해 두면 편리합니다.
  1. :e ~/.vimrc 를 입력하여 .vimrc 편집을 시작합니다.
  2. 마지막 줄에 let @e='[email protected]'을 입력하고 :wq로 저장/종료합니다.
  3. VIM을 실행할 때마다 "e레지스터에 이메일 주소가 입력되어 있습니다.
  4. "ep로 현재 커서 위치에 이메일 주소를 붙여넣을 수 있습니다.
클립보드 엑세스가 번거로우니 쉬운 키로 맵핑해둡시다.

.vimrc 에 nnoremap <SPACE>y "*ynnoremap <SPACE>p "*p 등으로 설정해 두면 쉽게 클립보드에 엑세스할 수 있습니다.

"을 누르는 게 귀찮다면 <C-r>을 애용합시다.

대신 CAPSLOCKCTRL 키를 바꾸는 것이 좋습니다.

MACRO

  • VIM 에는 사용자의 키 입력을 기록해서 반복해주는 기능인 MACRO 가 있습니다.
  • 매크로는 레지스터에 기록되므로, 복사용으로 입력한 레지스터에 덮어씌우지 않도록 주의합니다.

macro 사용법

설명
q레지스터기호 기록 시작.
q 기록 종료.
@레지스터기호 매크로 호출.
@@ 가장 최근에 호출한 매크로 호출.

macro 사용 예제

  1. qa : "a레지스터에 macro 를 기록하기 시작합니다.
  2. jItest<ESC> : 아래로 한 줄 내려가 제일 앞에 'test' 문자열을 추가하고 NORMAL 모드로 돌아옵니다.
  3. q : 기록을 종료합니다.
  4. 이 상태에서 :reg a 를 입력해보면 "a레지스터에 방금 기록한 내용이 들어있음을 알 수 있습니다.
  5. @a를 입력하면 아래 줄로 내려가 test 를 입력합니다.
  6. 100@a를 입력하면 아래 100 줄에 대해 가장 앞에 test 가 추가됩니다.

macro 팁

오랫동안 사용하고 싶은 매크로가 있다면 .vimrc 에 기록해 둡시다.

  1. qa를 사용해 "a레지스터에 오랫동안 사용하고 싶은 매크로를 기록합니다.
  2. .vimrc 를 열고 다음과 같이 추가합니다.
  3. let @a=' 그리고 <C-r><C-r>a"a레지스터의 값을 문자열로 붙여넣습니다.
  4. 붙여넣은 문자열을 닫는 따옴표인 '를 추가하고 :wq로 저장/종료합니다.
  5. VIM을 실행할 때마다 "a레지스터에 해당 매크로가 등록되어 있습니다.

참고 자료