Anki 문장 암기하기 8 - 단순 암기의 발견


 컴퓨터 관련 공부를 생각만큼 하지 못한 이유는 몇 가지가 있다.


 첫 번째는 블로그다. 초기에는 vim이나 HTML/CSS 등을 공부하면서 블로그로 올릴 계획을 세웠다. 하지만 매일 공부한 것을 블로그에 올리려면 스스로 내요을 편집하고 정리해야 하는데, IT 공부는 생각 외로 전혀 단순하지 않았다. 끊임없이 의문점이 나타나고 관련 내용을 찾아보지만 스스로도 신뢰할 수 없었다. 그렇다고 책을 그대로 베껴서 포스팅을 작성할 수 없다고 판단하여 중단하게 되었다. 덕분에 블로그에 올릴 수 있는 다른 공부에 집중하게 되었다. 


 두 번째는 번역이다. 블로그에 포스팅하지 않고, 그냥 공부하려고 했다. 그런데 그럴 때마다 번역이 이상한 책들하고만 인연이 닿았다. 신뢰할 수 없는 번역, 지나치게 이상한 문장 등으로 책을 덮기 일쑤다. 그렇게 공부하기를 포기한 책들이 3~4권정도 된다. 매번 의욕에 차서 공부를 시작했다가 실망하고 덮는 과정이 반복되면서 공부에 대한 의욕도 저하될 수밖에 없었다. 나중에는 번역되지 않은 영어 원서로 공부하고 싶을 정도였다.


 마지막은 Anki에 이공계 관련 과목을 집어넣는 방법이다. 이공계를 비롯하여 IT 분야는 수식과 그림을 적극 활용할 수밖에 없다. 이제껏 한문, 영어 등의 공부는 그저 텍스트로 충분했다. 하지만 이공계 과목은 텍스트로 표현하면 지나치게 길어지고 그 의미를 제대로 전달할 수 없는 경우가 많다. 간단한 기호와 수식이면 그 함의가 정확하고 간결하게 전달된다. Anki에서 기호와 수식 표현으로 사용하기를 권장하는 소프트웨어는 LaTeX이고 제대로 정리하려면 이를 익혀야 했다. 의욕에 차서 공부하려고 책을 폈는데, 그 전에 공부해야할 것이 있다는 것을 발견한 셈이다. 그렇다고 그 공부할 내용이 간단한 것도 아니다. 거의 책 한권 분량이니 부담이 되었다. 공부하고 싶은 내용도 아니니 더더욱 의욕이 꺾였다. 이 경우에도 LaTeX을 습득할지 말지 꽤나 오래 고민했다. 필요하다는 것은 알지만 낯설고 공부할 내용도 많으며 별로 알고 싶은 내용도 아니기 때문이다. 


 다른 방법이 없었다. 어떻게든 정신을 가다듬고 LaTeX을 공부하기로 했다. 스스로에게 필요성을 역설하기 시작했다. 수식 사용이 필요한 다양한 상황을 그려보면서 의욕을 부추겼다. Anki의 카드뿐만 아니라 블로그 포스팅에도 수식을 집어넣어야 하고 아마도 무척 많이 사용할 수 밖에 없다. 수식이 필요할 때마다 사진을 찍거나 파워포인트로 얼기설기 그림을 그리면 카드 만들 때마다 고역이고, 공부할 때도 그 어설픔이 눈에 밟힐 것이다. 게다가 다른 사람들과 공유할지도 모르는 카드이므로 LaTeX을 써서 깔끔하게 조판하는 편이 바람직하다고 스스로를 설득했다. 그렇게 힘들게 LaTeX을 공부하면서 새로운 경험을 하게 되었다.


 유용한 LaTeX 교재를 찾기 어려웠다. LaTeX은 IT 소프트웨어에서 자주 볼 수 있는 특유의 문서(document)가 돌아다니는데, 이러한 문서들은 읽기 쉽지 않다. 문서는 친절한 가이드가 아니고 그저 취지와 각종 명령 사용법 등을 건조하게 제시하는 정도이기 때문이다. 이런 문서들은 하나하나 조작해보면서 씨름을 해야지 겨우 감이 온다. 그것도 어느 정도 개발 경험이 있고, 다른 비슷한 소프트웨어를 써본 경험이 있어야 빠르게 익힐 수 있다. 처음 접하는 사람이 문서로 소프트웨어를 공부하는 것은, 영어를 전혀 모르는 사람이 공부하겠다고 사전을 통째로 외우는 것처럼 막막한 행위가 될 수 있다. 게다가 문서들 대부분 읽기 쉽게 정서된 글도 아니고, 친절하게 하나하나 설명해주는 것도 아니어서 더 까다롭다. 그래서 이런 문서류는 좋아하지 않고 잘 보지도 않는다. 하지만 LaTeX은 적당한 교재를 구하기 어려웠다. 어떤 것은 너무 자세해서 부담스럽고, 어떤 것은 너무 간단해서 이해하기 어려웠다. 전문가가 될 것은 아니므로 적당히 쓸 수준의 간단한 교재를 원했지만 아쉽게도 시중에서 구입하지 못했다. 결국, 이리저리 탐색하다가 포기하고 국내 TeX 사용자 그룹인 KTUG에서 가장 초보자에게 권장하는 lshort-ko를 골랐다. 


 당시에는 지나치게 많은 Anki 카드에 질려서 쓸데없는 카드를 최대한 만들지 말자는 주의였다. 그래서 열심히 문서를 이해하고 중요한 내용만 카드로 옮겨 공부하겠다고 마음먹었다. 하지만 이는 불가능했다. 무엇이 필요하고 무엇이 필요 없는지 전혀 모르는데 어떻게 요약하고 정리할까? 게다가 LaTeX 매뉴얼은 이해하기 어려웠다. 그 서술 방식이 사용자 친화적인 아닌 점도 있지만 생소한 조판에 대해서 다루고 있어서 이기도 하다. 게다가 LaTeX의 버전이 너무 다양해서 혼란스럽고 그 다음에 등장하는 수많은 명령어와 패키지는 이런 혼란을 더욱 가중시켰다. 결국, 이리저리 탐색만 하다 지지부진 진도가 나가지 않고 또 의욕이 꺾였다. 


 아무 것도 하지 못하는 교착된 상태가 시작되면서 잠시 무기력한 나날을 보냈다. 무기력하게 노는 상황과 원래 하던 대로 무조건 외우는 상태를 비교해보니 이미 충분히 시간낭비를 했고, 무기력한 상황이 더 지속되면 더 시간낭비를 할 것 같았다. 결국, 카드를 정리하기를 포기하고 닥치는 대로 외우기 시작했다. 


 IT 관련 Anki 카드를 처음 만드는 상황은 아니다. vim이나 HTML/CSS 관련 카드를 만들어 공부했었다. 그리고 이때는 블로그 포스팅도 같이 했기 때문에 외워야할 내용들이 문장이나 글의 형태로 만들어 단순한 지식이 아닌 종합적이고 입체적인 지식의 형태가 되도록 어느 정도 노력했다. 그런데 LaTeX은 부담스러운 상황에 갑자기 얹어진 반갑지 않은 공부였고, 빨리 끝내고 싶었다. 그래서 lshort-ko 문서에 나온 단순한 설명과 명령어, 부호 등을 최대한 간단하게 다음과 같이 명령어와 해당 결과를 Q/A 식으로 작성했다.


