VS Code 멀티 커서, 상황별로 골라 쓰는 법

2026. 9. 18. 13:00·IT
728x90
반응형

VS Code에서 같은 수정을 여러 줄에 반복하고 있다면 멀티 커서를 덜 쓰고 있는 것이다. 대부분은 Alt+클릭으로 커서를 몇 개 찍는 정도에서 멈춘다. 그런데 실제 작업에서 시간을 아껴주는 것은 그게 아니라, 상황별로 다른 네 가지 방법을 구분해 쓰는 것이다. 이 글은 커서를 여러 개 만드는 방법을 나열하는 대신, 어떤 상황에서 어떤 방법을 골라야 하는지를 다룬다.

먼저 전제 하나. 아래 단축키는 Windows와 Linux 기준이고, macOS는 Ctrl 자리에 Cmd, Alt 자리에 Option을 넣으면 대부분 맞는다. 다른 경우만 따로 적었다.

같은 단어를 골라 고칠 때는 Ctrl+D를 반복해서 누른다

가장 자주 쓰게 되는 것은 Ctrl+D다. VS Code 공식 문서는 이 명령을 "커서 위치의 단어를 선택하거나, 현재 선택된 것의 다음 출현을 선택한다"고 설명한다. 즉 한 번 누르면 단어가 잡히고, 계속 누르면 같은 단어가 하나씩 추가로 잡힌다.

변수 이름을 바꾸는 상황을 생각해 보자.

const userList = fetchUsers();
userList.forEach(u => console.log(u));
return userList.filter(u => u.active);

userList에 커서를 두고 Ctrl+D를 세 번 누르면 세 곳이 모두 선택된다. 이 상태에서 members를 치면 한 번에 바뀐다.

여기서 중요한 것은 건너뛰기다. 열 군데 중 여덟 군데만 바꿔야 하는 경우가 실제로는 더 많다. 그때 Ctrl+K Ctrl+D를 누르면 지금 잡힌 항목을 선택에서 빼고 다음으로 넘어간다. 이걸 모르면 Ctrl+D를 누르다가 원치 않는 곳이 잡히는 순간 전부 취소하고 다시 시작하게 된다.

반대로 파일 전체에서 예외 없이 다 바꿀 거라면 Ctrl+Shift+L이 낫다. 문서 표현으로는 "현재 선택된 텍스트가 나타나는 모든 위치에 선택을 추가한다"이다. 한 번에 끝난다.

다만 Ctrl+D와 Ctrl+Shift+L은 단순 문자열 일치다. user를 선택하면 userList, username, user_id 안의 user도 전부 걸린다. 이게 싫으면 단어 단위로 잡히도록 먼저 더블클릭으로 단어를 선택한 뒤 진행하는 편이 안전하다. 그래도 완전하지 않다. 변수 이름 변경이 목적이라면 사실 F2(이름 바꾸기)가 정답이다. 언어 서버가 문법을 이해하고 바꾸기 때문에 문자열이 우연히 겹친 곳은 건드리지 않는다. 멀티 커서는 문법을 모른다는 점을 항상 염두에 둬야 한다.

줄마다 같은 위치를 고칠 때는 Ctrl+Alt+방향키

여러 줄의 같은 열 위치에 무언가를 넣어야 할 때가 있다. 예를 들어 이런 목록 앞에 전부 -를 붙이는 경우다.

사과
바나나
포도
딸기

첫 줄 맨 앞에 커서를 두고 Ctrl+Alt+Down을 세 번 누르면 아래 세 줄에 커서가 하나씩 생긴다. 문서에서는 "Insert cursors below"로 부른다. 위쪽은 Ctrl+Alt+Up이다. 이 상태에서 -를 치면 네 줄이 동시에 바뀐다.

macOS에서는 Option+Cmd+Down과 Option+Cmd+Up이다.

줄 길이가 제각각일 때는 End 키와 조합하는 것이 요령이다. 커서를 여러 줄에 만든 뒤 End를 누르면 각 커서가 자기 줄의 끝으로 간다. 줄 끝에 세미콜론이나 쉼표를 일괄로 붙일 때 쓴다. 반대로 Home은 각 줄의 시작으로 보낸다.

이 방식이 Ctrl+D보다 나은 경우는 고칠 대상의 텍스트가 서로 다를 때다. 위 예시의 과일 이름은 전부 다르므로 Ctrl+D로는 잡을 수 없다. 위치가 같다는 것만 공통이다.

표처럼 생긴 데이터는 열 선택으로 잘라낸다

로그나 CSV 조각처럼 열이 맞아떨어지는 텍스트에서는 세로로 잘라내는 것이 빠르다. Shift+Alt를 누른 채 마우스를 대각선으로 끌면 사각형 영역이 선택된다. 문서는 이를 컬럼 선택 또는 박스 선택이라 부른다.

