지난 글까지는 처음 들어 있는 예시 스니펫 11개로 연습했다. 이제 내가 실제로 쓰는 명령어를 넣을 차례다. 이번 글에서는 스니펫을 만들고 고치는 관리 창과, 명령어의 바뀌는 부분을 비워 두는 변수를 다룬다.

관리 창 열기

세 가지 방법이 있다.

  • 트레이 아이콘을 더블클릭
  • 트레이 아이콘 오른쪽 클릭 → 스니펫 관리
  • 빠른 검색 팝업에서 Ctrl+E (선택한 스니펫을 바로 편집) 또는 Ctrl+N (새로 만들기)

다크 테마의 스니펫 관리 창: 왼쪽은 검색과 목록, 오른쪽은 편집 폼

왼쪽은 검색과 목록, 오른쪽은 편집이다. 왼쪽 위 검색 칸은 빠른 검색 팝업과 같은 문법(#태그 @언어 "구문")을 쓴다. 목록 아래에는 전체 개수(11 / 11개)와 가져오기·내보내기 버튼이 있다. 오른쪽 맨 아래에는 만든 날, 고친 날, 사용 기록이 보인다.

창의 X를 눌러도 Cliply는 꺼지지 않는다. 창만 숨고 트레이에 그대로 남는다. 완전히 끄려면 트레이 메뉴의 종료를 쓴다.

키 동작
Ctrl+N 새로 만들기
Ctrl+S 저장
Ctrl+P 고정 / 고정 해제
Ctrl+F 검색 칸으로 이동
Del (목록에서) 삭제 (확인 후)
Ctrl+C (목록에서) 본문 복사

스니펫 하나 만들기

Ctrl+N을 누르면 오른쪽이 빈 칸이 된다. 채울 것은 다섯 가지다.

칸 꼭? 쓰는 법
제목 필수 찾을 때 칠 말로. 200자까지
언어 powershell, docker, sql, bash, git 등. @언어 검색에 쓰인다
태그 분류. 여러 개 가능
본문 필수 복사될 내용. 여러 줄도 된다
설명 주의사항, 비슷한 명령어. 검색에도 걸린다

화면의 「도커 컨테이너 셸 접속」이 좋은 예다. 본문은 docker exec -it {{컨테이너}} /bin/bash 한 줄이고, 설명에는 "bash가 없는 이미지는 /bin/sh"라고 적어 두었다. 명령어를 쓰다가 막히는 지점을 설명에 남겨 두면, 다음에 복사할 때 목록 아래 미리보기에서 같이 보인다.

태그 입력

태그 칸에 이름을 치고 Enter나 쉼표(,)를 누르면 칩 하나로 들어간다. 이미 쓰고 있는 태그는 몇 글자만 쳐도 자동완성 목록에 뜬다. 대소문자는 저장할 때 소문자로 맞춰지지만, mysql과 my-sql처럼 철자가 다른 태그를 따로 만드는 일은 자동완성을 보고 막는 수밖에 없다. 빈 칸에서 Backspace를 누르면 마지막 태그가 빠진다.

저장

Ctrl+S 또는 오른쪽 위 저장. 저장하지 않은 상태로 목록에서 다른 스니펫을 누르거나 창을 닫으면 저장할지 먼저 묻는다. 고치던 내용이 말없이 사라지는 일은 없다.

검색하다가 바로 만들기

실제로 가장 많이 스니펫을 만드는 순간은 "찾았는데 없을 때"다.

빠른 검색 팝업에서 iis 로그 폴더를 쳤는데 아무것도 안 나온다. 이때 Ctrl+N을 누르면 관리 창이 열리면서 방금 친 검색어가 제목 칸에 들어간 새 스니펫이 준비된다. 인터넷에서 명령어를 찾아 본문에 붙여 넣고 Ctrl+S. 다음부터는 같은 검색어로 바로 나온다.

이렇게 하면 제목이 저절로 "내가 찾을 때 친 말"이 된다. 지난 글에서 말한 "제목은 찾을 때 칠 말로"를 따로 신경 쓰지 않아도 된다.

변수: 바뀌는 부분은 비워 둔다

명령어를 저장해도 그대로 쓰는 경우는 드물다. 컨테이너 이름, 포트 번호, 데이터베이스 이름이 매번 다르다. 이런 자리는 {{ }}로 비워 둔다.

표기 의미
{{이름}} 변수. 복사할 때 값을 묻는다
{{이름:기본값}} 기본값이 미리 채워진 변수
\{{ 변수가 아니라 {{ 글자 그대로

변수가 하나라도 있는 스니펫을 복사하면 입력 창이 뜬다.

변수 입력 창: 위쪽은 완성될 명령어 미리보기, 아래는 변수별 입력칸

어디에 변수를 넣을까

기준은 하나다. 매번 바뀌는 것은 변수로, 거의 안 바뀌는 것은 기본값으로, 절대 안 바뀌는 것은 그대로.

docker logs -f --tail {{줄수:100}} {{컨테이너}}

컨테이너는 매번 다르니 그냥 변수다. 줄 수는 대부분 100이면 되지만 가끔 1000을 보고 싶으니 기본값을 준다. -f는 늘 쓰니 그대로 둔다.

Get-NetTCPConnection -LocalPort {{포트}} | Select-Object OwningProcess
SELECT table_name, ROUND((data_length + index_length) / 1024 / 1024, 2) AS mb
FROM information_schema.tables
WHERE table_schema = '{{데이터베이스}}'
ORDER BY mb DESC;

여러 줄짜리 SQL에도 변수를 넣을 수 있다. 따옴표 안이어도 상관없다.

같은 이름은 한 번만 묻는다

docker stop {{컨테이너}} && docker rm {{컨테이너}}

{{컨테이너}}가 두 번 나오지만 입력 창에는 칸이 하나만 뜨고, 입력한 값이 두 자리에 모두 들어간다. 이름이 같으면 같은 값이라고 본다.

이름 짓기

변수 이름에는 한글, 영문, 숫자, _, -를 쓸 수 있다. 입력 창의 칸 이름으로 그대로 보이니, 나중에 봐도 무엇을 넣어야 할지 알 수 있게 짓는다. {{c}}보다 {{컨테이너}}가 낫다.

마지막 값을 기억한다

입력한 값은 스니펫별로 기억해 두었다가 다음에 입력 창이 뜰 때 채워 준다. 같은 컨테이너 로그를 하루에 여러 번 본다면 두 번째부터는 Enter만 누르면 된다. 기본값보다 마지막 입력값이 먼저다.

중괄호 자체가 필요할 때

PowerShell의 해시 테이블이나 템플릿 문법처럼 본문에 {{가 그대로 있어야 하는 경우가 있다. 앞에 \를 붙여 \{{로 쓰면 변수로 보지 않고, 복사할 때는 \ 없이 {{만 들어간다. 닫는 }}가 없는 {{는 처음부터 변수로 보지 않고 그대로 둔다.

고정, 삭제, 사용 기록

  • 고정(Ctrl+P): 검색 결과와 빈 검색 목록에서 항상 맨 위에 온다. 하루에 몇 번씩 쓰는 명령어 서너 개만 고정해 두는 것을 권한다. 고정이 많아지면 고정의 의미가 없어진다
  • 삭제(Del): 확인을 한 번 거친다. 지운 스니펫은 목록과 검색에서 사라진다
  • 사용 기록: 복사할 때마다 횟수와 시각이 쌓이고, 검색 순서에 반영된다. 따로 할 일은 없다

처음 들어 있던 예시 스니펫은 쓰지 않을 것이라면 지워도 된다. 지운 예시가 다시 생기지는 않는다.

다음 글에서는 설정(단축키, 자동 실행, 테마, 언어)과 다른 PC로 옮기는 내보내기·가져오기를 정리하며 연재를 마친다.