Q : 다음 레이텍 명령의 결과는? \AE 

A : Æ

    

Q : 다음 레이텍 출력을 만드는 명령은? Æ

A : \AE 


 첫 번째 Q/A는 명령어의 작동 결과를 묻고, 두 번째 Q/A는 특정 결과를 만들어내는 명령어를 묻는 방식이다. 대부분의 카드를 이런 방식으로 간단하게 신속하게 만들었다. 기존에 하던 것처럼 프로그램 내부의 작동이나 배경, 조판 용어 설명 등을 추가로 찾아보지 않고, 그저 필수적인 몇몇 간단한 개념과 필요한 기능을 나열해서 외운 것이다. 물론, 카드는 많이 만들어졌다. 모든 특수문자와 명령어를 전부 카드로 옮겼기 때문이다. 

 

 이건 상당히 재미있는 경험이었다. 단답형의 카드들은 너무나 쉽고 빠르게 흡수되었다. 문장과 글을 곱씹어 외우는 방식을 살펴보면 처음 공부하는 새 카드는 대략 짧게는 3~4분에서 길게는 15분 정도 걸린다. 하지만 단답형 카드들은 5~10초 정도면 학습이 된다. 너무 쉽게 진도가 나가니 즐겁고 상쾌했다. 복습은 더 빨랐다. 보통 1초면 하나의 카드를 복습하고 넘어갈 수 있었다. 단순한 사실들을 상기하면서 빠르게 복습할 수 있게 되니 Anki에 수백 개의 복습 카드가 있어도 전혀 부담스럽지 않다. 오히려 상쾌했다. 외우고 곱씹는 방식에서는 느낄 수 없는 빠른 카드 클리어는 속도감을 주어 지루하지 않았고, 너무 쉽게 답을 기억해낼 수 있어서 공부에 대한 부담감을 줄이고 자존감도 살짝 올려주었다. 


 덕분에 진도가 빠르게 나아갔다. LaTeX 공부는 필요한 부분인 수식 조판을 다루는 부분까지만 공부했다. 이는 메뉴얼 절반에 해당하는 부분으로 70페이지 정도 된다. 다른 공부라면 최소 2달은 걸렸을 분량이지만 이 경우는 10일 정도로 공부를 끝낼 수 있었다. 끝내주는 속도감이었다.


 게다가, 단순히 매뉴얼을 눈으로 볼 때는 이상할 정도로 손에 잡히지 않던 내용들이 자잘 자잘한 명령어와 특수기호 사용법을 외우면서 빠르게 친숙해지고 손에 딱 달라붙기 시작했다. 단순 암기를 시도했을 때는 미리 단순한 명령들을 암기하고 다시 LaTeX 매뉴얼을 보면서 몸에 익히려는 계획이었다. 하지만 단순 암기만 했음에도 막막했던 LaTeX을 어떻게 사용해야하는지 손에 잡힐 듯 감이 오기 시작했다.


 종합하자면 LaTeX 공부 경험은 빠르게 진행되는 즐겁고 가벼운 공부라고 할 수 있다. 공부 결과도 매우 좋았다. 빠르게 LaTeX을 필요한 부분까지 익혔고 잘 사용한다. 무엇보다도 어떻게 사용할지 감이 잡혀 매우 만족하고 있다.


 왜 그 동안 한 번도 이렇게 상쾌하게 만족스럽게 공부하지 못했을까? 그것은 바람직한 공부는 주입식으로 단순 지식을 암기하지 말아야 한다고 믿었기 때문이고 그것에 더하여 지금껏 공부해온 내용들이 이런 공부에 적합하지 않았기 때문으로 보인다.


 스스로 믿는 바람직한 공부는 지식과 정보를 다른 지식과 정보와 연계시켜 입체적으로 살아있는 지식을 익히는 공부다. 그러면 해당 지식이 자연스럽게 응용되고 장기간 기억하기 편해진다고 생각한다. 그래서 문장이나 글 형태로 외우고, 그림이나 시청각 자료를 동원해서 익힌다. 어찌 보면 흔히 듣게 되는 교육 모델이랑 비슷하다. 쉬운 개념부터 차근차근 접근하고 다양한 교보재와 시청각 자료를 이용해서 생생하게 인지시키고, 개념을 추출해 심화시키는 식의 교육법이다. 이러한 교육법은 뇌 속의 다양한 신경들을 자극한다. 그 결과 지식과 활동들이 탄탄하게 결속되어 효과적으로 장기 기억을 형성하고 죽은 지식이 아닌 언제든 응용 가능한 살아있는 지식을 형성하게끔 도와준다고 여겨진다. 그리고 이런 믿음에 따라서 글이나 문장 형태로 외워보니 비록 속도가 느리기는 하지만 깊은 충족감을 느낄 수 있었다. 결국, 믿음과 경험이 공부방식이 옳다고 확신시켜주었다.


 하지만 단순 지식으로 외운 경험은 새로운 가능성을 보여주었다. 단순 지식으로 외웠다는 것은 그냥 명령어와 기호 쓰는 법 등 개별적이고 파편화된 지식으로 공부했다는 것이다. 공부하기 싫고 최소한으로 빨리 끝내려는 마음이었기 때문에 이전의 공부처럼 명령어가 작동하는 원리를 찾거나 이렇게 조판하는 이유를 더 이해해보려고 노력하는 등의 노력을 일체 하지 않았다. 처음에는 어떻게 쓰는지 전혀 모르고 중요성을 분별할 수도 없으니 일단, 외우고 매뉴얼을 다시 읽거나 실제로 사용하면서 정말 필요한 것만 하나하나 들여다보자는 심산이었다. 그런데 외웠더니 그 다음 부터는 바로바로 원하는 대로 사용할 수 있었고, 더 이상의 추가적인 공부가 필요 없었다. 깊게 공부하지 않았음에도 머릿속에 흡수된 단순 지식들이 알아서 서로 상호작용하면서 LaTeX 수식 작성이라는 체계를 세웠기 때문이다. 


 이는 어떻게 가능했을까? 두 가지 요인을 추정할 수 있었다. 그것은 머릿속에 있는 지식들의 상호작용과 암기의 힘이다. 


 일단, 머릿속에 들어온 지식들은 서로 상호작용한다. 이 점은 문장과 글을 곱씹어 외우는 과정에서 확연하게 알 수 있었다. 따라서 단순한 지식들도 흡수하면 머릿속에서 서로 상호작용하면서 하나의 체계를 구축한다고 말할 수 있다. 하지만 이런 상호작용을 과대평가할 수는 없다. 경험에 따르면 머릿속의 지식들이 상호작용하여 체계를 구축하는데 상당한 시간이 걸린다. 또, 모든 지식들이 상호작용하여 체계를 구축하지도 않는다. 사례를 들면, 문득 깨닫는 경험들이 머릿속에서 지식들이 저절로 상호작용하여 체계를 구축하는 경험인데, 인위적인 노력을 하지 않을 경우 보통 2년의 시간이 걸린다. 그리고 문득 깨닫는 경험은 1년에 2~3번 있을까 말까하니 극히 일부의 지식과 정보만 체계화된다고 봐야 할 것이다. 지식이나 정보가 중복되거나 서로 모순될 경우 잘 기억되지 않거나 기억된 내용이 왜곡되는 등 상호작용이 바로 일어나지만 서로 연관이 없는 파편화된 단순 지식들이 상호작용하여 하나의 체계를 형성하는 경우는 많지 않아 보인다.


 그래서 그 다음으로 파악한 원인은 암기의 힘이다. 무엇을 암기의 힘이라고 하는가? 암기를 하다보면 굳이 외우지 않은 것들이 자연스레 기억이 되는 경험을 한다. 가령, 장황한 근거를 제시하고 추론 과정을 거쳐서 컴퓨터가 TV와 같은 바보상자라고 논증하는 글을 생각해보자. 글을 열심히 읽고 글의 결론에 동의하며 “컴퓨터는 TV와 같이 사람들을 바보로 만든다.” 라는 문장 하나만 외운다. 그러면 신기하게도 이 문장만 되새겨도 글에서 제시한 근거와 논리들이 상당히 선명하게 머릿속에 떠오른다. 즉, 본인이 직접 읽고 요약하여 필요한 내용들을 암기하면 요약하지 않은 다양한 맥락들이 머릿속에서 생생하게 살아있게 된다. 암기한 문장이나 지식이 마치 키워드처럼 작동하여 암기하지 않은 수많은 내용과 맥락들을 떠올릴 수 있게 해준다. 


 추정하면, LaTeX 공부에서 벌어진 일이 이런 일이었다. 단순한 내용들만 간단간단하게 외웠지만 이러한 내용들을 암기하면서 그 주위의 맥락을 전부 흡수한 것이다. 덕분에 머릿속은 LaTeX 수식 작성에 필요한 단순한 명령어와 파일, 환경들을 엮어서 나만의 총체적인 수식 작성 요령을 만들어냈다. 


 글이나 문장을 곱씹어 외우려고 했던 이유가 단순한 지식들과 그 지식들이 엮이어 만드는 다양한 맥락, 함의 등을 명시적으로 표현하고 전부 흡수하기 위함이었다. 그런데 LaTeX 공부를 하면서 단순 지식을 외우는 것만으로 이러한 맥락이 저절로 흡수된다는 점을 깨달았다. 깨달은 순간부터 곱씹어 외우기가 지나치게 시간과 노력을 잡아먹는 사치스러운 공부로 보이기 시작했다.

