John Grib Profile picture
Apr 1, 2022 19 tweets 5 min read Read on X
생각해 보니 이 이야기를 안 했군. <C-e>와 <C-y>를 INSERT 모드에서 하는 방법이 있다. 그것은 바로 <C-x>를 먼저 누르는 것. 이 무슨 emacs 같은... 이라 생각할 수 있지만 막상 써보면 편함. <C-x>는 한 번만 눌러도 되기 때문이다... 쓰는 김에 영상도 찍어서 올려보자.
insert 모드라도 이렇게 먼저 c-x (control x)를 누른 다음이라면 c-e c-y 가 잘 돌아간다. 편집하다가도 위아래 스크롤을 할 필요가 있을 때 하면 된다. 앗 그런데 여기에서 설명할 것들이 분기가 생겨버린다. 하나는 c-x 이고, 다른 하나는 INSERT 모드에서 NORMAL 명령을 작동하는 방법인데
기왕 이야기가 나온 김에 c-x 이야기를 먼저 하자. c-x c-e 라니 너무 emacs 같아요! 라고 생각할 수 있지만 아무려면 어떤가 싶다. (난 emacs 잘 모르지만 좋아한다 멋있음)

vim에서 c-x의 정식 명칭(?)은 insert expand. vim의 기본적인 자동완성 prefix 중 하나이다. <C-x><C-f> 를 누르면...
파일 이름을 자동완성한다. 예를 들자면 ~/.bash 까지 적고 <C-x><C-f> 를 누르면 ~/.bashrc 이렇게 자동완성된다는 것. 물론 후보가 여러개면 후보를 보여준다. 중간 경로도 잘 됨. 타이핑하다가 특정 파일 경로르 자동완성해가면서 쓸 일이 있을 때 편하다.
그러면 c-f 만 있냐 하면 그 외에도 잡다한 것들이 잔뜩 붙어 있다. 그치만 다 외우고 다니지는 않고, 그 중 기억하는 건 c-f, c-y, c-e, c-l, c-], c-o 정도. 이렇게 이야기하면 앗 그래도 저걸 아 어떻게 알고 다니지 할 수 있는데 각 알파벳을 보면 떠오르는 게 있다.
f는 파일이고, y/e는 스크롤이고, l 은 행단위 자동완성이고, ] 는 태그 점프할 때 써먹는 것이니 태그 완성이고, o 는 omni completion이니까 대강 기억하는 것. 중요한 건 기억하는 게 아니라 이걸 찾아보는 방법인데, vim에서 각 모드별 키스트로크 검색은 규칙이 있다.
insert mode control x 매뉴얼을 보고 싶다면 이렇게 입력하면 된다.

:help i_ctrl-x

그러면 이런 헬프 문서가 열린다. 비슷하게 normal 모드도 검색할 수 있다. Image
vim은 help 문서가 아주 잘 되어 있어서, vim에 어느 정도 익숙해졌을 때 구글링보다 헬프 문서를 보면서 더 많이 배우는 느낌이 들었다. 근데 보다보면 좀 아득한 느낌이 드는 게... 양이 장난이 아니다. 예를들어 :help functions로 빌트인 함수 매뉴얼을 볼 수 있는데 마지막 라인 넘버가 13049 😅
그나마 만만한 :help option-summary가 7190 라인. 몇 년 전에 이 option-summary를 어디 한 번 끝까지 정독해보자 하고 읽으면서 대강 나한테 필요한 것만 요약한 문서가 바로 이것.

github.com/johngrib/simpl…
칠천라인이 넘는 설명서를 읽는 건 좀 괴롭긴 했는데 한편으로는 모르던 걸 잔뜩 알게 되었기도 하고, 읽다보니 생각지도 못했던 vim의 동작들도 알게 되어서 좋은 공부가 되었다고 생각. 이런 공부가 vim 바깥으로는 에디터나 이런저런 도구의 UI에 대한 내 감각에도 영향을 줬다고 생각한다.
그러면 이제 인서트 모드에서 노멀 명령을 실행하는 방법으로 돌아가자. c-o 가 있다. 인서트 모드에서 이걸 누르면 딱 한번만 노멀 명령을 입력할 수 있는 뭔가 소원을 비는 느낌의 명령. 예를 들어 인서트 모드에서 c-o L 을 누르면 마지막 줄로 점프해서 계속 타이핑을 할 수 있다.
물론 그냥 esc를 누르고 뭔가 한 다음에 다시 i를 누르고 입력 작업으로 돌아가면 되긴 하는데, 그러면 키를 한 번 더 누르니까... c-o 를 누르는 것. 쓰고 보니까 키 한 번 누르는 걸 아낀다는 게 되게 구두쇠 같지만 그냥 넘어가자.
c-x 를 이야기하며 나왔던 인서트 모드 자동완성으로 돌아가서.. 인서트모드 자동완성 하면 빠뜨릴 수 없는 게 하나 있다. iabbrev. 이름을 보면 알겠지만 약어를 확장해주는 기능이고 이걸 잘 써먹으면 오타를 고치거나 축약어를 자동완성해주게 할 수 있는데, 이게 알고 보면 무시무시한 기능.
이제 이게 왜 무서운 기능인지 알아보자. vim 에서 iabbr의 가장 평범한 사용은 이런 것이다. 이렇게 설정하면 타이핑하다가 wyh 라고 오타를 내면 why 로 고쳐주고, naem 으로 오타를 내면 name으로 고쳐준다. Image
이걸 좀 응용하면 이렇게 자기 이메일 주소라던가.. 뭔가 타이핑할때 가끔 붙여넣을 일이 있는데 일일이 쓰기는 귀찮은 그런 것들을 집어넣게 된다. 하지만 이런거야 있어도 그만 없어도 그만이고, 그때그때 붙여넣어도 되니까 그냥 그런 기능이라 볼 수 있는데. Image
여기에 끼얹는 옵션이 하나 있다. <expr> 이걸 쓰면 뒤에 오는 식을 표현식으로 보고 vim이 evaluate한 결과를 에디터에 완성해준다. 그리고 이 기능 덕분에 vim은 자신만의 자동완성을 아주 쉽게 만들 수 있는 멋진 플랫폼이 된다. 아래는 내가 쓰고 있는 것들. Image
쓰는 모습을 찍어봤다. __time 부터 __pwd 는 vim의 빌트인 펑션을 쓰고, __branch 와 __uuid 는 system 함수로 셸 명령을 호출한다. 셸 명령을 부를 수 있다는 이야기는 나에게 익숙한 프로그래밍 언어로 나만의 완성 문구를 만들 수 있다는 의미이기도 하다. 인터넷에서 뭘 가져올 수도 있을 거고.
내가 설정한 iabbr이 전부 앞에 _ 가 두개씩 있는 이유는 별거 없고 괜히 타이핑하다 의도하지 않은 순간에 iabbr 자동완성이 되기를 바라지 않았기 때문. __ 정도면 거의 쓸 일이 없으니까 의도적으로 음 오늘 날짜가.. 할 때 __date 하고 쓰는 식.

• • •

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!

:(