Buffer 를 어떤 Unix 도구든 통과시켜
Vim 이 셸과 깊이 통합돼 있어서 많은 텍스트 처리 작업에 plugin 필요 없어 — buffer 를 sort, jq, awk, python, 뭐든지 통과시키고 출력을 다시 읽어와. Vim 이 이미 아는 모든 Unix 도구의 frontend 가 돼.
셸 통합의 세 가지 맛
:!cmd— 셸 명령 실행, 출력 표시 (buffer 수정 안 함).:r !cmd— 셸 명령 실행, 출력을 커서 아래 insert.:%!cmd— buffer 전체를 명령에 통과시키고 출력으로 대체.:'<,'>!cmd가 visual 선택에 같은 일.
킬러 one-liner
:%!sort 가 파일 정렬. :%!sort -u 가 정렬 + 중복 제거. :%!python -m json.tool 이 JSON 포맷. :%!jq . 가 JSON 다시 포맷 + 검증. :%!sed 's/foo/bar/g' 가 sed 파워 유저용. :'<,'>!sort 가 visual 선택만 정렬.
:% 토큰
:%!cmd, :%s/..., :%y 의 % 는 항상 전체 파일. 다른 range 토큰: . = 현재 라인, $ = 마지막 라인, 'a,'b = mark a 부터 mark b, '<,'> = visual 선택.
Global 명령
:g 가 Vim 에서 가장 강력하고 underused 명령 중 하나. 패턴 매치되는 모든 라인에 명령 실행. 안티 형 :v (또는 :g!) 는 매치 안 되는 라인에 실행. :normal 과 합치면 필터된 라인 부분집합에 Normal-mode 액션 적용 가능.
:g 가 find-and-do 명령. :%s 는 find-and-replace. :g 는 find-and-do-anything. :g/pattern/cmd 박히면 팀의 나머지가 수동 grep-and-edit 하는 refactor 기회들이 보여.고급 substitution 레시피
Capture group 으로 substitution 이 프로그래머블해져. \v (very-magic) 와 합치면 syntax 가 마침내 읽을 만해져. 흔한 레시피:
- 두 단어 swap:
:%s/\v(\w+) (\w+)/\2 \1/g. - 매 단어 첫 글자 대문자:
:%s/\v(\w+)/\u\1/g. - 매치 전체 대문자:
:%s/.*/\U&/. - 매치 wrap:
:%s/\v(\d+)/[\1]/g.