왜 전역 Undo가 형편없을까: VS Code용 라인 수준 Undo/Redo 구축
Source: Dev.to
위에 제공된 텍스트가 없습니다. 번역하려는 본문을 알려주시면 한국어로 번역해 드리겠습니다.
문제: 전역 실행 취소가 개발자를 좌절시키는 이유 😤
VS Code를 충분히 오래 사용해 왔다면, 아마도 다음과 같은 상황을 겪어봤을 겁니다:
- 파일의 서로 다른 두 부분을 편집하고 있다.
- 한 줄에서 오타를 발견한다.
- Ctrl + Z를 누른다.
갑자기 전혀 관련 없는 무언가가 사라진다.
기술적으로는 깨진 것이 없지만, 흐름이 끊긴다. 🫠
Global undo는 시간 기반이다. 어떤 것을 되돌리려는지와 관계없이 편집기를 과거의 특정 시점으로 되돌린다.
하지만 개발자는 시간을 기준으로 생각하지 않는다. 우리는 의도를 기준으로 생각한다:
- “이 줄을 되돌려”
- “그 오타를 수정해”
- “이 줄이 원래 어떤 모습이었는지 복원해”
반면, Global undo는 다른 질문에 답한다:
“마지막 편집 작업은 무엇이었나요?”
이 불일치가 바로 Ghost Line 가 존재하는 전부 이유이다.
Source: …
Ghost Line 사용하기 👻 (시작하기)
Ghost Line은 기본 undo를 대체하지 않으며 – 동시에 작동하면서 방해하지 않습니다. 핵심 아이디어는 간단합니다: 현재 줄만 undo 또는 redo하고, 다른 것은 건드리지 않습니다.
키보드 단축키 ⌨️
Ghost Line은 근육 기억에 친화적으로 설계되었습니다.
| 동작 | 단축키 |
|---|---|
| 줄 Undo | Ctrl + Alt + Z |
| 줄 Redo | Ctrl + Alt + Y |
| 줄 Undo 기록 목록 | Ctrl + Shift + Alt + Z |
| 줄 Redo 기록 목록 | Ctrl + Shift + Alt + Y |
📸 스크린샷 – VS Code 키보드 단축키
줄‑단위 Undo / Redo 실전 🎥
아래 클립에서는 현재 줄에만 변경 사항을 undo 및 redo하고 파일의 다른 부분은 전혀 영향을 받지 않게 합니다. 그런 다음 줄‑단위 히스토리 피커를 열어 해당 줄의 이전 버전을 미리 보고 복원합니다 – 전역 undo도 없고 부수적인 손상도 없습니다. 👻
📽 데모 – 줄‑단위 Undo / Redo + 히스토리 피커
실제로 중요한 설정 ⚙️
Ghost Line은 설정을 최소화하고 목적에 맞게 유지합니다.
- 줄당 최대 히스토리 – 줄마다 저장되는 스냅샷 수를 제한합니다.
- 대기 지연 – 스냅샷을 얼마나 적극적으로 캡처할지 제어합니다.
- 단축키 토글 – 확장 프로그램을 제거하지 않고 Ghost Line 단축키를 비활성화할 수 있습니다.
설정이 과도하지 않습니다. 미세 조정에 집착하지 않습니다.
📸 스크린샷 – VS Code 설정 (Ghost Line 구성)

Ghost Line 작동 방식 (고수준) 🧠
- 각 라인은 자체 undo/redo 히스토리를 유지합니다.
- 히스토리는 스냅샷 기반이며, diff 기반이 아닙니다.
- 라인 undo는 VS Code 기본 undo와 안전하게 함께 작동합니다.
내부 구조는 별도의 심층 분석이 필요하지만, 이 글은 빠르게 가치를 얻는 데 초점을 맞춥니다.
엣지 케이스, 제한 사항 및 다음 단계 🧩
처리된 엣지 케이스
몇몇 문제는 피할 수 없지만 관리할 수 있습니다:
- 삽입 또는 삭제로 인한 라인 번호 이동.
- 새로운 편집 후 redo 무효화.
- 히스토리가 없을 때 안전한 no‑op.
- 기본 VS Code undo와 전혀 간섭하지 않음.
Ghost Line은 파일 구조가 변경되더라도 히스토리를 일관되게 유지하도록 관리합니다 🔄.
현재 제한 사항 ⚠️
Ghost Line은 정밀하지만 마법은 아닙니다. 현재는:
- 블록 또는 범위 기반 undo 지원 안 함.
- 다중 라인 편집이 일등급 기능이 아님.
- 히스토리는 세션 범위이며 (재로드 간에 지속되지 않음).
이는 의도된 범위 제어이며, 야망이 부족해서가 아닙니다.
다음에 올 내용 🚧
예정된 개선 사항:
- undo/redo 상태에 대한 호버 미리보기.
- 다중 라인 인식 개선.
시간표는 없습니다. 약속도 없습니다. 단지 방향만 제시합니다 🧭.
결론: 실행 취소는 의도를 존중해야 합니다 🎯
전역 실행 취소는 단순성을 최적화합니다. 개발자는 흐름을 최적화합니다.
Ghost Line 은 의도‑인식 편집에 대한 실험입니다 — 마지막에 일어난 일을 되돌리는 것이 아니라, 당신이 되돌리길 원했던 일을 되돌립니다.
이러한 종류의 기능은 아이디어를 테스트하고, 깨고, 다듬을 수 있는 확장 프로그램에서 먼저 제공되어야 합니다. 전역 실행 취소가 더 똑똑해진다면 좋겠지만, 그때까지는 정밀함이 중요한 순간에 Ghost Line이 존재합니다 👻.
Thanks & Links 🙌
읽어 주셔서 감사합니다!
Ghost Line은 일상의 작은 불편을 해결하려는 작은 실험으로 시작했으며, 점차 undo 를 덜 파괴적으로 느끼게 만들기 위한 집중적인 시도로 발전했습니다.
이 내용이 여러분에게 공감된다면 — 혹은 Ctrl + Z 가 여러분을 배신한 적이 있다면 — 여러분의 피드백을 기다립니다.
- Issues / Feature Requests – 버그, 엣지 케이스, 아이디어는 언제든 환영합니다.
- Contributions – 특히 정확성, UX, 엣지 케이스와 관련된 PR을 환영합니다.
- Discussion – 아래 댓글에서 자유롭게 대화를 시작해 주세요 😄
GitHub Repository: (replace with the actual repo URL)
[vaayam-L/ghost-line](https://github.com/Namasivaayam-L/ghost-line)
**VS Code Extension**:
[**Ghost Line**](https://marketplace.visualstudio.com/items?itemName=namachu.ghost-line)
It’s an open‑source project, built in public.
If it saves you even one unnecessary undo — mission accomplished 👻✨
---
**P.S. A quick request! 📝**
This is actually my **first**‑ever technical blog post. I tried to keep it concise and respectful of your time, but I’m still learning.
I would genuinely appreciate feedback on the structure and writing style—let me know in the comments if the flow worked for you or if I should change things up for the next one! 
