Devin.KR

vim 텍스트 오브젝트 — ciw · ci" · di( 가 바꾸는 것

커서를 정확한 자리에 두지 않아도 편집할 수 있게 해 주는 텍스트 오브젝트를 정리했습니다. 실무에서 가장 많이 쓰는 vim 기능입니다.

연습기에서 바로 쳐 보기 치트시트

커서를 정확히 옮기는 시간을 없앤다

초보자의 vim 편집은 대개 이렇습니다. 낱말 앞까지 커서를 옮기고(b 또는 h 여러 번), 그다음 cw 를 칩니다. 커서를 옮기는 데 드는 시간이 편집보다 깁니다.

텍스트 오브젝트는 그 단계를 없앱니다. ciw 는 '커서가 놓인 낱말'을 바꿉니다. 낱말의 어느 글자에 서 있어도 결과가 같습니다.

i 와 a

오브젝트는 두 글자로 씁니다. 앞 글자는 범위, 뒤 글자는 대상입니다.

i 는 inner — 안쪽만. a 는 around — 감싼 것까지. 예를 들어 "hello" 에서 ci" 는 hello 만 바꾸고, ca" 는 따옴표를 포함해 지웁니다.

오브젝트대상보기
iw / aw 낱말 ciw 변수명 바꾸기, daw 낱말과 공백 지우기
i" / a" 따옴표 안 ci" 문자열 내용 바꾸기
i( / a( (ib/ab) 소괄호 안 di( 함수 인자 비우기
i{ / a{ (iB/aB) 중괄호 안 ci{ 블록 내용 바꾸기
i[ / a[ 대괄호 안 di[ 배열 비우기
it / at HTML 태그 안 cit 태그 내용 바꾸기 (연습기 미지원)
ip / ap 문단 dap 문단 지우기 (연습기 미지원)

실무에서 쓰는 다섯 가지

diw 와 daw 의 차이는 공백입니다. one two three 에서 두 번째 낱말에 서서 diw 를 하면 one three (공백 둘)가 되고, daw 를 하면 one three 가 됩니다. 문장을 고칠 때는 daw, 자리를 남겨 두고 다시 칠 때는 ciw 입니다.

  • ciw 변수·함수 이름 바꾸기 — 가장 많이 쓴다
  • ci" 문자열 내용만 갈아 끼우기
  • di( 함수 호출의 인자를 전부 비우기
  • ci{ 블록 안을 다시 쓰기
  • daw 낱말과 공백을 함께 지워 문장을 자연스럽게 유지

왜 이것이 '되풀이'와 잘 맞는가

ciw 로 만든 변경은 커서 위치에 의존하지 않습니다. 그래서 다음 대상으로 옮겨 . 을 누르면 같은 편집이 그대로 적용됩니다. * 로 같은 이름을 찾아가며 . 을 누르면 간단한 이름 바꾸기가 끝납니다.

이 조합(오브젝트 + 되풀이)이 vim 사용자가 '편집 속도'라고 말하는 것의 대부분입니다.

자주 묻는 질문

ciw 와 cw 는 어떻게 다릅니까?

cw 는 커서 위치부터 낱말 끝까지 바꿉니다. 낱말 가운데에 서 있으면 앞부분이 남습니다. ciw 는 낱말 전체를 바꿉니다.

괄호 안에 커서를 두어야 하나요?

괄호 안이면 어디든 됩니다. 괄호 위에 서 있어도 동작합니다. 중첩된 괄호에서는 커서를 감싸는 가장 가까운 짝이 대상입니다.