vim 과 tmux · vim 기초 편집 · 이론
vim 은 명령 목록이 아니라 문법이다
한 줄 요약
vim 의 키는 외워야 할 목록이 아니라 조합해서 쓰는 문법이다. {횟수}{동작}{범위} 라는 공식 하나를 알면 배우지 않은 조합도 만들어 쓸 수 있다.
왜 이게 필요했나
vim 을 "종료하는 법을 모르는 편집기"로 기억하는 사람이 많다. 그런데 SSH 로 들어간 서버, docker 컨테이너 안, 임베디드 장비 - GUI 가 없는 거의 모든 곳에 vi 계열이 이미 깔려 있다. 설정 파일 한 줄을 고치자고 파일을 로컬로 내려받았다 다시 올리는 일이 반복된다면, 그건 도구의 문제가 아니라 문법을 몰라서다.
vim 이 1976년 vi 에서 출발해 지금까지 살아남은 이유는 하나다. 모드를 분리한 덕분에 알파벳 키 하나하나가 명령이 될 수 있었다. 다른 편집기가 Ctrl 조합에 명령을 우겨넣는 동안, vim 은 d, y, c, w, $ 같은 한 글자짜리 어휘를 갖게 됐고, 그 어휘들이 조합되면서 표현력이 곱셈으로 늘었다.
어떻게 동작하나
핵심 공식은 이것 하나다.
{횟수}{operator}{motion 또는 text object}품사로 읽으면 동사 + (전치사) + 명사 구조다.
| 조합 | 읽는 법 | 하는 일 |
| --- | --- | --- |
| 3dd | 3번 · 삭제 · 줄 | 세 줄 삭제 |
| d3w | 삭제 · 3단어 | 단어 세 개 삭제 |
| ci" | 변경 · inner · 따옴표 | 따옴표 안쪽만 갈아 끼우기 |
| da( | 삭제 · around · 괄호 | 괄호까지 통째로 삭제 |
| yi{ | 복사 · inner · 중괄호 | 블록 안 내용 복사 |
여기서 i(inner)와 a(around)가 전치사 역할을 한다. 이 두 글자를 알면 "따옴표 안 문자열만 교체", "함수 인자 전체 삭제", "태그 안 내용 선택" 같은 작업이 두 글자로 끝난다.
중요한 성질 하나 - vim 에서 삭제는 잘라내기다. dd 로 지운 줄은 레지스터에 들어가 있어 p 로 붙여넣을 수 있다. 그래서 ddp(아래 줄과 자리 바꾸기)나 yyp(줄 복제) 같은 관용구가 생긴다.
모드는 네 개만 알면 시작할 수 있다. Normal(기본, 명령), Insert(입력), Visual(선택), Command-line(: 로 시작하는 ex 명령). 방향을 잃으면 언제나 Esc 다. 초심자에게는 이게 생존 법칙 1번이다.
현장에서 만나는 모습
설정 파일에 값 하나 넣기. /etc/nginx/nginx.conf 에서 worker_connections 값을 바꾸는 일. /worker_conn 으로 찾아가 ciw 로 단어만 갈아 끼우고 :wq. 마우스도, 스크롤도 필요 없다.
들여쓰기가 깨진 YAML 정리. gg=G 는 파일 전체를 문법에 맞게 재정렬한다. 한 글자씩 스페이스를 세는 것보다 안전하다.
설정 파일은 vim 이 실제로 읽어야 의미가 있다. .vimrc 에 옵션을 적어 놓고 오타가 나면 그 줄만 조용히 무시된다. set number? 처럼 물음표를 붙여 물어보면 vim 이 지금 적용 중인 값을 알려 준다. 실습의 첫 단계가 이걸 확인하는 이유다.
. 을 잊지 말 것. 마지막 편집을 그대로 반복한다. ciw새단어<Esc> 한 뒤 다음 위치로 가서 . 하나면 같은 편집이 반복된다. 매크로를 쓰기 전에 먼저 시도해 볼 도구다.
다음 실습에서 할 것
.vimrc 를 만들고 vim 이 그 설정을 실제로 적용하는지 확인한 뒤, 줄 삭제·복제·자리바꿈 같은 기본 편집을 결과 파일로 남긴다. 마지막 두 단계에서는 편집 명령 자체를 파일로 저장해 채점기가 원본에 다시 적용해 보게 한다. 결과뿐 아니라 절차까지 재현 가능해야 진짜 익힌 것이다.