글자와 단어에서 구조로
w나 $ 같은 motion은 방향을 가져. 커서에서 어디론가 가는 거지. text object는 구조를 가져. 무엇에 둘러싸여 있느냐로 정의되는 영역을 가리키거든. "괄호 안", "이 단어 통째로", "HTML 태그 안" 같은 것들이야. 커서가 그 영역 안 어디에 있든 상관없어. 경계는 Vim이 알아서 찾아줘.
접두사 두 개
i= inner — 내용만, 감싸는 문자는 빼고.a= around ("a" thing) — 내용에 감싸는 문자나 옆 공백까지 얹어서.
그래서 i"는 "따옴표 안쪽"이고, a"는 "따옴표까지 포함한 그 덩어리"야.
하루에 백 번 쓰게 될 text object
단어와 WORD: iw / aw (punctuation도 경계), iW / aW (whitespace만 경계).
따옴표: i", a", i', a', i`, a`.
괄호: i( = i) = ib (소괄호 안), i{ = i} = iB (중괄호 안), i[ = i], i< = i>. 전부 괄호까지 포함하는 a 짝이 따로 있어.
HTML / XML 태그: it (태그 안 — <p>와 </p> 사이), at (태그까지 포함).
문장과 단락: is / as, ip / ap.
커서가 어디 있든 상관없어.
ci"는 커서가 문자열 첫 글자에 있든 마지막에 있든 중간 어디에 있든 똑같이 먹혀. Vim이 바깥쪽으로 훑어 나가면서 감싸는 짝을 찾아주거든. text object가 Visual 선택보다 빠른 이유가 이거야. 자리 잡고 고르는 게 아니라, 영역에 이름을 붙여버리는 거니까.머슬 메모리에 박아둘 조합
ci"— 따옴표 안쪽 바꾸기 ("문자열 갈아끼우기").ci(— 괄호 안쪽 바꾸기 ("함수 인자 다시 쓰기").ci{— 중괄호 안쪽 바꾸기 ("이 블록 다시 쓰기").cit— HTML 태그 안쪽 바꾸기.diw— 이 단어 통째로 지우기.daw— 단어에 뒤따르는 공백까지 지우기 (줄이 깔끔해져).dap— 단락 통째로 지우기.vi{— 중괄호 안쪽 Visual 선택 (블록 들여쓰기에 좋아:vi{>).