기계인간 John Grib Profile picture
Apr 8, 2022 24 tweets 5 min read Read on X
앗차. 오늘도
Vㅏ
ㅁ이 되었군요...
오늘은 tags 파일 이야기를 해보죠. 이건 아는 사람은 알고, 모르는 사람은 모르는 물건인데(당연한 이야기를 하고 있다), ctags 라는 프로그램이 만들어 주는 일종의 인덱싱 파일입니다.
man 페이지를 읽어보면 프로그래밍 언어별로 인덱스 파일을 만들어주는 프로그램이라는 것을 알 수 있습니다. IntelliJ 라던가 Eclipse 같은 IDE를 쓰다보면 늘 인덱스를 갱신하고 있죠. 그렇게 갱신한 인덱스는 프로젝트의 각 함수나 클래스, 상수, 변수 같은 것들의 이름과 위치를 저장해 놓고 Image
자동완성이라던가, jump to definition 이라던가, rename 같은 리팩토링 도구라던가 하는 곳에 사용합니다. 그래서 이런 인덱싱 처리는 코딩할 때 꽤나 중요한 지원 기능이고, vim에서는 이 기능이 자동으로 동작하지 않기 때문에 vim에서 간단한 코딩은 해내는 사람도 프로젝트 단위의 개발은
어떻게 해야 할 지 감을 잡지 못하는 사람들도 있습니다. vim에서는 jump to definition도 안 되고, rename 기능도 없고 하니까 익숙한 IDE로 돌아가곤 하는 거죠. 그래서 ctags를 사용(설정)할 줄 아는 건 vim을 IDE 대용으로 사용할 수 있는지 없는지를 가르는 중요한 조건 중의 하나가 됩니다.
한편 vim에는 jump to the definition 기능이 이미 들어있습니다. <c-]> 로 사용할 수 있죠. 제가 ctags 없이 vim을 안 쓴 적이 너무 예전이라 기억이 잘 안 나긴 하는데, 아마 간단한 점프는 될 겁니다. 그리고 이 기능은 ctags로 만든 인덱스 파일인 tags 가 있을 때 더 잘 사용할 수 있습니다. Image
한편 ctags는 평범한 터미널 명령이기도 해서 vim과 무관하게 그냥 실행할 수도 있습니다. 한번 실제로 코딩을 한 다음에 ctags 로 인덱스 파일을 만들어 보죠.

간단한 자바스크립트 파일을 하나 만들었습니다. 상수가 하나 있고, 함수가 두 개 있습니다. 코딩은 vim 코파일럿이 했습니다. Image
이제 터미널로 나가서 ctags *.js 를 입력하면 tags 라는 파일이 생성됩니다. 내용을 볼까요?

제일 마지막 3줄을 보면 함수와 상수 이름들이 있는 것을 알 수 있습니다. Image
이게 있으면 vim이 상수 이름과 상수 이름 등을 구조적으로 파악하게 됩니다. 이걸 이용하는 vim 플러그인들도 많죠. 스샷은 유명한 vim 플러그인인 tagbar를 열어본 것입니다. IDE도 이런 기능들이 하나의 애플리케이션에 통합되어 있다 뿐이지, 동작하는 방식은 크게 다르지 않습니다. Image
그래서 vim으로 이런 저런 작업을 하다 보면 좀 고생스럽긴 하지만 나만의 IDE를 (처절하게) 조립하며 만들어가는 기분이 들기도 합니다. 좀 힘들긴 한데 재밌어요. 뭐하러 그렇게까지 하면서 vim을 쓰냐고 하면 사실 할 말은 없지만.. 오락하는데 이유가 어딨냐는 원사운드 만화 한 컷이 생각나네요. Image
객관적으로 돌이켜보면 동기는 다분히 감정적이었습니다. 그냥 vim이 익숙하고, vim의 사용이 재미있고, vim을 쓸 때마다 느끼는 vim의 철학이 좋아서 그냥 이거로 다 해보겠다 하는 거죠. 옛날 플레이스테이션1,2 시절 메탈기어 솔리드할 때 아무도 안 죽이고 끝판까지 깨기 그런거 다들 해봤잖아요
아무튼 ctags 이야기로 돌아가서, ctags를 쓸 때 신경써야 할 것이 몇 가지 있습니다.