vim Ankilog 모음


vi 또는 vim의 기초 사용법을 정리한 Ankilog 모음과 관련 포스팅 링크입니다. 

    


Ankilog 모음


다음 파일을 다운 받아 사용하시면 됩니다.


vi 또는 vim 기초 사용법.apkg



관련 블로그 링크


포스팅된 블로그 링크는 다음과 같습니다.


vi 또는 vim을 텍스트 에디터로 선택한 이유

001 vim의 모드(mode) 및 간단한 실행과 종료

002 vim 튜토리얼(vimtutor)을 소개합니다.

003 명령 라인(명령줄)

004 vim의 실행과 종료 및 파일 불러오기와 저장

005 vim 명령 모드와 편집 모드의 전환

006 상하좌우로 커서 이동하기

007 기타 커서 이동(1)

008 기타 커서 이동(2)

009 기타 커서 이동(3)

010 화면 이동(커서 중심 화면변경 및 화면 스크롤)

011 삭제하기

012 복사(yank)와 붙여넣기(put)

013 레지스터(register) 개요

014 vim 레지스터(register)의 종류

015 vim 레지스터(register)에 데이터 저장하기

016 vim 레지스터(register)의 데이터를 붙여넣기 하는 방법

017 잘라내기, 명령취소(undo), 재실행(redo), 이전 작업 반복하기

