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

Visual Mode — 선택 후 작용

~11 min · vim, visual-mode, selection

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

복잡한 선택을 위한 안전망

보통은 operator + text object가 Visual mode보다 빨라. 그런데 "이거랑 다음 네 줄, 그리고 끝에 붙은 저 부분"처럼 그때그때 잡아야 하는 선택이 있잖아. 그럴 땐 Visual mode가 발동 직전에 뭘 골랐는지 눈으로 보여주고, operator는 맨 마지막에 누르게 해줘.

Visual의 세 가지 맛

  • v — 글자 단위. 한 글자부터 여러 줄까지.
  • V — 줄 단위. 줄 어디에 있든 통째로.
  • Ctrl-v — 블록 (열 단위). 열 편집의 결정타야.

먼저 고르고, 그다음 동사

Visual mode에 들어가면 모든 motion이 선택 범위를 늘리거나 줄여. 원하는 모양이 나왔을 때 operator를 누르면 돼. d로 지우고, y로 복사하고, c로 바꾸고, >로 들여쓰고, =로 정렬하고. :를 누르면 고른 범위에만 걸리는 Command-line으로 떨어져 ('<,'>가 자동으로 붙어).

블록 선택 — 열 단위 편집

다른 에디터가 좀처럼 따라오지 못하는 동작이야. Ctrl-v를 누르고, 아래로 내려가며 열을 정하고, I로 블록 맨 앞에 끼어들어 텍스트를 친 다음 Esc를 눌러. 그러면 Vim이 그 편집을 블록의 모든 줄에 똑같이 적용해. A (열 뒤에 붙이기), c (열 바꾸기), d (열 지우기) 도 똑같이 동작하고.

블록 insert의 함정: Ctrl-v + I로 친 텍스트는 Esc를 누르기 전까지 첫 줄에만 보여. Vim이 나머지 줄에 복제하는 건 그다음이거든. 정상이니까 놀라서 중간에 그만두지 마.

방금 고른 범위 다시 부르기

gv가 마지막 Visual 선택을 되살려줘. 한 번 작업하고 나서 같은 범위에 다른 operator를 걸고 싶은데 다시 고르기는 귀찮을 때, 이만한 구세주가 없어.

반대쪽 끝으로 넘어가기

Visual mode 안에서 o를 누르면 선택의 반대쪽 끝으로 커서가 건너뛰어. 앞으로 늘리기 시작했는데 뒤로도 늘리고 싶어질 때, 또는 그 반대일 때 써.

Code

Visual 세 맛·vim
v       " 캐릭터 단위 visual
V       " 라인 단위 visual
Ctrl-v  " 블록 visual (컬럼)
gv      " 마지막 visual 다시 선택
o       " Visual 안: 선택의 다른 끝으로 pivot
Visual 선택에 작용·vim
viw d            " inner 단어 선택, 삭제
Vjjj d           " 라인 단위: 4 라인 선택, 삭제
v$ y             " 라인 끝까지 선택, yank
Vi( >            " 괄호 안 라인 단위 선택, indent
vap =            " 단락 선택, auto-format
:'<,'>sort       " 선택한 라인 sort
블록 편집 — 여러 줄에 prefix 추가·vim
" Python 5 줄 주석 처리 (현재 커서부터):
Ctrl-v       " 블록 모드 진입
4j           " 4 줄 더 아래로 확장 (총 5 선택)
I            " 블록 시작에 insert
# <Esc>      " '# ' 입력 후 Esc — Vim 이 모든 줄에 복제

" 열 삭제 — 앞쪽 스페이스 4 칸:
Ctrl-v 3l 4j d   " 4 열 × 5 줄 선택, 블록 삭제

External links

Exercise

Python이나 JavaScript 파일을 열어. Ctrl-v + I로 다섯 줄짜리 블록 앞에 // # 주석을 붙여봐. 그다음 다른 블록에서 Ctrl-v로 앞쪽 공백 네 칸을 블록으로 골라 d로 지워보고. Esc를 누른 순간 접두사가 모든 줄에 한꺼번에 나타나는 걸 눈여겨봐 — 그게 Vim만 하는 동작이야.

Progress

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

댓글 0

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

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