1. 어떤 ctags를 쓸 것인가? 나는 어떤 프로그래밍 언어를 쓰는가?
2. 인덱스를 어떻게 갱신할 것인가?
3. 어떤 에디터에서 쓸 것인가?
ctags는 1990년대 초반에 나온 오래된 프로그램이기도 하고, 용도별로 개선해 만들어진 다른 ctags들도 있어서 어떤 것을 쓰는지 결정하는 건 꽤나 중요한 일입니다. 예를 들어 go 언어를 위한 gotags 라는 것도 따로 있어요. 한편 이 ctags의 개발자는 켄 아놀드인데, 이 분도 자바와 관련이
있습니다. 제임스 고슬링과 함께 Java 프로그래밍 언어 책의 저자이기도 했죠. 그런데 말입니다. 이 분이 개발한 프로그램 중에 정말 유명한 건 rogue... 라는 이름의 게임입니다. 네 그거 맞습니다. rogue like 장르의 시초가 된 그 게임... Image
아무튼 저는 게임에 대해서는 잘 모르고, 켄 아놀드에 대해서는 이 정도 밖에 모릅니다. 다시 ctags로 돌아가서, 제가 아는 ctags는 네 종류가 있습니다. 그냥 ctags, Exuberant ctags, Universal ctags, 그리고 언어별로 특별히 만들어진 다양한 ctags 들.
너무 좋은 vim 책인 practical vim 16장에서는 Exuberant Ctags의 사용법을 소개합니다. 저는 Universal ctags를 사용하고 있고요. 어느 쪽을 선택하건 상관없는데 Universal ctags가 좀 더 많은 프로그래밍 언어를 커버하고 있어서 이쪽을 쓰고 있습니다.

johngrib.github.io/wiki/ctags/
이제 2번 질문으로 돌아가죠. ctags 인덱스 파일을 어떻게 갱신할 것인가? 입니다. 인덱스 파일은 자동으로 갱신되는 게 가장 좋습니다. 하지만 vim 자체는 ctags의 결과물인 tags 파일의 자동 갱신 기능이 없어요. 그래서 ctags를 매번 수동으로 실행하거나 vim 세이브 오토 커맨드로 해결하거나
해야 하는데, 문제는 이게 귀찮고 대상 파일이 많으면 골치아프다는 것입니다. 그래서 대안으로 나온 플러그인들이 vim에서 파일을 저장할 때마다 git status를 참고해서 변경된 파일들만 인덱스를 갱신해주는 것들입니다. 오! 이걸 쓰면 IDE랑 비슷한 느낌... 경우에 따라서는 더 빠른 느낌입니다.
이런 플러그인들은 꽤 여럿이 있는 것 같은데 저는 계속 바꿔가면서 다양하게 써보다가 몇 년 전에 vim-gutentags 가 가장 별 탈 없이 빠르게 잘 돌아가서 그 이후로 아예 ctags 인덱스에 관심을 끊고 이것만 쓰고 있습니다. 구텐탁이라니 이름이 참 귀엽지 않나요.

github.com/ludovicchabant…
그러면 세 번째 질문으로 돌아가죠. 어떤 에디터에서 쓸 것인가? 앗 당연히 vim이 아닌가? 라고 생각하실 수도 있을 겁니다. 그런데 vim도 그렇고 ctags도 그렇고 따지고 보면 유닉스 철학을 따르려 하는 평범한 터미널 cli 프로그램들입니다. 이 녀석들은 자신의 기능만 충실하면 됩니다.
그래서 vim이 아닌 다른 멋있는 에디터를 만들었다거나, 발견했을때 프로그래밍 언어의 키워드 식별 기능이 필요하다면 ctags가 자동으로 가동되도록 설정을 하거나 하면 IDE 비스무리하게 사용할 수 있을 겁니다. 저는 이런 도구들을 엮어서 쓰는 게 참 재밌더라고요. 맥가이버 음악 들리는 거 같고.
tags 파일은 인덱싱의 역할만 잘 해내고 있기 때문에 이걸 쓰는 vim 플러그인들도 상당히 많습니다. 자동완성 플러그인은 물론이고, 코드 점프, 리팩토링 도구, 코드 엿보기 팝업 띄우는 플러그인 등등... 필요하다면 직접 만들 수도 있고요. 이런 것들을 찾아가며 하나하나 실험해보는 것도 즐겁죠.
오늘은 여기까지 하죠. 아름다운
Vㅏ
ㅁ 입니다.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 기계인간 John Grib

기계인간 John Grib Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @John_Grib