마우스 없이 하려면 Shift+Alt+방향키를 쓴다. 명령 이름은 cursorColumnSelectDown 같은 식이고, 페이지 단위로는 Shift+Alt+PageDown도 있다.

아예 모드로 켜둘 수도 있다. 메뉴의 Selection > Column Selection Mode를 켜면, 문서 설명대로 "마우스 제스처와 방향키가 기본적으로 컬럼 선택을 만든다". 큰 표를 한참 손볼 때는 모드를 켜는 편이 낫고, 한 번만 쓸 때는 Shift+Alt 드래그가 낫다. 모드를 켜둔 것을 잊으면 나중에 평범한 드래그가 이상하게 동작해서 당황하게 된다. 상태 표시줄에 켜져 있다는 표시가 뜨니 확인하는 습관을 들이면 좋다.

한 가지 주의. 열 선택은 화면상의 열을 기준으로 한다. 탭과 스페이스가 섞인 파일에서는 눈으로 맞아 보여도 실제로는 어긋난다. 이럴 때는 먼저 들여쓰기를 통일한 뒤에 쓰는 것이 안전하다.

선택 범위를 단계적으로 넓히는 Shift+Alt+오른쪽

멀티 커서는 아니지만 같이 쓰면 효과가 큰 기능이다. Shift+Alt+Right를 누르면 선택 영역이 문법 단위로 한 단계씩 넓어진다. 단어에서 시작해 괄호 안, 함수 전체, 블록 전체로 커진다. Shift+Alt+Left는 반대로 줄인다. macOS는 Ctrl+Shift+Cmd+왼쪽/오른쪽이다.

이게 왜 유용한가. 중첩된 괄호 안의 인자 하나만 정확히 잡아야 할 때, 마우스로 드래그하면 한두 글자씩 어긋난다. 이 단축키는 언어 구조를 알고 있어서 정확히 잡는다.

result = calculate(base_value * (1 + tax_rate), rounding="up")

tax_rate 위에 커서를 두고 Shift+Alt+Right를 누르면 tax_rate → 1 + tax_rate → (1 + tax_rate) → base_value * (1 + tax_rate) 순으로 넓어진다. 원하는 단계에서 멈추고 Ctrl+D로 같은 것을 더 잡거나 바로 고치면 된다.

커서를 여러 개 둔 상태에서 쓸 수 있는 편집 명령들

멀티 커서의 진짜 힘은 커서를 만드는 데 있지 않고, 만든 뒤에 평소 쓰던 편집 명령이 커서마다 독립적으로 동작한다는 데 있다.

줄 단위 명령이 특히 잘 맞는다. Alt+Up과 Alt+Down은 줄을 통째로 위아래로 옮긴다. Shift+Alt+Down은 줄을 아래로 복제한다. Ctrl+Shift+K는 줄을 지운다. 커서가 다섯 개 있으면 다섯 줄이 동시에 움직이고 복제되고 지워진다.

복사와 붙여넣기도 커서 수에 따라 다르게 동작한다. 커서 세 개로 각각 다른 텍스트를 선택해 복사한 뒤, 다른 곳에 커서 세 개를 만들고 붙여넣으면 순서대로 하나씩 들어간다. 한 덩어리로 뭉쳐서 들어가지 않는다. 표의 한 열을 다른 열로 옮길 때 이 동작을 알고 있으면 한 번에 끝난다. 반대로 커서 개수가 맞지 않으면(복사할 때 세 개, 붙여넣을 때 두 개) 전체가 한 덩어리로 들어가니 개수를 맞춰야 한다.

Esc를 누르면 커서가 하나로 돌아온다. 마지막에 만든 커서만 취소하고 싶으면 Ctrl+U를 쓴다. Ctrl+D를 한 번 더 눌러서 원치 않는 곳이 잡혔을 때 유용하다.

실전 예시: 붙여넣은 목록을 코드로 바꾸기

문서에서 복사해 온 이름 목록을 상수 선언으로 바꾸는 상황을 보자. 흔한 작업이다.

created_at
updated_at
deleted_at
published_at

목표는 이 형태다.

const CREATED_AT = "created_at";
const UPDATED_AT = "updated_at";
const DELETED_AT = "deleted_at";
const PUBLISHED_AT = "published_at";

순서대로 이렇게 한다. 첫 줄 맨 앞에 커서를 두고 Ctrl+Alt+Down을 세 번 눌러 네 줄에 커서를 만든다. Shift+End로 각 줄의 끝까지 선택하고 Ctrl+C로 복사한다. Home으로 줄 앞으로 가서 const를 치고, End로 줄 끝에 가서 = "를 친 뒤 Ctrl+V로 붙여넣고 ";를 친다.

여기까지 하면 상수 이름이 아직 소문자다. 이름 부분만 다시 선택해서 명령 팔레트의 Transform to Uppercase를 실행하면 끝난다. 이 명령은 선택된 모든 영역에 각각 적용된다.