018 블록 지정의 비주얼 모드

019 블록 지정 후 사용 명령어

020 vim의 옵션 개요

021 vim 옵션 설정 방법

022 탭(tab) 사이즈 조절

023 알아두면 좋은 몇 가지 옵션 설정

024 vim 설정 파일

025 vim 문자열 정렬

026 vim의 문자열 탐색

027 vim의 정규표현식(1) 개요

028 vim의 정규표현식(2) 문자 클래스

029 vim의 정규표현식(3) 점(.)

030 vim의 정규표현식(4) 문자열의 위치

031 vim의 정규표현식(5) or

032 vim의 정규표현식(6) 특수 문자

033 vim의 정규표현식(7) 반복

034 vim의 정규표현식(7) 몇 가지 예제들

035 vim의 정규표현식(8) POSIX 문자 클래스 1

036 vim의 정규표현식(9) 아스키(ASCII) 코드와 문자 클래스

037 vim의 정규표현식(10) POSIX 문자 클래스 2

038 vim의 정규표현식(11) 확장 정규 표현식 1

039 vim의 정규표현식(12) 확장 정규 표현식 2

040 vim의 정규표현식(13) 확장 정규 표현식 3

041 vim의 정규표현식(14) 확장 정규 표현식 4

042 vim 범위 지정 명령하기

043 vim 문자열 바꾸기 기본 형식 및 범위와 옵션

044 vim 문자열 바꾸기에서 슬래쉬(/) 및 정규표현식 사용

045 vim 특정 패턴을 조건으로 문자열 바꾸기

046 vim 여러 파일을 열고 버퍼 확인하기

047 여러 파일들 사이에서 움직이기

048 vim 화면 분할하기 수평분할

049 vim 화면 분할하기 수직 분할

050 vim 화면 분할하여 빈 파일 표시

051 화면을 수평 분할하면서 커서가 위치한 단어를 이름으로 하는 파일을 열기

052 복합 화면 분할 후 이동하기

053 다중 화면과 파일 버퍼

054 다중 분할 화면에서 창들간의 위치 전환

055 다중 화면에서 창 크기 조절

056 다중 화면으로 파일 내용 비교

057 탭 페이지 열고 닫기

058 탭 페이지 이동하기

059 원하는 위치를 마킹해서 이동하기1

060 원하는 위치를 마킹해서 이동하기2

061 단축키 만들기-키 매핑(mapping)

062 매크로 사용하기

063 vim에서 셸 명령 사용하기

064 폴딩 기능

065 기타 기능(탭 끼워넣기, 들여쓰기 자동정렬, 자동완성)

066 vi 또는 vim 기초 사용법을 마무리하면서(vim Anki 파일 모음)

원하는 위치를 마킹해서 이동하기


우리가 이동하고 싶은 위치를 마킹하고 해당 위치로 빠르게 이동하면서 작업을 하면 무척 효율적인 작업이 가능해질 것이다.

 

원하는 위치를 마킹하는 방법과 마킹한 위치로 이동하는 방법은 다음과 같다.

 

원하는 위치에 커서를 두고 명령 모드에서 m[임의의 알파벳]

 → 해당 위치를 알파벳으로 마킹


`[마킹한 알파벳] 해당 알파벳이 마킹된 위치이동


작은 따옴표(')와 비슷해 보이는 ` 이 표시는 backquote 또는 backtick 이라고 부른다작은 따옴표(')와는 다르므로 주의해야 한다. 키보드에서는 숫자키 1번 바로 왼쪽에 있는 키이다



마킹할 때 사용하는 알파벳은 대문자인지 소문자인지에 따라서 지역 마킹과 전역 마킹으로 그 성격이 다르다.


알파벳 소문자인 a~z로 마킹하면 지역 마킹이 된다.


지역 마킹이란 같은 파일 내부에서만 마킹한 위치로 이동할 수 있는 마킹이다. , test.txt에서 마킹을 했다면 test.txt 파일에서 작업을 할 때만 마킹한 위치로 이동할 수 있다.

 

알파벳 대문자인 A~Z로 마킹하면 전역 마킹이 된다.


전역 마킹이란 다른 파일에서도 전역 마킹으로 지정된 위치로 이동할 수 있는 마킹이다

서로 다른 파일들 사이에서도 얼마든지 이동이 가능하다는 것이다. 이게 어느 정도 수준이냐면, 전역 마킹으로 지정한 위치는 해당 파일을 별도로 열지 않아도 마킹한 곳으로 이동이 가능하다. 가령, test.txt 파일에 전역 마킹 A로 위치를 지정해 놓았을 때, test.txt 파일을 열지 않아도 다른 파일에서 명령 모드 `A 키를 누르면 test.txt 파일이 열리면서 해당 위치로 이동한다.

 


숫자 0~9로 마킹된 파일 마킹


파일 마킹은 우리가 직접 지정하는 것이 아니라 ~/.viminfo 파일에서 자동으로 지정하는 것으로 vim이 알아서 지정하는 것이다. 우리가 파일 마킹을 할 수는 없지만 명령모드에서 `1과 같이 입력하면 해당 파일로 이동할 수 있다. 

 

 

마킹한 위치와 마킹에 사용된 알파벳들은 파일을 닫아도 그대로 유지되므로 언제든지 재사용할 수 있다. 


이것이 재사용될 수 있는 이유는 해당 마킹에 대한 정보가 .viminfo 파일에 저장되기 때문이다.

 

아래는 .viminfo 파일에 저장된 마킹관련 정보들이다.



 

마킹으로 이동하기에 대한 간단한  사용례는 다음과 같다. 


명령 모드에서 ma 

 → 현재 파일의 현재 커서 위치를 지역 마킹 a지정


명령 모드에서 `a

 → 지역 마킹 a로 지정된 위치이동(, 현재 파일에 지정되어 있을 경우)


명령 모드에서 `4 

 → 파일 마킹 4번의 위치이동(파일이 열려있지 않더라도 해당 파일이 열리면서 화면이 이동한다.)


명령 모드에서 mB 

 → 현재 파일의 현재 커서 위치를 전역 마킹 B지정


명령 모드에서 `B 

 → 전역 마킹 B로 지정된 위치이동(파일이 열려있지 않더라도 해당 파일이 열리면서 화면이 이동한다.)


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



vim의 커서 이동 키


일반적인 텍스트 에디터와 마찬가지로 vim에서도 화살표 키를 눌러 커서를 이동할 수 있다. 그렇지만 vim은 명령 모드에서는 h, j, k, l 키들을 화살표 키처럼 사용할 수 있다


소문자 k =

소문자 h =

소문자 l =

소문자 j =


hjkl 과 화살표를 단순하게 매칭하면 낯설기 때문에 이 키들을 아래처럼 시계방향으로 그려보면 조금 편하게 익숙해진다.


      k()

()h          l()

       j()


화살표 키는 명령 모드와 편집 모드에서 전부 사용할 수는 있지만 hjkl은 명령 모드에서만 사용된다. 그럼, 화살표 키를 쓰는 것이 편하고 더 낫지 않을까?

 

아쉽지만, vim을 공부하다 보면 hjkl과 결합된 단축키가 많이 등장한다. 또, vim에서는 대부분의 명령어 앞에 숫자를 붙여서 동일한 명령을 수회 반복할 수 있는데 이렇게 숫자를 결합해서 쓸 경우에도 hjkl 이 더 유리하다. 마지막으로, hjkl 에 익숙해지면 손이 키보드의 중심에서 벗어나지 않아 빠르고 효율적이 되기 대문에 결국 hjkl에 익숙해지는 것이 좋다.

 

다음의 명령어에서 [n]은 숫자를 의미하며 명령 모드에서 10k, 5l, 3j, 8h 와 같이 키를 누르면 된다.


[n]k 위로 n, 숫자 생략할 경우 1행 이동

[n]l 오른쪽으로 n, 숫자 생략할 경우 1칸 이동

[n]j 아래쪽으로 n, 숫자 생략할 경우 1행 이동

[n]h 왼쪽으로 n, 숫자 생략할 경우 1칸 이동


※ 앞으로 [ ] 대괄호로 감싼 부분은 생략 가능한 옵션을 표시할 때 사용한다. 



Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



vim 모드 전환


앞에서 vim의 모드에 대하여 간단한 포스팅을 올린 바 있다. 그 내용은 명령(command) 모드편집(insert) 모드가 있다는 것이다. 


대부분의 작업은 명령 모드에서 이루어진다. 편집 모드는 글자를 입력하는 역할만 하고, 편집, 수정, 삭제, 각종 명령 등 모두 명령 모드에서 이루어진다. 따라서 vim에서의 작업은 명령 모드와 편집 모드의 끊임없는 전환의 형태로 이루어지고 이것에 익숙해져야 한다. 



편집 모드 → 명령 모드


편집 모드에서 명령 모드로 전환하는 키는 Esc 키다. 그런데 Esc 키가 키보드에서 누르기 어려운 위치에 있으므로 이것을 대체하는 키가 있는데 그것이 바로 <Ctrl+[> 키다. (< >로 묶인 키는 동시에 누른다Ctrl 키를 누른 상태에서 [ 키를 누른다.)


편집 모드에서 Esc 키, <Ctrl+[> 키를 누르면 명령 모드로 전환



명령 모드 → 편집 모드


명령 모드에서 편집 모드로 전환할 때는 필요에 따라 사용할 수 있는 다양한 방식이 있다. 

아래의 사례들은 모두 명령 모드에서 누르는 단축키다. 커서의 위치에 주목해서 살펴보자.


i i(insert)는 현재 커서 위치에서 편집 모드로 전환한다.

I have a dream! i를 누른다.

I have a dream! → 커서의 위치는 바뀌지 않고 편집 모드로 변경


a a(append)는 현재 커서 위치 다음 칸에 첨가되고 편집 모드로 전환

I have a dream! a를 누른다. 

I have a dream! → 커서가 한칸 오른쪽으로 이동해서 편집 모드로 전환


A 현재 커서가 위치한 행의 끝에서 첨가되고, 편집 모드로 전환

I have a dream! A를 누른다.

I have a dream!  → 현재 행의 끝으로 이동해서 첨가


I I는 현재 행의 맨 앞으로 커서가 이동해서 편집 모드로 전환

I have a dream! I를 누른다.

I have a dream! → 현재 행의 맨 처음으로 이동해서 끼워넣기


s 커서가 위치한 글자를 지우고 편집모드로 전환

I have a dream! s를 누른다.

I have a drem→ 커서가 위치한 글자가 지워짐


o o(open line)는 커서가 있는 행 아래에 새로운 행을 만들어 커서를 위치시킨 후 편집 모드로 전환

 

아래의 상황에서 o 키를 누른다.

 

I have a dream!

I want to be an excellent programmer.

 

원래 커서가 있던 행의 아래에 새로운 행이 생기고 커서의 위치가 새로운 행의 처음으로 이동한다. 편집 모드로 전환된다.

 

I have a dream!

   

I want to be an excellent programmer.


O 커서가 있는 행 위에 새로운 행을 만들어 커서를 위치시킨 후 편집 모드로 전환

 

아래의 상황에서 O 키를 누른다.

 

I have a dream!

I want to be an excellent programmer.

 

원래 커서가 있던 행의 위에 새로운 행이 생기고 커서의 위치가 새로운 행의 처음으로 이동한다. 편집 모드로 전환된다.

 

I have a dream!

   

I want to be an excellent programmer.


cc 커서가 위치한 행이 지워지면서 편집 모드로 전환

다음과 같은 상황에서 cc를 누르면 그 행의 내용이 전부 지워지면서 편집모드로 전환

I have a dream!

I want to be an excellent programmer.

 

I have a dream!

                → 기존의 있던 내용이 전부 지워지고 커서가 처음으로 이동되면서 편집모드로 전환


r 명령 모드에서 한 글자만 바꿀 때 사용한다. 한 번 글자키를 눌러 변경하면 다시 명령 모드로 돌아와 입력이 되지 않는다.

 

want → 명령 모드에서 r을 누르고 c를 누르면

cant → 기존의 w자가 c자로 변함



R → 명령 모드에서 R키를 누르면 바꾸기 모드가 되면서 원래 있던 글자를 덮어 쓰면서 입력된다

 


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



vim 실행하기


vim실행하고자 할 때는 프롬프트에서 vim 이라고 입력하면 된다. 특정 파일을 열면서 실행하고 싶다면 vim [열고 싶은 파일 이름] 형식으로 입력하면 된다


$ vim vim 실행

$ vim test.txt  vim이 test.txt 파일을 열면서 실행



vim 종료하기


vim종료하고 싶다면 명령 모드에서 :q 또는 :quit 라고 입력하면 된다. 그러면 명령 라인에 :q 또는 :quit 명령어가 보이게 되고 [Enter] 키를 눌러 입력하면 종료된다. (:q 로 기억하자)


:q


vim을 종료할 때 아무런 변경 사항이 없다면 아무런 문제 없이 종료되겠지만, 변경 사항이 있다면 저장이 되지 않았다는 내용의 에러 메시지가 나오면서 종료가 되지 않는다. 이 경우 저장하지 않고 종료하려면 느낌표(!)q 뒤에 붙여주면 된다. 


:q!


느낌표(!)vim에서 명령을 강제로 실행하라는 의미이다.



vim 파일 저장하기


강제 종료는 부득이한 상황에 하는 것이고 대부분의 경우 제대로 저장을 하고 종료해야 한다. 윈도우즈에서의 저장은 Save지만 vim 계열은 디스크에 쓴다라는 의미에서 Write 라고 한다. 따라서 명령어는 :write 혹은 :w 이다. (:w 로 기억하자)


:w  → 원래 파일 이름으로 저장

:w test.txt  → test.txt라는 이름으로 저장

:w > file.txt → file.txt 파일에 덧붙여 저장


저장하고 종료가 같이 이루어지는 경우가 많다. 그래서 저장 명령인 w 와 종료 명령인 q를 합쳐서 :wq 로 명령하는 경우가 많다. 혹은 명령 모드에서 ZZ 키를 눌러 바로 저장하고 종료할 수 있다. 


:wq → 원래 파일 이름으로 저장하고 종료

:wq test.txt  → test.txt라는 이름으로 저장하고 종료

ZZ → 원래 파일 이름으로 저장하고 종료(명령라인 모드 명령이 아님, 명령 모드에서 대문자 ZZ)



vim 파일 불러오기


마지막으로 vim에서 원하는 파일을 열고 싶을 때:e [파일명] 형식으로 원하는 파일을 불러온다.


:e file.txt file.txt 파일을 불러옴

 


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


004 vim의 실행과 종료 및 파일 불러오기와 저장.apkg


HTML 공부 시작의 변

 

’97대한민국이 사실상 파산하면서 나라가 고꾸라졌다. 그리고 IMF와 함께 나라의 빚을 갚기 위한 일대의 변혁이 시작되었다. 이러한 사태로 대한민국이 뿌리부터 변하는 그 변화의 한 가운데에 있을 때 그러한 변화와는 큰 관계가 없는 군대에 입대하였고 제대할 즈음에는 IMF 구제금융을 털어낸 나라가 다시 엉금엉금 모양새를 갖추면서 부활하고 있었다. 하지만 IMF 이전과 이후로 대한민국은 많은 것이 바뀌었고 그러한 변화와 떨어져 있다가 2년만에 돌아오니 대한민국 사회는 이질적인 느낌을 줄만큼 달라져 있었다.


HTML를 처음 접했던 것은 2000년 군대를 제대한 그 즈음이었다. 당시, 사회는 군대를 들어가기 전 사회와 생활방식과 활기가 많이 달랐다. 그리고 그 배경에는 초고속 인터넷 회선의 보급이 있었고 IT버블로 사람들은 새로운 대박신화에 열광하고 있었다. 인터넷이 보급되면서 홈페이지가 없으면 시대적 흐름에 따라가지 못하는 못난 사람인 것 마냥 사람들은 유행처럼 너도나도 홈페이지를 만들고, 명함에 자신의 홈페이지 주소를 박아놓던 시절이다.

 

전자오락에 미쳐 살던 세대로서 PC방의 등장은 무척 반겼다. 그렇지만 프로그래밍을 배우고 홈페이지 제작을 할 줄 알아야 한다면서 기본적으로 HTML 정도는 해야 한다고 사람들이 입을 모아 말하는 것에는 이상할 정도로 거부감이 들었다. 당시의 나는 컴퓨터와 관련된 일체의 것에 전혀 관심이 없었다. 이러한 내용들이 너무 공허하게 들렸기 때문이다.

 

너도 나도 홈페이지를 제작하지만 그 홈페이지에 올릴 컨텐츠는 없는 시대였다. 사람들은 홈페이지를 만들었지만 내용을 채우는 경우는 드물었다. 그저 사진 한 개만 올라와서 누구누구의 홈페이지라고 표시되어 있는 그런 홈페이지 천지였다. IT 부흥에 따라가는 이러한 태도들이 빈수레처럼 여겨졌고, 개인적으로도 IT를 통해서 무엇을 해보고 싶은 것이 없으니 관심이 있을 리 없다


애석하지만 당시의 나의 선택을 후회한다. IT는 정말 놀아볼만한 공간이기 때문이다. 우리는 인터넷에 포위되어 살고 있다. 이젠 모바일 기기까지 나와서 웹에 접속되지 않은 삶이란 것을 상상하기도 어렵게 되었다. 하지만 IT가 무엇인지 어떻게 작동하는지 잘 모르는 나는 그저 그것을 소비하기에 바쁘다. 잘 몰라도 충분히 즐겁게 소비할 수 있으니 문제는 없다. 하지만 조금 내용을 알면 그저 서비스의 객체가 되는 것에서 벗어나 나를 둘러싼 이 웹의 세계와 적극적으로 연결될 수 있다. 멋진 홈페이지를 보면서 소비자로서는 그저 멋있다는 생각을 하겠지만 조금 알고 보면 디자인과 구조에 대한 영감을 얻을 수 있을 것이다. IT세계의 각종 담론과 발전방향에 대한 논의에도 참여할 수 있을 것이고 스스로의 아이디어를 구현해볼 수도 있을 것이다.


개인적으로는 스스로의 아이디어를 구현한다는 점이 가장 마음에 든다. 그리고 이러한 아이디어를 구현하기 위해서는 그저 프로그래밍만 하면 된다는 점도 마음에 든다. 만일 건축을 하거나 유전자 공학을 하거나 첨단 화학실험을 하려고 하면 자본을 감당할 수 있는 어느 회사에 소속되어서 눈치를 보면서 그것을 구현해야 할 것이다. 하지만 IT는 그렇지 않다. 물론, 대용량의 서버나 수퍼컴퓨터 등이 필요하다면 역시 자본이 필요하겠지만 그럼에도 대부분의 아이디어를 집에서 항상 쓰는 컴퓨터의 수준으로 대략적인 구현이 가능하다. 그리고 구현된 것이 쓸만하다면 바로 시장에 해당 제품을 내놓을 수도 있다. 다른 사람과 아이디어를 공유해볼 수도 있고 같이 예술적인 프로젝트를 해볼 수도 있다. 가능성은 무궁무진하다.


또, 좋은 점은 IT 기술이 어렵지 않다는 것이다. 다른 첨단 기술은 접근하기 위해서 많은 실험과 통찰이 필요하고 고가의 실험장비와 큰 자본이 필요하다. 또한, 자연의 법칙이란 것이 오묘하여 인간의 머리로는 잘 이해하기 어려운 것들도 많이 있다. 하지만 IT기술은 그렇지 않다. 상당히 명백하고 단순하다. 물론, 이 분야도 첨단의 부분에서는 많은 철학적인 고뇌와 성찰이 필요하겠지만 단순히 프로그래밍을 배워서 필요한 것을 구현하는 것은 단순한 구현과 검토의 반복일 뿐이다. 접근성도 좋다. 집에서 항상 사용하는 컴퓨터에서 개발환경을 구축하기만 하면 된다. 오픈소스 소프트웨어를 사용하면 비용도 거의 들지 않는다. 구현 결과는 바로바로 알 수 있고 수정이 가능하다. 


마지막으로는 나이가 들어도 할 수 있다. 육체적인 힘을 많이 쓸 필요도 없고, 여러 사람과 긴밀하게 협업을 할 필요도 상대적으로 적다. 취미라면 혼자서 만들어보면서 놀 수도 있다. 늙어서 몸이 움직이지 않더라도 자판을 두들길 수는 있지 않을까? 그러니 늙어서 잘할 수 있는 것을 지금부터 구축해놓으면 잘 놀다 갈 수 있지 않을까라고 생각하는 것이다치매예방도 될 것이고 말이다.

 

나이 들어서 공부하는 것이니 너무 어렵게 가장 기초적인 내용부터 컴퓨터의 구조와 설계부터 파악해서 쌓아올리는 것은 바람직하지 않을 것 같다. 원래, 본인의 취향은 가장 기초적인 것부터 구축해서 올리는 것이지만 너무 많은 시간과 노력이 필요할 것 같다. 그래서 가장 쉽게 접할 수 있고 많이 활용할 수 있는 것부터 익혀서 천천히 심화시켜 나가는 방식으로 IT 세계를 탐험해보려고 HTML을 IT 공부의 시작으로 정했다.

 

공부하는 방식은 당연히 Anki를 적극 활용하는 방식으로 하려고 한다. 어차피, HTML관련 교재나 문서는 웹상에 풍부하게 있으니 다양한 문서들을 참조하여 공부를 해나가고 그 공부 결과를 요약 정리한 내용을 블로그에 올리고자 한다. 그리고 중요한 내용을 학습할 수 있는 Anki파일을 같이 첨부해서 올릴 계획이므로 같이 공부하고 싶은 사람은 Anki파일을 받아서 같이 공부했으면 좋겠다.

+ Recent posts