Jan 2, 2023
2022년 연말 내내 건강 생각만 했다. 건강문제 하나를 해결하니 다른 건강문제들이 더 잘 드러나게 되어 많은 생각을 하고 있다. 그리고 내가 휴식을 잘 취하지 못했다는 것도 깨닫게 되었다. 나는 항상 잠을 잘 때에만 눕는데, 병원에 입원했다 퇴원하니 누워 쉰다는 것의 효과를 체험하게 되었다.
생각해보면 나는 지난 십 몇년 간 주말에도 휴일에도 휴가중에도 누워서 쉰 적이 거의 없었다. 보통 그런 시간에도 책을 읽거나 산책을 하거나 글을 쓰거나 코딩을 하거나 했다. 나는 누워서 쉬는 걸 생각을 못하는 지점까지 이르렀던 것 같다. 그런데 만약 "누워서 쉬는 것 = 진짜로 쉬는 것"이라면?
그러면 나는 아주 오랫동안 진짜로 쉬지 않은 것이다. 심지어 진짜로 쉴 수 있는 기회가 꽤 많았는데도 그러지 않은 것. 3일간 병원에 입원했다 퇴원하고, 이후 진통제를 며칠 먹고 잠을 푹 잔 다음 몸 상태가 굉장히 달라진 것을 느꼈다.
Read 6 tweets
Jan 1, 2023
싫어하는 거 안 하고 좋아하는 것만 하며 살 수 있다면 얼마나 좋을까. 그러나 이렇게 살기는 불가능하고 살아갈수록 싫어하는 것만 늘어가겠지. 할 수 있는 최선은 시간이 흐를수록 관대해질 수 있도록 자신을 만들어가거나 싫어하는 것을 최대한 멀리하는 방법 뿐.
그래서 용서를 배우며 주위에 관대한 태도를 익히는 것이 중요한 것 같다. 이걸 못한다면 나이를 먹어갈수록 세계가 좁아지겠지. 누구도 나와 가까이 지내려 하지 않게 되겠지.
팍팍한 세상 사람들이 비웃곤 하는 '다른 사람의 의도를 선하게 받아들이고 친절한 태도를 갖는 것'이 어쩌면 더 나은 생존전략일지도 모른다. 다른 사람에게 각박하게 굴수록 주위에는 각박한 사람들만 남을 것이다. 다른 이에게 친절하면 조금씩 친구가 늘어갈 것이다.
Read 4 tweets
Oct 2, 2022
자학은 이 정도로 하고. 생각해보면 원인은 뻔한데, 그냥 재미가 없으니 생각이 자꾸 자기 자신에게서 원인을 찾으려고 파고들고 있는 것이다.
그래서 마음에 들지 않는 자신의 특성을 하나 하나 뒤집어가며 아하 이거 때문이구나 오 이것도 원인이겠네 하고 있는 셈인데, 어느 정도 유효할 수는 있겠지만 이러다 보면 모든 원인을 자기 자신에게서만 수집하고 탐색을 종료할 수 있다. 하지만 세상 일이 어디 자기 자신의 마음에서만 비롯되나.
이것도 정도껏 해야 하는 것. TV가 왜 고장났나?를 파고들다 리모콘을 소중히 다루지 않았던 나 자신의 경솔함과 돌머리스러움을 발견하고 꺼이꺼이 울어봤자 나 혼자만 아프고 TV는 고쳐지지 않는다. 이럴 땐 그냥 고객센터 전화해서 예약을 잡고, 잠시 우울한 다음 다른 일을 하러 가는 것이 낫겠지.
Read 17 tweets
Oct 2, 2022
내가 진짜로 잘할 수 있는 일은 뭘까.
지금보다 더 잘할 수 있는 분야가 있을 것 같은데… 생각해보면 나는 놀고 쉬는 것도 잘 못한다. 뭘 해야 잘 할 수 있을까. 뭘 해야 그러면서도 재미가 있을까. 요즘은 재미있는게 하나도 없고 모든 것이 지루하게 느껴진다.
2019~2020년에는 회사 일이 아주 재밌었다. 거의 매일 다음날이 기대됐고 출근이 즐거웠다. 퇴근 후에도 다음날, 다음달을 위해 고민하고 (그 과정에서 건강이 꽤 상하긴 했지만) 그 과정이 아주 재밌었다. 동료들과도 굉장히 친해져서 다같이 힘을 합쳐 전진하는 느낌이 좋았다.
Read 6 tweets
Oct 1, 2022
한동안 코딩/개발 생각을 전혀 안 하고 싶다.
TAOCP 3권 폈다.
오늘 읽고 싶은 곳은 6.2.1 절의 보간 검색. 여기에서 도널드 커누스 선생님이 컴퓨터는 일단 제쳐두고 생각해보자는 문장이 있었던 것 같다.
Read 4 tweets
Oct 1, 2022
양치질을 하다가 갑자기 치약이 혁신 아이템이라는 걸 깨달았다. 치약은 앞으로도 꽤 오랫동안 전 인류가 쓰겠지... 현대적인 치약을 처음 발명한 사람은 누굴까.
콜게이트가 치약 원조가 아닐 수 있겠지만 일단 가장 먼저 떠오른 유명한 치약 회사 콜게이트의 역사에 대해 검색해보고 있다. 그런데 윌리엄 콜게이트가 1890년대에 치약을 튜브에 넣은 사람이구나. 그 이전에는 치약이 유리병에 담겨 있었다고.
이렇게 처음으로 뭔가 시도해 오래 이름을 남긴 (회사) 이야기가 참 재밌다.

알렉산더 그레이엄 벨의 AT&T, 금속 쟁기를 차랑에 연결한 맥코믹, 물에 뜨는 비누 만든 P&G, 에어컨을 발명한 윌리스 캐리어의 캐리어 에어컨, 처음으로 페니실린 대량생산에 성공한 화이자…
Read 11 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(