한 줄씩 손으로 하면 2분, 익숙해지면 15초다. 네 줄이라 차이가 작아 보이지만 마흔 줄이면 이야기가 달라진다.

멀티 커서가 답이 아닌 경우도 분명히 있다

여기까지 읽으면 멀티 커서로 뭐든 할 수 있을 것 같지만, 나는 반대로 생각한다. 대상이 화면에 다 보이지 않으면 멀티 커서를 쓰지 말아야 한다.

이유는 단순하다. 커서가 서른 개 생겼는데 그중 스물다섯 개가 스크롤 밖에 있으면, 내가 무엇을 바꾸고 있는지 눈으로 확인할 수 없다. 잘못 바꿔도 모른다. Ctrl+Z로 되돌아가긴 하지만, 중간에 다른 편집이 섞이면 복구가 지저분해진다.

화면 밖까지 걸치는 일괄 수정은 두 가지 중 하나를 쓰는 게 낫다. 하나는 정규식 치환(Ctrl+H)이다. 바꾸기 전에 몇 건이 걸리는지 숫자로 보여주고, 하나씩 확인하며 바꿀 수도 있다. 다른 하나는 앞서 말한 F2 이름 바꾸기다. 파일을 넘나드는 심볼 이름 변경은 이쪽이 정확하다.

멀티 커서의 장점은 속도가 아니라 눈으로 확인하면서 고친다는 데 있다. 그 장점이 사라지는 순간 다른 도구로 갈아타야 한다.

정리하면 이렇게 고른다

상황별로 정리하면 판단이 쉬워진다.

상황 방법
같은 단어 몇 군데, 화면 안 Ctrl+D 반복, 건너뛰기 Ctrl+K Ctrl+D
같은 단어 전부, 파일 하나 Ctrl+Shift+L
줄마다 다른 내용, 위치만 같음 Ctrl+Alt+Up/Down + Home/End
표 모양 데이터의 세로 영역 Shift+Alt 드래그 또는 컬럼 선택 모드
괄호 안 인자 정확히 잡기 Shift+Alt+Right로 확장
화면 밖까지, 여러 파일 정규식 치환 또는 F2

마지막으로 설정 하나. Alt+클릭이 손에 안 맞으면 editor.multiCursorModifier를 ctrlCmd로 바꿔서 Ctrl+클릭으로 쓸 수 있다. 메뉴의 Selection > Switch to Ctrl+Click for Multi-Cursor로도 바꾼다. 다른 에디터에서 넘어왔다면 이쪽이 익숙할 것이다.

참고 자료

  • Basic Editing — Visual Studio Code Docs — 멀티 커서, 컬럼 선택, 선택 확장의 공식 단축키와 명령 ID
  • Key Bindings for Visual Studio Code — 단축키 편집기와 keybindings.json으로 직접 바꾸는 방법
728x90
반응형

'IT' 카테고리의 다른 글

WSL 한글 폰트 sudo 없이 설치하고 Pillow로 썸네일 만들기  (0) 2026.09.17
설계 문서를 테스트로 강제하기, spec.yaml과 spec-check  (0) 2026.09.16
AI 에이전트 보안, 권한을 어디까지 줄 것인가  (0) 2026.09.16
Playwright 고정 대기 대신 상태 대기를 써야 하는 이유  (0) 2026.09.15
오픈소스 라이선스 변경, 기업이 자꾸 바꾸는 이유와 개발자의 대응  (1) 2026.09.15
'IT' 카테고리의 다른 글
  • WSL 한글 폰트 sudo 없이 설치하고 Pillow로 썸네일 만들기
  • 설계 문서를 테스트로 강제하기, spec.yaml과 spec-check
  • AI 에이전트 보안, 권한을 어디까지 줄 것인가
  • Playwright 고정 대기 대신 상태 대기를 써야 하는 이유
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (417) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (20) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에디터 팁
    docker
    servlet class
    SSL 인증서
    React Compiler
    AI 코딩 에이전트
    proxy pass
    Extension Bisect
    ssl 인증서 발급
    리눅스 설치
    lang rust
    css block
    css float
    Node
    vscode
    자바 exception
    css table
    자바 객체 지향
    Java Array
    브라우저 자동화
    mysql db
    자바 배열
    spring java
    ubuntu
    css tb
    Rust lang
    rust linux
    nginx ssl 적용
    자바 생성자
    vue 설치
    java casting
    클론코딩
    자바 클래스
    css perspective
    티스토리 자동화
    jsp parameter
    jsp include
    자바 for문
    svelte
    nginx
    nginx ssl 설정
    API 설계
    프런트엔드
    css list
    오류
    VS Code 팁
    러스트
    gitlab 설치
    vue cli
    css transition
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
VS Code 멀티 커서, 상황별로 골라 쓰는 법
상단으로

티스토리툴바