본문 바로가기
C.W.K.
Stream
Lesson 05 of 06 · published

Mark, 매크로, Register

~15 min · vim, marks, macros, registers

Level 0갇힌 자
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

Mark — buffer 안의 북마크

mark는 이름표를 붙여둔 위치야. 나중에 그리로 뛰어 돌아올 수 있어. ma를 누르면 커서 자리에 mark a가 박혀. 'a는 그 줄로 뛰고, ` + a는 열까지 정확히 맞춰서 뛰어. 소문자 mark (az) 는 파일 안에서만 살고, 대문자 mark (AZ) 는 파일을 넘어 살아 — "어디서든 이 파일 이 자리로" 할 때 쓸모 있어.

Vim이 알아서 찍어두는 mark

  • ` + . — 마지막으로 편집한 자리. ("방금 치던 데로 돌려줘"가 되니까 정말 자주 써.)
  • ` + ^ — 마지막으로 Insert mode였던 자리.
  • ` + [ / ` + ] — 마지막 변경이나 복사의 시작과 끝.
  • ` + < / ` + > — 마지막 Visual 선택의 시작과 끝.
  • ` + ' — 마지막으로 뛰기 전의 자리 (``가 토글이야).

매크로 — 녹음하고 재생하기

매크로는 register에 저장한 키 입력 묶음이야. q 다음에 register 글자를 누르면 녹음이 시작되고, 편집을 하고, q를 한 번 더 누르면 멈춰. @a로 재생하고, @@면 마지막 매크로를 다시 돌려. 10@a는 열 번 돌리고.

웬만하면 통하는 매크로 레시피

  1. 커서를 줄 맨 앞에 둬.
  2. qa로 녹음을 시작해.
  3. 한 줄에 필요한 편집을 다 하고, 마지막을 j (또는 검색 후 n) 로 끝내서 커서가 다음 타깃에 떨어지게 해.
  4. q로 녹음을 멈춰.
  5. @a로 한 번 확인하고, 괜찮으면 100@a로 아래를 쓸어버려.
매크로는 dot 명령의 큰 형이야. dot은 변경 하나를 반복해. 매크로는 변경 여러 개에 그 사이 이동까지 통째로 반복하고. dot 공식으로 안 되는 순간 — 여러 단계를 거쳐야 하는 변형이 필요할 때 — 매크로를 녹음해.

Register — Vim의 클립보드는 여러 개야

Vim에는 클립보드가 하나가 아니라 여러 개 있어. register마다 글자 하나로 이름이 붙어 있고. "ay로 복사하면 register a에 들어가고, "ap로 거기서 꺼내 써. 특별한 register도 있어.

  • "" — unnamed register (d/y/c/p가 기본으로 쓰는 자리).
  • "0 — yank register. 마지막으로 복사한 것만 담고 삭제는 안 건드려. 뭘 지운 뒤에도 "0p를 쓰면 복사해둔 게 그대로 나와.
  • "+ — 시스템 클립보드 (Cmd+C / Ctrl+C 영역).
  • "* — X11 selection 클립보드 (Linux의 가운데 버튼).
  • ". — 마지막으로 입력한 텍스트.
  • ": — 마지막 command-line.
  • "/ — 마지막 검색 패턴.
  • "_ — 블랙홀. 여기 넣은 건 어디에도 안 남아 (복사해둔 걸 지키면서 삭제할 때 써).

Code

Mark·vim
ma         " 커서에 mark 'a' 박음
'a         " mark 'a' 의 줄로 점프
`a         " mark 'a' 의 정확한 위치로 점프 (줄 + 열)
:marks     " 모든 mark 리스트
`.         " 마지막 편집 위치
`^         " 마지막 Insert 위치
`[  `]     " 마지막 변경 / yank 의 시작 / 끝
`<  `>     " 마지막 visual 선택의 시작 / 끝
''         " 마지막 점프 위치
:delmarks a    " mark 'a' 삭제
:delmarks!     " 현재 buffer 의 모든 소문자 mark 삭제
매크로·vim
qa         " register 'a' 로 녹음 시작
...        " 편집 진행
q          " 녹음 멈춤
@a         " 매크로 'a' 한 번 재생
@@         " 마지막 재생된 매크로 재생
5@a        " 5 번 재생
:5,20norm @a   " 5-20 라인에 매크로 'a' 실행
qA         " 기존 매크로 'a' 에 append (대문자 A 주의)
Register·vim
"ay       " register 'a' 로 yank
"ap       " register 'a' 에서 paste
"+y       " 시스템 클립보드로 yank
"+p       " 시스템 클립보드에서 paste
"0p       " 마지막 YANK paste (삭제 무시)
"_dd     " yank register 안 덮으면서 라인 삭제
:reg          " 모든 register 내용 보기
:reg a + 0   " register a, +, 0 만 보기

External links

Exercise

(1) 멀리 떨어진 두 줄에 mark ab를 박고 'a, 'b로 오가봐. (2) 한 줄짜리 foo = 1const foo = 1;로 바꾸고 j로 끝나는 매크로를 녹음해서 10@a로 열 줄에 돌려봐. (3) 단어 하나를 복사해두고 다른 단어를 "_dw로 지운 다음 붙여넣어 — 블랙홀 register를 썼으니 복사본이 살아 있어야 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.