왜 전역 Undo가 형편없을까: VS Code용 라인 수준 Undo/Redo 구축

발행: (2026년 1월 12일 오전 11:09 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

위에 제공된 텍스트가 없습니다. 번역하려는 본문을 알려주시면 한국어로 번역해 드리겠습니다.

문제: 전역 실행 취소가 개발자를 좌절시키는 이유 😤

VS Code를 충분히 오래 사용해 왔다면, 아마도 다음과 같은 상황을 겪어봤을 겁니다:

  1. 파일의 서로 다른 두 부분을 편집하고 있다.
  2. 한 줄에서 오타를 발견한다.
  3. Ctrl + Z를 누른다.

갑자기 전혀 관련 없는 무언가가 사라진다.

기술적으로는 깨진 것이 없지만, 흐름이 끊긴다. 🫠

Global undo시간 기반이다. 어떤 것을 되돌리려는지와 관계없이 편집기를 과거의 특정 시점으로 되돌린다.

하지만 개발자는 시간을 기준으로 생각하지 않는다. 우리는 의도를 기준으로 생각한다:

  • “이 줄을 되돌려”
  • “그 오타를 수정해”
  • “이 줄이 원래 어떤 모습이었는지 복원해”

반면, Global undo는 다른 질문에 답한다:

“마지막 편집 작업은 무엇이었나요?”

이 불일치가 바로 Ghost Line 가 존재하는 전부 이유이다.

Source:

Ghost Line 사용하기 👻 (시작하기)

Ghost Line은 기본 undo를 대체하지 않으며 – 동시에 작동하면서 방해하지 않습니다. 핵심 아이디어는 간단합니다: 현재 줄만 undo 또는 redo하고, 다른 것은 건드리지 않습니다.

키보드 단축키 ⌨️

Ghost Line은 근육 기억에 친화적으로 설계되었습니다.

동작단축키
줄 UndoCtrl + Alt + Z
줄 RedoCtrl + Alt + Y
줄 Undo 기록 목록Ctrl + Shift + Alt + Z
줄 Redo 기록 목록Ctrl + Shift + Alt + Y

📸 스크린샷 – VS Code 키보드 단축키

줄 undo, redo, list undo, list redo 바인딩 보기

줄‑단위 Undo / Redo 실전 🎥

아래 클립에서는 현재 줄에만 변경 사항을 undo 및 redo하고 파일의 다른 부분은 전혀 영향을 받지 않게 합니다. 그런 다음 줄‑단위 히스토리 피커를 열어 해당 줄의 이전 버전을 미리 보고 복원합니다 – 전역 undo도 없고 부수적인 손상도 없습니다. 👻

📽 데모 – 줄‑단위 Undo / Redo + 히스토리 피커

Ghost Line 데모

실제로 중요한 설정 ⚙️

Ghost Line은 설정을 최소화하고 목적에 맞게 유지합니다.

  • 줄당 최대 히스토리 – 줄마다 저장되는 스냅샷 수를 제한합니다.
  • 대기 지연 – 스냅샷을 얼마나 적극적으로 캡처할지 제어합니다.
  • 단축키 토글 – 확장 프로그램을 제거하지 않고 Ghost Line 단축키를 비활성화할 수 있습니다.

설정이 과도하지 않습니다. 미세 조정에 집착하지 않습니다.

📸 스크린샷 – VS Code 설정 (Ghost Line 구성)

ghostLine.maxHistoryPerLine, idleDelay, and enableShortcuts

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이 존재합니다 👻.

읽어 주셔서 감사합니다!

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!
Back to Blog

관련 글

더 보기 »