기계인간 John Grib Profile picture
Apr 9, 2022 21 tweets 4 min read Read on X
으아 11시라니 벌써
Vㅏ
ㅁ 이 되었군요...
오늘은 무슨 이야기를 할까요.. 어제의 저는 session 이야기를 생각하고 있었군요. 음 뭐부터 얘기하지.. 만약 요즘의 제 트윗을 vim에 관심은 있지만 지속적인 사용에 번번이 어려움을 겪는 분들이 읽고 계신다면 오늘의 주제인 세션이 필요하셨을지도 모르겠습니다.

세션은 화면 구성을 보존해두고 다시 재생하는 기능입니다. vim을 껐다 켜도 화면이 유지되는 거죠.

vs code나 intellij 에서 뭔가 화면을 분할해 놓고 작업을 하다가 IDE를 껐다고 합시다. 나중에 다시 켜봐도 이전에 작업하던 파일들이랑 분할된 화면 모양이 다시 복원되어 있죠. 같은 기능입니다.
만약 vim의 session 기능을 모른다면 vim을 실행할 때마다 매번 편집할 파일을 찾아 열고, 내가 좋아하는 위치로 윈도우를 분할해서 옮겨놓고 하는 노가다를 일일이 해야 합니다. 그래서 그냥 화면 분할 같은 건 정말 필요할 때만 쓰고 윈도우 하나만 쓰는 경우도 있죠.
그런데 vim의 session 기능은 생각보다 사용하기 좀 짜증나고 번잡스러운 면이 있습니다. 저장/복원이 명령 하나로 해결되는 것도 아니고 이런저런 옵션이 있어서 일일이 생각하기 좀 그렇죠. IDE처럼 생각할 필요 없이 그냥 자동으로 세션이 저장되고, 다시 실행할 때 알아서 복원되면 좋으련만.. Image
그래서 저는 session이라는 기능이 있다는 것만 알아두고, session을 관리해주는 플러그인을 쓰는 쪽을 선호합니다. 제가 쓰는 세션 관리 플러그인은 vim-startify 입니다. 세션을 관리해주는 vim 플러그인은 꽤 다양한 편이라 선택을 할 때 꽤 고민하게 될 수 있는데요,

github.com/mhinz/vim-star…
vim-startify는 꽤 상쾌한 시작 화면을 제공해서, vim을 시작했을 때 (IDE처럼) 어떤 프로젝트를 작업할 것인지를 선택할 수 있게 해줍니다. 그리고 vim을 종료할 때 자동으로 화면 구성을 session으로 저장해 주죠. 사진은 제 vim을 실행한 직후의 화면입니다. cowsay가 맞아주죠. Image
화면을 뜯어봅시다. 가운데를 보면 Sessions라고 있죠. IDE로 치면 이게 프로젝트들입니다. 화면구성 뿐만 아니라 pwd도 저장되던가 해서 커서를 놓고 엔터를 치거나 숫자를 누르면 해당 프로젝트의 화면 구성이 복원되며 코딩을 바로 시작할 수 있습니다. 그 밑에는 최근에 편집한 파일들이 있고요 Image
물론 이 화면은 자신의 취향에 맞게 커스터마이즈하는 것이 가능합니다. 뭘 추가하던가 뭘 뺄 수도 있고, 순서를 바꾸는 것도 가능하고요. 한편 제일 위에 있는 속담/격언을 보여주는 cow는 fortune 명령에 파이프를 연결해 cowsay로 출력한 것입니다.
컴퓨터에 fortune이 설치되어 있다면 터미널에서 fortune을 입력해보세요. 격언이나 속담 같은게 하나씩 나올 겁니다. 꽤 귀여운 명령인데, 이 명령은 데이터베이스 파일을 자신이 직접 편집할 수 있다는 게 매력적입니다. 저는 책을 읽다가 본 좋은 문구를 넣어두곤합니다.

johngrib.github.io/wiki/fortune-c…
그런데 이 fortune 명령을 개발한 사람이 또 대단한 레전드 프로그래머입니다. 바로... 어제도 이야기가 나왔던 ctags의 개발자 켄 아놀드 님입니다. 이 분은 로그 라이크 장르의 시초가 된 게임인 로그를 개발한 분이기도 하죠.
아무튼 세션으로 돌아가죠. 전 vim-staritfy를 쓰기 시작하고 나서는 vim에서 session을 직접 조작하는 방법을 거의 잊게 됐습니다. 적어도 수동으로 세션을 조작할 일은 아예 없었죠. 그래서 너무 행복하고 너무 편했습니다. 더 좋은 세션 플러그인들도 있었겠지만 굳이 조사할 필요도 못 느꼈어요.
바로 2달 전까지 말이죠... 몇 년이나 세션을 직접 다루질 않고 살았기 때문에 2022년에 세션에 문제가 생길 거라곤 전혀! 한 순간도! 생각해보질 않았던 겁니다. 이거 이야기하자면 좀 한참 걸릴 수도 있는데 음....
어떤 플러그인을 쓰다가, 그 플러그인이 숨겨진 버퍼를 다루는 방식이 세션을 저장하고 복원할 때 특정 순간에 예외상황이 발생하곤 하는 문제를 발견한 겁니다. 그래서 그 플러그인의 github에 가서 알아보니 누가 약 반년 전에 같은 이슈로 고생한 적이 있는데 아직 해결이 안 됐더라고요.
그런데 원인이 뚜렷하지 않은데다가, 해당 플러그인이 vimscript로 만들어진 것이 아니어서 굉장히 난감했습니다. (그렇습니다. 다른 언어로도 vim 플러그인을 만들 수 있어요.) 게다가 그 언어가 흔한 언어도 아닌 Lisp의 방언이어서 너무나 난감했습니다. python이나 perl이라면 어떻게든 해볼텐데
그렇다고 이거 하나 고치자고 그 언어를 공부하기도 애매한 상황이어서... 저는 꼼수 하나를 떠올리게 됩니다. 제가 한두달 쯤 전에 타임라인에서 청테이프로 해결하니 뭐니 하며 투덜거린 트윗을 보신 분들이 있을지도 모르겠습니다. 그 청테이프로 해결한 문제가 바로 이 건을 말합니다.
제가 그 문제를 어떻게... 해결했냐면(해결이라고 하기 부끄럽다).. vim session 파일을 디버깅해서 문제 패턴을 파악한 다음에, vim을 띄울 때마다 실행되는 훅에 vim session 파일에서 문제 패턴을 perl로 공백 문자로 치환해버리는 방법을 썼습니다. 주석 빼고 4줄 밖에 안 되는 셸스크립트였죠.
그래서 vim이 실행될 때마다 스크립트도 실행되면서 문제의 원인을 날려버리는 방법.. 잘 작동하긴 했지만 썩 아름다운 방법은 아니었죠. 그래도 이 방법을 해당 이슈에 남겨서 다른 사람들도 참고할 수 있게는 해 놓았긴 합니다. 그 플러그인을 계속 썼다면 더 나은 방법을 생각했을지도 모르겠어요.
하지만 이제 그 플러그인은 안 쓰고, 다른 걸 쓰게 되어서 더 생각하지 않게 됐습니다. 세상엔 풀어야 할 문제가 널려 있고, 어떤 문제를 풀지 않을지 결정하는 것도 중요하다고 생각하거든요. 게다가 세션은 그냥 자동생성되는 vimscript여서 인식의 뒤편에서 계속 적당히 작동해주길 바랄 뿐입니다
이야기하다 보니 벌써 12시가 거의 다 됐네요. 오늘은 여기까지 하죠. 읽어주셔서 감사합니다

• • •

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!

:(