snippet은 게으른 자질을 건설적으로 쓰고 싶은 프로그래머에게 좋은 꿀팁이다! 이걸 쓰면 이전으로는 돌아갈 수 없다..
내 경우엔 42seoul 프로젝트들을 하면서 노가다성 짙은 포맷팅-조건부 전처리문 삽입, class 문 선언 등등-을 반복하는게 귀찮아져버렸고, 이를 VSCode snippet을 활용하여 어느 정도 개선했다.
스니펫(Snippet)은 재사용 가능한 소스 코드, 기계어, 텍스트의 작은 부분을 일컫는 프로그래밍 용어이다. 사용자가 루틴 편집 조작 중 반복 타이핑을 회피할 수 있게 도와준다. - 위키백과
스니펫은 작은 조각을 뜻한다. 요즘 활용되는 왠만한 코드편집기, IDE 등은 code snippet
단위로 '템플릿'을 만들어 써먹을 수 있게 되어있다. 지정한 접두어를 입력하면 템플릿이 입력되는 식이다.
주로 썼던 vim에도 기능을 제공하는 plugin-ultisnips, vim-snippets 등-이 있지만, VSCode로 갈아탔으므로(ㅎㅎ) VSCode에서 snippet을 쓰는 방법을 알아봤다.
사실 거창하게 말했지만 이렇게 포스팅하는게 민망할 정도로 심플하다ㅎㅎ
나같은 경우 아래 과정을 거쳤다.
File -> Preferences -> User Snippets 클릭
스니펫 범위설정
cpp.json
파일을 선택하여 편집하였다.스니펫 내용설정
이제 스니펫 내용을 cpp.json파일에 적어넣으면 된다.
나의 경우 *.hpp
파일을 만들 때 파일명으로 ifndef~endif 설치, class 선언해주는 것을 간소화하기 위해 아래처럼 작성하였다.
"setHPP": {
"prefix": ">setHPP",
"body": [
"#ifndef ${1:${TM_FILENAME_BASE}}_HPP",
"# define ${1:${TM_FILENAME_BASE}}_HPP",
"",
"class ${1:${TM_FILENAME_BASE}}",
"{",
"private:",
" ${2:/* data */}",
"public:",
" ${1:${TM_FILENAME_BASE}}(${3:/* args*/});",
" ~${1:${TM_FILENAME_BASE}}();",
"};",
"",
"#endif"
],
"description": "이 스니펫은 ifnde~endif를 작성하는 용도입니다."
},
TM_FILENAME_BASE
: 확장자를 떼어낸 파일이름을 가져온다. 42seoul cpp 프로젝트에서는 클래스마다 클래스이름.hpp, 클래스이름.cpp 파일을 하나씩 만들도록 하고 있으므로 엄청 요긴하다.$1{}
$2{}
$3{}
...: 스니펫 body를 불러왔을 때 넘버링한 순서대로 블록지정 되어있어서 편하게 수정가능하도록 하고, tab
으로 이동할 수 있게 한다.위 예에 포함된 내용말고도 유용한 snippet body 문법이나 key binding 방법 등이 많다. 자세한 내용은 Microsoft-Visual Studio Code's snippet 링크에 너무나 자세하게 설명되어있으니 읽고 응용해보자.
"We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris." --Larry Wall, in "Programming Perl"
훌륭한 프로그래머가 되는데 도움되는 세가지 품성이 있는데, 그건 '게으름', '조급함' 그리고 '오만함'이다!" 라는 말이다. 이것만 보면 '와.. 난 타고나 버렸나?!'고 생각할 수 있는데, 세 가지 품성을 건설적인 방향으로 써먹으려는 노력이 필요하다.
가령 생각이 필요없는 동일한 노동, 단순작업을 반복해서 하는 걸 귀찮아하기까지만 하면 걍 게으른 것이다. 이 귀찮은걸 없애버리기 위해 방법을 고안해내면 건설적 방향으로 게으른 것이다. 더 격하게 게으르기 위해 필요한 노력을 해야한다!
그런 의미에서 vim이 익숙하고 재밌어서 만족하며 쭉- 썼는데, 게을러지려는 노력이 부족했던 것 같다.
더 격하게 게을러지기 위해 VSCode로 갈아타고, 스니펫을 학습한 덕에 앞으로 단순작업은 만족스레 최적화할 수 있을 것 같다. 다음에는 테스트 자동화, 배포 자동화를 좀 공부해보고 싶다.
아, 그리고 요 Microsoft-Visual Studio Code's snippet 링크에도 나와있지만, 스니펫은 이미 'extension'으로 등록되어있거나 'extension'에 포함되어있는 경우가 많다. 특수한 스니펫은 직접 만들어 쓰더라도, 누군가 미리 만들어둔 고퀄 스니펫들을 적극 활용하는 것으로 충분하니 잘 찾아서 써보는 것을 추천한다 :)