세션은 화면 구성을 보존해두고 다시 재생하는 기능입니다. vim을 껐다 켜도 화면이 유지되는 거죠.
vs code나 intellij 에서 뭔가 화면을 분할해 놓고 작업을 하다가 IDE를 껐다고 합시다. 나중에 다시 켜봐도 이전에 작업하던 파일들이랑 분할된 화면 모양이 다시 복원되어 있죠. 같은 기능입니다.
만약 vim의 session 기능을 모른다면 vim을 실행할 때마다 매번 편집할 파일을 찾아 열고, 내가 좋아하는 위치로 윈도우를 분할해서 옮겨놓고 하는 노가다를 일일이 해야 합니다. 그래서 그냥 화면 분할 같은 건 정말 필요할 때만 쓰고 윈도우 하나만 쓰는 경우도 있죠.
그런데 vim의 session 기능은 생각보다 사용하기 좀 짜증나고 번잡스러운 면이 있습니다. 저장/복원이 명령 하나로 해결되는 것도 아니고 이런저런 옵션이 있어서 일일이 생각하기 좀 그렇죠. IDE처럼 생각할 필요 없이 그냥 자동으로 세션이 저장되고, 다시 실행할 때 알아서 복원되면 좋으련만..
그래서 저는 session이라는 기능이 있다는 것만 알아두고, session을 관리해주는 플러그인을 쓰는 쪽을 선호합니다. 제가 쓰는 세션 관리 플러그인은 vim-startify 입니다. 세션을 관리해주는 vim 플러그인은 꽤 다양한 편이라 선택을 할 때 꽤 고민하게 될 수 있는데요,
vim-startify는 꽤 상쾌한 시작 화면을 제공해서, vim을 시작했을 때 (IDE처럼) 어떤 프로젝트를 작업할 것인지를 선택할 수 있게 해줍니다. 그리고 vim을 종료할 때 자동으로 화면 구성을 session으로 저장해 주죠. 사진은 제 vim을 실행한 직후의 화면입니다. cowsay가 맞아주죠.
화면을 뜯어봅시다. 가운데를 보면 Sessions라고 있죠. IDE로 치면 이게 프로젝트들입니다. 화면구성 뿐만 아니라 pwd도 저장되던가 해서 커서를 놓고 엔터를 치거나 숫자를 누르면 해당 프로젝트의 화면 구성이 복원되며 코딩을 바로 시작할 수 있습니다. 그 밑에는 최근에 편집한 파일들이 있고요
물론 이 화면은 자신의 취향에 맞게 커스터마이즈하는 것이 가능합니다. 뭘 추가하던가 뭘 뺄 수도 있고, 순서를 바꾸는 것도 가능하고요. 한편 제일 위에 있는 속담/격언을 보여주는 cow는 fortune 명령에 파이프를 연결해 cowsay로 출력한 것입니다.
컴퓨터에 fortune이 설치되어 있다면 터미널에서 fortune을 입력해보세요. 격언이나 속담 같은게 하나씩 나올 겁니다. 꽤 귀여운 명령인데, 이 명령은 데이터베이스 파일을 자신이 직접 편집할 수 있다는 게 매력적입니다. 저는 책을 읽다가 본 좋은 문구를 넣어두곤합니다.
그런데 이 fortune 명령을 개발한 사람이 또 대단한 레전드 프로그래머입니다. 바로... 어제도 이야기가 나왔던 ctags의 개발자 켄 아놀드 님입니다. 이 분은 로그 라이크 장르의 시초가 된 게임인 로그를 개발한 분이기도 하죠.
아무튼 세션으로 돌아가죠. 전 vim-staritfy를 쓰기 시작하고 나서는 vim에서 session을 직접 조작하는 방법을 거의 잊게 됐습니다. 적어도 수동으로 세션을 조작할 일은 아예 없었죠. 그래서 너무 행복하고 너무 편했습니다. 더 좋은 세션 플러그인들도 있었겠지만 굳이 조사할 필요도 못 느꼈어요.
바로 2달 전까지 말이죠... 몇 년이나 세션을 직접 다루질 않고 살았기 때문에 2022년에 세션에 문제가 생길 거라곤 전혀! 한 순간도! 생각해보질 않았던 겁니다. 이거 이야기하자면 좀 한참 걸릴 수도 있는데 음....
어떤 플러그인을 쓰다가, 그 플러그인이 숨겨진 버퍼를 다루는 방식이 세션을 저장하고 복원할 때 특정 순간에 예외상황이 발생하곤 하는 문제를 발견한 겁니다. 그래서 그 플러그인의 github에 가서 알아보니 누가 약 반년 전에 같은 이슈로 고생한 적이 있는데 아직 해결이 안 됐더라고요.
그런데 원인이 뚜렷하지 않은데다가, 해당 플러그인이 vimscript로 만들어진 것이 아니어서 굉장히 난감했습니다. (그렇습니다. 다른 언어로도 vim 플러그인을 만들 수 있어요.) 게다가 그 언어가 흔한 언어도 아닌 Lisp의 방언이어서 너무나 난감했습니다. python이나 perl이라면 어떻게든 해볼텐데
그렇다고 이거 하나 고치자고 그 언어를 공부하기도 애매한 상황이어서... 저는 꼼수 하나를 떠올리게 됩니다. 제가 한두달 쯤 전에 타임라인에서 청테이프로 해결하니 뭐니 하며 투덜거린 트윗을 보신 분들이 있을지도 모르겠습니다. 그 청테이프로 해결한 문제가 바로 이 건을 말합니다.
제가 그 문제를 어떻게... 해결했냐면(해결이라고 하기 부끄럽다).. vim session 파일을 디버깅해서 문제 패턴을 파악한 다음에, vim을 띄울 때마다 실행되는 훅에 vim session 파일에서 문제 패턴을 perl로 공백 문자로 치환해버리는 방법을 썼습니다. 주석 빼고 4줄 밖에 안 되는 셸스크립트였죠.
그래서 vim이 실행될 때마다 스크립트도 실행되면서 문제의 원인을 날려버리는 방법.. 잘 작동하긴 했지만 썩 아름다운 방법은 아니었죠. 그래도 이 방법을 해당 이슈에 남겨서 다른 사람들도 참고할 수 있게는 해 놓았긴 합니다. 그 플러그인을 계속 썼다면 더 나은 방법을 생각했을지도 모르겠어요.
하지만 이제 그 플러그인은 안 쓰고, 다른 걸 쓰게 되어서 더 생각하지 않게 됐습니다. 세상엔 풀어야 할 문제가 널려 있고, 어떤 문제를 풀지 않을지 결정하는 것도 중요하다고 생각하거든요. 게다가 세션은 그냥 자동생성되는 vimscript여서 인식의 뒤편에서 계속 적당히 작동해주길 바랄 뿐입니다
이야기하다 보니 벌써 12시가 거의 다 됐네요. 오늘은 여기까지 하죠. 읽어주셔서 감사합니다
2022년 연말 내내 건강 생각만 했다. 건강문제 하나를 해결하니 다른 건강문제들이 더 잘 드러나게 되어 많은 생각을 하고 있다. 그리고 내가 휴식을 잘 취하지 못했다는 것도 깨닫게 되었다. 나는 항상 잠을 잘 때에만 눕는데, 병원에 입원했다 퇴원하니 누워 쉰다는 것의 효과를 체험하게 되었다.
생각해보면 나는 지난 십 몇년 간 주말에도 휴일에도 휴가중에도 누워서 쉰 적이 거의 없었다. 보통 그런 시간에도 책을 읽거나 산책을 하거나 글을 쓰거나 코딩을 하거나 했다. 나는 누워서 쉬는 걸 생각을 못하는 지점까지 이르렀던 것 같다. 그런데 만약 "누워서 쉬는 것 = 진짜로 쉬는 것"이라면?
그러면 나는 아주 오랫동안 진짜로 쉬지 않은 것이다. 심지어 진짜로 쉴 수 있는 기회가 꽤 많았는데도 그러지 않은 것. 3일간 병원에 입원했다 퇴원하고, 이후 진통제를 며칠 먹고 잠을 푹 잔 다음 몸 상태가 굉장히 달라진 것을 느꼈다.
자학은 이 정도로 하고. 생각해보면 원인은 뻔한데, 그냥 재미가 없으니 생각이 자꾸 자기 자신에게서 원인을 찾으려고 파고들고 있는 것이다.
그래서 마음에 들지 않는 자신의 특성을 하나 하나 뒤집어가며 아하 이거 때문이구나 오 이것도 원인이겠네 하고 있는 셈인데, 어느 정도 유효할 수는 있겠지만 이러다 보면 모든 원인을 자기 자신에게서만 수집하고 탐색을 종료할 수 있다. 하지만 세상 일이 어디 자기 자신의 마음에서만 비롯되나.
이것도 정도껏 해야 하는 것. TV가 왜 고장났나?를 파고들다 리모콘을 소중히 다루지 않았던 나 자신의 경솔함과 돌머리스러움을 발견하고 꺼이꺼이 울어봤자 나 혼자만 아프고 TV는 고쳐지지 않는다. 이럴 땐 그냥 고객센터 전화해서 예약을 잡고, 잠시 우울한 다음 다른 일을 하러 가는 것이 낫겠지.
지금보다 더 잘할 수 있는 분야가 있을 것 같은데… 생각해보면 나는 놀고 쉬는 것도 잘 못한다. 뭘 해야 잘 할 수 있을까. 뭘 해야 그러면서도 재미가 있을까. 요즘은 재미있는게 하나도 없고 모든 것이 지루하게 느껴진다.
2019~2020년에는 회사 일이 아주 재밌었다. 거의 매일 다음날이 기대됐고 출근이 즐거웠다. 퇴근 후에도 다음날, 다음달을 위해 고민하고 (그 과정에서 건강이 꽤 상하긴 했지만) 그 과정이 아주 재밌었다. 동료들과도 굉장히 친해져서 다같이 힘을 합쳐 전진하는 느낌이 좋았다.