동작하는 코드
Vim에서 이 코드를 열어 보세요.
const firstName = "Alice";
const lastName = "Kim";
const fullName = firstName + " " + lastName;
- 첫 번째 줄에서
yy로 줄을 복사하세요. - 두 번째 줄에서
dd로 줄을 삭제하세요. p를 누르면 — 방금yy로 복사한 게 아니라,dd로 삭제한 줄이 붙여넣어져요.
왜 그럴까요? dd로 삭제한 텍스트가 기본 레지스터를 덮어썼기 때문이에요. Vim에서는 삭제도 레지스터에 저장돼요. 이 문제를 해결하려면 레지스터를 이해해야 해요.
직접 수정하기
같은 코드에서 이번엔 이름 붙인 레지스터를 사용해 봅시다.
const firstName = "Alice";
const lastName = "Kim";
const fullName = firstName + " " + lastName;
- 첫 번째 줄에서
"ayy—a레지스터에 줄을 복사해요. - 두 번째 줄에서
dd— 줄 삭제 (기본 레지스터에 저장됨). "ap—a레지스터에서 붙여넣기. 이번엔 첫 번째 줄이 정확히 붙여넣어져요.
"a는 "a 레지스터를 사용하겠다"는 접두사예요. 서랍에 이름표를 붙이는 것과 같아요.
"왜?"
레지스터는 서랍이다
일반 에디터의 클립보드는 하나뿐이에요. 새로운 내용을 복사하면 이전 내용은 사라지죠. Vim은 **여러 개의 서랍(레지스터)**을 가지고 있어서, 여러 텍스트를 동시에 저장해 둘 수 있어요.
레지스터의 종류
| 레지스터 | 이름 | 설명 |
|---|---|---|
"" | 기본 레지스터 | d, c, y 등의 결과가 저장됨 |
"0 | 복사 레지스터 | y로 복사한 내용만 저장됨 |
"1~"9 | 번호 레지스터 | 삭제된 내용이 순서대로 밀려 들어감 |
"a~"z | 이름 레지스터 | 사용자가 직접 지정해서 사용 |
"+ | 시스템 클립보드 | OS 클립보드와 연동 |
"_ | 블랙홀 레지스터 | 저장 없이 삭제 (진짜 삭제) |
기본 레지스터("")와 복사 레지스터("0)
이 구분이 중요해요.
yy → "" 레지스터와 "0 레지스터 둘 다에 저장
dd → "" 레지스터에 저장 (0은 건드리지 않음)
그래서 yy로 복사한 뒤 dd로 다른 줄을 삭제해도, "0p를 입력하면 원래 복사한 내용을 붙여넣을 수 있어요. "0 레지스터는 순수하게 복사(y)한 내용만 기억하거든요.
이름 붙인 레지스터 사용법
"a부터 "z까지 26개의 이름 붙인 레지스터를 자유롭게 쓸 수 있어요.
"ayy → a 레지스터에 현재 줄 복사
"bdd → b 레지스터에 현재 줄 삭제(저장)
"ap → a 레지스터 내용 붙여넣기
"bp → b 레지스터 내용 붙여넣기
대문자를 사용하면 기존 내용에 추가돼요.
"ayy → a 레지스터에 첫 번째 줄 저장
"Ayy → a 레지스터에 두 번째 줄 추가 (이어 붙이기)
레지스터 내용 확인하기
:registers (줄여서 :reg)를 입력하면 모든 레지스터의 내용을 확인할 수 있어요.
:reg " 모든 레지스터 표시
:reg a " a 레지스터만 표시
:reg ab0 " a, b, 0 레지스터만 표시
시스템 클립보드 연동
Vim과 다른 프로그램 사이에 텍스트를 주고받으려면 "+ 레지스터를 사용하세요.
"+y → 시스템 클립보드로 복사 (Vim → 브라우저)
"+p → 시스템 클립보드에서 붙여넣기 (브라우저 → Vim)
"+yy → 현재 줄을 시스템 클립보드로 복사
브라우저에서 코드를 복사하고 Vim에 붙여넣거나, Vim에서 코드를 복사해서 슬랙에 붙여넣을 때 사용해요.
블랙홀 레지스터("_)
삭제는 하고 싶지만 레지스터를 오염시키고 싶지 않을 때 사용해요.
"_dd → 현재 줄을 진짜 삭제 (어디에도 저장 안 됨)
"_diw → 단어를 진짜 삭제
이전에 y로 복사해 둔 내용을 보존하면서 불필요한 텍스트를 삭제할 때 유용해요.
심화 학습
특수 레지스터들
Vim에는 읽기 전용 특수 레지스터도 있어요.
| 레지스터 | 내용 |
|---|---|
"% | 현재 파일 이름 |
"# | 이전 파일 이름 |
". | 마지막으로 입력한 텍스트 |
": | 마지막으로 실행한 명령어 |
"/ | 마지막으로 검색한 패턴 |
예를 들어 "%p를 입력하면 현재 파일의 이름이 붙여넣어져요.
레지스터를 활용한 코드 재배치
아래 코드의 줄 순서를 레지스터를 사용해서 바꿔 보세요.
third = "C"
first = "A"
second = "B"
목표 순서:
first = "A"
second = "B"
third = "C"
방법:
first줄에서"ayy로 a 레지스터에 복사하세요.second줄에서"byy로 b 레지스터에 복사하세요.third줄에서"cyy로 c 레지스터에 복사하세요.- 세 줄을 모두 삭제하세요 (
3dd). "ap,"bp,"cp로 원하는 순서대로 붙여넣으세요.
도전: "+y로 결과를 시스템 클립보드에 복사한 뒤, 다른 프로그램에 붙여넣어 보세요.
question: "yy로 복사한 뒤 dd로 줄을 삭제했어요. 원래 복사한 내용을 붙여넣으려면?" options:
question: "Vim에서 복사한 텍스트를 브라우저에 붙여넣으려면 어떤 레지스터를 사용해야 하나요?" options:
question: "레지스터를 오염시키지 않고 텍스트를 삭제하려면?" options: