카테고리 없음

vim-orgmode 튜토리얼

seul chan 2020. 3. 13. 21:40

Vim org-mode 튜토리얼

나는 Emacs를 써 본 적이 없다. (사실 쓰는 사람도 딱 한 명을 제외하고는 본 적이 없다. 해외로 나간 그 분은 잘 지내시는지..) 하지만 Emacs의 많은 모드에 대해서는 들어본 적이 있다. 그 중에서도 org 모드는 todo list 등 모든 기록을 Emacs로 해 줄 수 있게 하는 모드이다.

vim-orgmode는 이런 orgmode를 vim에서 사용할 수 있게 해 주는 모드이다.

가이드가 [여기](https://github.com/jceb/vim-orgmode/blob/master/doc/orgguide.txt 에 있지만 초심자가 접하기 어렵게 구성되어 있는 것 같아서 간략한 튜토리얼을 작성해본다.

vim의 :help에 익숙하다면 orgmode가 제공하는 각종 help page를 읽어보면 좋다.
:help orgguide 혹은 :help org에서 <C-d>를 입력하면 사용 가능한 헬프 텍스트 목록이 쭉 나온다.

Tutorial

Install

나는 Plug를 사용중이기 때문에 plug를 통해서 설치하였다.

Plug 'jceb/vim-orgmode'

다른 플러그인을 사용중이면 다음 방식으로 설치하면 된다.

  • dein.vim :
call dein#add('jceb/vim-orgmode')
  • pathogen
cd ~/.vim/bundle && \
git clone https://github.com/jceb/vim-orgmode.git
  • vim8에서 제공하는 패키지로 설치하려면 아래처럼..
mkdir -p ~/.vim/pack/git-plugins/start
cd ~/.vim/pack/git-plugins/start
git clone https://github.com/jceb/vim-orgmode

Add config to vimrc

vim 설정 파일 (대부분의 경우 ~/.vimrc)에 다음을 추가해준다.

packloadall
silent! helptags ALL

혹시 plugin 설치 후에 몇몇 플러그인 (speeddating)이 없다는 이야기가 나오면 해당 플러그인을 설치해주면 된다. 딱히 설치하지 않아도 전체적인 기능에는 큰 문제가 없다.

Usage

(처음에 이걸 몰라서 조금 헤맸는데?!) org mode는 .org 형식의 파일에서만 활성화가 된다. mylife.org라는 파일을 만들어서 진행해보자.

cd ~
mkdir vim-org-example
cd vim-org-example
vim mylife.org

Heading

markdown과 다르게, orgmode에서는 *를 통해서 제목을 표시해준다. 간략하게 아래 텍스트를 쳐보거나 복붙해보자

* Top level headline
** Second level
*** 3rd level
  some text
*** 3rd level
  more text

추가한 header에 커서를 두고 Tab/Shift + tab을 눌러보면 자동으로 fold가 되는 것을 볼 수 있다. [tab], [s-tab]을 눌러보며 이것저것 테스트 해보자

Top level에서 Tab을 누르면 아레 모든 하위 level이 한 번에 접힌다.

해당 파일을 저장하고 다시 열어보면 folding이 자동으로 적용되어 있다. 다시 열고 싶으면 io로 insert mode에 진입하거나 Tab을 눌러주면 된다.

해당 탭이 아니라 전체 cycle은 <LocalLeader>, , <LocalLeader>. 로 사용 가능하다.

가 설정되어 있지 않다면 vim 설정에 추가해주어야 한다.
localleader 추가 방법은 여기를 참고하면 됨

vimwiki에서는 Tab이 다음 링크로 이동하는 주요 키였는데, vim-orgmode에서는 fold인 것이 특이하다. 서로 주요 기능이라고 생각하는 것들이 확연히 다르다는 것을 느낄 수 있다

Change structure

header의 모양을 바꾸거나 수정하는 단축키들도 많이 있다. 개인적으로는 크게 유용하게 쓰이지는 않는데.. 필요할 때 찾아서 사용하도록 하자.

  • <S-CR> (Shift + Enter) : 현재 커서가 있는 해당 위치와 동일한 header를 생성한다.

  • (normal mode) >> or (insert mode) <C-t>: 해당 header를 한 칸 밀어낸다 (H1 -> H2).

    개인적으로는 indentation 단축키 >>가 여기에 매핑되어서 마음에 안든다. 거슬리면 변경해서 사용해야할듯
    심지어 <C-t>는 많은 사람들이 tmux binding으로 변경해서 사용할텐데...

  • (normal mode) << or (insert mode) <C-d>: 해당 header를 한 칸 땡긴다 (H2 -> H1)

  • 그 이외 다양한 명령어들...

  <[[                   Promote the current subtree by one level.

                                                                  *orgguide->]]*
  >]]                   Demote the current subtree by one level.

                                                                   *orgguide-m{*
  m{                    Move heading up (swap with previous/next subtree of
                        same level).

                                                                   *orgguide-m}*
  m}                    Move heading down (swap with previous/next subtree of
                        same level).

                                                                  *orgguide-m[[*
  m[[                   Move subtree up (swap with previous/next subtree of
                        same level).

                                                                  *orgguide-m]]*
  m]]                   Move subtree down (swap with previous/next subtree of
                        same level).

링크

  • 다음 포멧으로 작성하면 예쁘게(?) 꾸며준다. 파일도 해당 경로 (상대, 절대경로 모두 가능)를 작성해주면 된다
# external link
[[http://www.vim.org/][VIM]]
# file link
[[file:/home/dominik/images/jupiter.jpg][jupiter.jpg]]
  • gil: 링크 작성하는 명령어. 위의 문법을 거치지 않고 vim command로 쉽게 작성이 가능하다.

TODO list

orgmode를 사용하는 많은 사람들이 todo list를 사용한다. 나도 vimwiki에서 todo list를 사용하는데, 기능이 조금 아쉬워서 개인적으로 orgmode에 기대하는 기능이다.

다음과 같이 TODO와 함께 사용하면 된다

*** TODO Write letter to Sam Fortune

상태 변경은 <localleader>ct 로 가능하다. TODO -> DONE 순으로 변경된다.

상태를 추가하고 싶으면 org_todo_keywords로 추가가 가능하다. 해당 파일에서 다음 명령어를 실행한 후 <localleader>ct로 변경된 상태를 확인할 수 있다.

:let g:org_todo_keywords=['TODO', 'FEEDBACK', 'VERIFY', '|', 'DONE', 'DELEGATED']

필요한 경우 동일하게 ~/.vimrc에 추가해주면 된다.

많은 상태가 있는데 조금 더 빠르게 상태를 변경하고 싶다면 <localleader>d로 프롬프트 창을 띄울 수 있다. 해당 상태로 이동한 후 엔터를 치면 해당 상태로 바로 변경 된다.

Checkbox

TODO 리스트로 체크박스도 사용이 가능하다.

* TODO Organize party [1/3]
  - [-] call people [1/2]
    - [ ] Peter
    - [X] Sarah
  - [X] order food
  - [ ] think about what music to play

Peter 라인에서 <localleader>cc를 입력하면 해당 체크박스가 체크가 되고 [1/2] 안에 숫자도 자동으로 변하는 것을 볼 수 있따

* TODO Organize party [2/3]
  - [X] call people [2/2]
    - [X] Peter
    - [X] Sarah
  - [X] order food
  - [ ] think about what music to play

요렇게...

새로운 체크박스를 추가하려면 복사/붙여넣기를 해도 되지만 <CR> (Enter)를 입력하면 쉽게 추가가 가능하다. (단축키로 <localleader>cn으로도 추가 가능하다.)

위 줄에 추가하려면 <localleader>cN으로 가능하다.

Tag

이것도 orgmode가 제공하는 강력한 기능. ThingsTodoist 등 많은 체크리스트에서 제공하는 기능이다.

태그는 <localleader>st로 추가 가능하다. 추가된 태그는 해당 라인 옆에 :home: 과 같은 형태로 추가된다.

<localleader>ft로 해당 태그를 찾을 수 있따.

timestamp, agenda views, exporting 등 추가 기능은 다른 포스트에서 추가할 예정이다.