Playground
Try org.nvim in your browser
Watch each lesson of the built-in tutor, :Org tutor, played in a real Neovim, with captions. Pause, scrub, jump to any exercise and copy text off the screen, or turn on Follow along and press the keys yourself. The keys are org.nvim's defaults, with the leader key on Space.
- 8 lessons
- 93 exercises
- 16 minutes
- Nothing to install
org.nvim tutor 1: the basics
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 16
- Welcome0:00
Welcome to org.nvim! This is a working copy of the tutor, a normal org file: every key of org.nvim works here, and you learn by doing.
Try it in Neovim
:Org tutor basics - Fold and unfold0:07
Put the cursor on the
Kitchenheadline below and press<Tab>a few times: it cycles the subtree between folded, its children and everything.<S-Tab>does the same for the whole file (press it until everything shows again).The ✓ shows once
Kitchenhas been folded (a moment after).Keys <Tab> <Tab> <Tab> <S-Tab> <S-Tab> <S-Tab>
Try it in Neovim
:Org tutor basics - Insert a headline0:20
Put the cursor on
Applesand press<M-CR>: a new headline of the same level opens, in Insert mode (above when the cursor is at the start of the line, else below). TypePearsand press<Esc>.<leader>oihdoes the same.Keys <M-CR> Pears <Esc>
Try it in Neovim
:Org tutor basics - Promote and demote0:28
>>moves a headline one level down and<<one level up (>sand<stake its subtree along).Make
Carrota child ofVegetables(demote it), andSpoona child ofDrawer(promote it).Keys >> <<
Try it in Neovim
:Org tutor basics - Move a subtree0:38
<M-k>and<M-j>move the subtree at the cursor past its siblings. Put the days below in order: Monday, Tuesday, Wednesday.Keys <M-j>
Try it in Neovim
:Org tutor basics - Finish a task0:46
Put the cursor on
Buy milkand presscit: TODO becomes DONE.<S-Right>and<S-Left>cycle the keyword too.Keys cit
Try it in Neovim
:Org tutor basics - Start a task0:54
Turn
Write a letterinto a TODO item withcit.Keys cit
Try it in Neovim
:Org tutor basics - Set a priority1:02
Put the cursor on
Pay rent, press<leader>o,and thenA.<S-Up>and<S-Down>raise and lower a priority.Keys <leader>o, A
Try it in Neovim
:Org tutor basics - Tag a headline1:10
Put the cursor on
Prepare slides, press<leader>ot, typeworkand press<CR>.Keys <leader>ot work <CR>
Try it in Neovim
:Org tutor basics - Schedule a task1:18
Put the cursor on
Water the plants, press<leader>osand accept a date.Keys <leader>os <CR>
Try it in Neovim
:Org tutor basics - Set a deadline1:26
Put the cursor on
File the tax return, press<leader>odand accept a date. On a date,<S-Right>and<S-Left>move it a day, and<S-Up>/<S-Down>change the part under the cursor.Keys <leader>od <CR>
Try it in Neovim
:Org tutor basics - Add a list item1:33
Put the cursor on
Breadand press<M-CR>: a new item opens below. TypeButterand press<Esc>.Keys <M-CR> Butter <Esc>
Try it in Neovim
:Org tutor basics - Check a checkbox1:42
Put the cursor on
Eggsand press<C-c><C-c>(or<C-Space>). The[0/2]cookie counts the checked items.Keys <C-c><C-c>
Try it in Neovim
:Org tutor basics - Align a table1:50
Put the cursor anywhere in the table and press
<C-c><C-c>.Keys <C-c><C-c>
Try it in Neovim
:Org tutor basics - Add a row1:58
Put the cursor on the
Lemonrow, pressAfor Insert mode at its end and then<Tab>: past the last field a new row opens. TypeKiwi, press<Tab>, type5, and leave Insert mode with<Esc>.<Tab>aligns the table as it goes.Keys A <Tab> Kiwi <Tab> 5 <Esc>
Try it in Neovim
:Org tutor basics - Insert a link2:08
Put the cursor at the end of the
Mapline below, press<leader>oli, type*Treasure chestas the link andthe treasureas the description.Map:
Keys $ <leader>oli *Treasure chest <CR> the treasure <CR> <Esc>
Try it in Neovim
:Org tutor basics - Follow a link2:23
Put the cursor on the link you made and press
<CR>: the cursor jumps toTreasure chest.<leader>olsstores a link to where you are, for<leader>olito offer later.Keys <CR>
Try it in Neovim
:Org tutor basics
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
Welcome to org.nvim! This is a working copy of the tutor, a normal org file: every key of org.nvim works here, and you learn by doing.
- A real org file: do each exercise and a ✓ appears on its headline.
1.1 Fold and unfold
Put the cursor on the
Kitchenheadline below and press<Tab>a few times: it cycles the subtree between folded, its children and everything.<S-Tab>does the same for the whole file (press it until everything shows again).The ✓ shows once
Kitchenhas been folded (a moment after).Keys <Tab> <Tab> <Tab> <S-Tab> <S-Tab> <S-Tab>
- <Tab> on a headline cycles it: folded, its children, everything.
- <S-Tab> does the same for the whole file.
* Lesson 1: the outline An org file is an outline: a line that starts with stars is a headline, and the number of stars is its level. Everything under a headline, up to the next one of the same or a higher level, is its subtree. ** 1.1 Fold and unfold ✓ Put the cursor on the =Kitchen= headline below and press =<Tab>= a few times: it cycles the subtree between folded, its children and everything. =<S-Tab>= does the same for the whole file (press it until everything shows again). The ✓ shows once =Kitchen= has been folded (a moment after). *** Kitchen **** Pots Two big ones and a small one. **** Pans A frying pan. ** 1.2 Insert a headline ✗ Put the cursor on =Apples= and press =<M-CR>=: a new headline basics.org 25:1 SHOW ALL
1.2 Insert a headline
Put the cursor on
Applesand press<M-CR>: a new headline of the same level opens, in Insert mode (above when the cursor is at the start of the line, else below). TypePearsand press<Esc>.<leader>oihdoes the same.Keys <M-CR> Pears <Esc>
- <M-CR> opens a new headline below, in Insert mode.
** 1.2 Insert a headline ✓ Put the cursor on =Apples= and press =<M-CR>=: a new headline of the same level opens, in Insert mode (above when the cursor is at the start of the line, else below). Type =Pears= and press =<Esc>=. =<leader>oih= does the same. *** Fruit **** Apples **** Pears **** Bananas ** 1.3 Promote and demote ✗ =>>= moves a headline one level down and =<<= one level up (=>s= and =<s= take its subtree along). Make =Carrot= a child of =Vegetables= (demote it), and =Spoon= a child of =Drawer= (promote it). *** Vegetables *** Carrot basics.org 52:10 SHOW ALL
1.3 Promote and demote
>>moves a headline one level down and<<one level up (>sand<stake its subtree along).Make
Carrota child ofVegetables(demote it), andSpoona child ofDrawer(promote it).Keys >> <<
- >> demotes a headline one level.
- << promotes it one level up.
** 1.3 Promote and demote ✓ =>>= moves a headline one level down and =<<= one level up (=>s= and =<s= take its subtree along). Make =Carrot= a child of =Vegetables= (demote it), and =Spoon= a child of =Drawer= (promote it). *** Vegetables **** Carrot *** Drawer **** Spoon ** 1.4 Move a subtree ✗ =<M-k>= and =<M-j>= move the subtree at the cursor past its siblings. Put the days below in order: Monday, Tuesday, Wednesday. *** Tuesday *** Monday *** Wednesday basics.org 66:6 SHOW ALL
1.4 Move a subtree
<M-k>and<M-j>move the subtree at the cursor past its siblings. Put the days below in order: Monday, Tuesday, Wednesday.Keys <M-j>
- <M-j> moves the subtree down, past its next sibling.
** 1.4 Move a subtree ✓ =<M-k>= and =<M-j>= move the subtree at the cursor past its siblings. Put the days below in order: Monday, Tuesday, Wednesday. *** Monday *** Tuesday *** Wednesday * Lesson 2: TODO items and priorities A headline becomes a task when it starts with a TODO keyword. This file uses =TODO= and =DONE= (the =#+TODO:= line at the top). ** 2.1 Finish a task ✗ Put the cursor on =Buy milk= and press =cit=: TODO becomes DONE. =<S-Right>= and =<S-Left>= cycle the keyword too. *** TODO Buy milk ** 2.2 Start a task ✗ basics.org 74:5 SHOW ALL
2.1 Finish a task
Put the cursor on
Buy milkand presscit: TODO becomes DONE.<S-Right>and<S-Left>cycle the keyword too.Keys cit
- cit cycles the keyword: TODO becomes DONE.
** 2.1 Finish a task ✓ Put the cursor on =Buy milk= and press =cit=: TODO becomes DONE. =<S-Right>= and =<S-Left>= cycle the keyword too. *** DONE Buy milk ** 2.2 Start a task ✗ Turn =Write a letter= into a TODO item with =cit=. *** Write a letter ** 2.3 Set a priority ✗ Put the cursor on =Pay rent=, press =<leader>o,= and then =A=. =<S-Up>= and =<S-Down>= raise and lower a priority. *** TODO Pay rent * Lesson 3: tags Tags go at the end of a headline, between colons: =:work:home:=. basics.org 86:10 SHOW ALL
2.2 Start a task
Turn
Write a letterinto a TODO item withcit.Keys cit
- The same key makes a plain headline a TODO item.
** 2.2 Start a task ✓ Turn =Write a letter= into a TODO item with =cit=. *** TODO Write a letter ** 2.3 Set a priority ✗ Put the cursor on =Pay rent=, press =<leader>o,= and then =A=. =<S-Up>= and =<S-Down>= raise and lower a priority. *** TODO Pay rent * Lesson 3: tags Tags go at the end of a headline, between colons: =:work:home:=. ** 3.1 Tag a headline ✗ Put the cursor on =Prepare slides=, press =<leader>ot=, type =work= and press =<CR>=. *** TODO Prepare slides * Lesson 4: dates basics.org 91:5 SHOW ALL
2.3 Set a priority
Put the cursor on
Pay rent, press<leader>o,and thenA.<S-Up>and<S-Down>raise and lower a priority.Keys <leader>o, A
- <leader>o, asks for a priority: A is the highest.
** 2.3 Set a priority ✓ Put the cursor on =Pay rent=, press =<leader>o,= and then =A=. =<S-Up>= and =<S-Down>= raise and lower a priority. *** TODO [#A] Pay rent * Lesson 3: tags Tags go at the end of a headline, between colons: =:work:home:=. ** 3.1 Tag a headline ✗ Put the cursor on =Prepare slides=, press =<leader>ot=, type =work= and press =<CR>=. *** TODO Prepare slides * Lesson 4: dates A headline can be scheduled (the day you plan to work on it) or have a deadline. The date prompt takes a date like =2026-10-12=, =+3= (in three days), =fri= or nothing (today); =<CR>= accepts it. ** 4.1 Schedule a task ✗ basics.org 97:10
3.1 Tag a headline
Put the cursor on
Prepare slides, press<leader>ot, typeworkand press<CR>.Keys <leader>ot work <CR>
- <leader>ot asks for tags: type one and press <CR>.
** 3.1 Tag a headline ✓ Put the cursor on =Prepare slides=, press =<leader>ot=, type =work= and press =<CR>=. *** TODO Prepare slides :work: * Lesson 4: dates A headline can be scheduled (the day you plan to work on it) or have a deadline. The date prompt takes a date like =2026-10-12=, =+3= (in three days), =fri= or nothing (today); =<CR>= accepts it. ** 4.1 Schedule a task ✗ Put the cursor on =Water the plants=, press =<leader>os= and accept a date. *** TODO Water the plants ** 4.2 Set a deadline ✗ Put the cursor on =File the tax return=, press =<leader>od= and accept a date. On a date, =<S-Right>= and =<S-Left>= move it a day, and =<S-Up>= / =<S-Down>= change the basics.org 106:10 Tags: work
4.1 Schedule a task
Put the cursor on
Water the plants, press<leader>osand accept a date.Keys <leader>os <CR>
- <leader>os opens the date prompt; <CR> takes today.
** 4.1 Schedule a task ✓ Put the cursor on =Water the plants=, press =<leader>os= and accept a date. *** TODO Water the plants SCHEDULED: <2026-10-12 Mon> ** 4.2 Set a deadline ✗ Put the cursor on =File the tax return=, press =<leader>od= and accept a date. On a date, =<S-Right>= and =<S-Left>= move it a day, and =<S-Up>= / =<S-Down>= change the part under the cursor. *** TODO File the tax return * Lesson 5: lists and checkboxes Lines starting with =-=, =+= or =1.= are list items. =[ ]= makes an item a checkbox. ** 5.1 Add a list item ✗ Put the cursor on =Bread= and press =<M-CR>=: a new item basics.org 117:10 Tags: work
4.2 Set a deadline
Put the cursor on
File the tax return, press<leader>odand accept a date. On a date,<S-Right>and<S-Left>move it a day, and<S-Up>/<S-Down>change the part under the cursor.Keys <leader>od <CR>
- <leader>od adds a DEADLINE the same way.
** 4.2 Set a deadline ✓ Put the cursor on =File the tax return=, press =<leader>od= and accept a date. On a date, =<S-Right>= and =<S-Left>= move it a day, and =<S-Up>= / =<S-Down>= change the part under the cursor. *** TODO File the tax return DEADLINE: <2026-10-12 Mon> * Lesson 5: lists and checkboxes Lines starting with =-=, =+= or =1.= are list items. =[ ]= makes an item a checkbox. ** 5.1 Add a list item ✗ Put the cursor on =Bread= and press =<M-CR>=: a new item opens below. Type =Butter= and press =<Esc>=. - Milk - Bread ** 5.2 Check a checkbox ✗ basics.org 126:10 Tags: work
5.1 Add a list item
Put the cursor on
Breadand press<M-CR>: a new item opens below. TypeButterand press<Esc>.Keys <M-CR> Butter <Esc>
- In a list, <M-CR> adds an item below.
** 5.1 Add a list item ✓ Put the cursor on =Bread= and press =<M-CR>=: a new item opens below. Type =Butter= and press =<Esc>=. - Milk - Bread - Butter ** 5.2 Check a checkbox ✗ Put the cursor on =Eggs= and press =<C-c><C-c>= (or =<C-Space>=). The =[0/2]= cookie counts the checked items. - Shopping [0/2] - [ ] Eggs - [ ] Flour * Lesson 6: tables A table is lines that start with =|=. You don't have to line the columns up yourself. ** 6.1 Align a table ✗ basics.org 139:8 Tags: work
5.2 Check a checkbox
Put the cursor on
Eggsand press<C-c><C-c>(or<C-Space>). The[0/2]cookie counts the checked items.Keys <C-c><C-c>
- <C-c><C-c> ticks the checkbox; the cookie counts the ticks.
** 5.2 Check a checkbox ✓ Put the cursor on =Eggs= and press =<C-c><C-c>= (or =<C-Space>=). The =[0/2]= cookie counts the checked items. - Shopping [1/2] - [X] Eggs - [ ] Flour * Lesson 6: tables A table is lines that start with =|=. You don't have to line the columns up yourself. ** 6.1 Align a table ✗ Put the cursor anywhere in the table and press =<C-c><C-c>=. | Fruit | Count | |- | Apple | 3 | | Orange | 12 | ** 6.2 Add a row ✗ basics.org 146:9 Tags: work
6.1 Align a table
Put the cursor anywhere in the table and press
<C-c><C-c>.Keys <C-c><C-c>
- <C-c><C-c> in a table lines its columns up.
** 6.1 Align a table ✓ Put the cursor anywhere in the table and press =<C-c><C-c>=. | Fruit | Count | |--------+-------| | Apple | 3 | | Orange | 12 | ** 6.2 Add a row ✗ Put the cursor on the =Lemon= row, press =A= for Insert mode at its end and then =<Tab>=: past the last field a new row opens. Type =Kiwi=, press =<Tab>=, type =5=, and leave Insert mode with =<Esc>=. =<Tab>= aligns the table as it goes. | Fruit | Count | |-------+-------| | Pear | 7 | | Lemon | 2 | * Lesson 7: links basics.org 158:3 Tags: work
6.2 Add a row
Put the cursor on the
Lemonrow, pressAfor Insert mode at its end and then<Tab>: past the last field a new row opens. TypeKiwi, press<Tab>, type5, and leave Insert mode with<Esc>.<Tab>aligns the table as it goes.Keys A <Tab> Kiwi <Tab> 5 <Esc>
- In Insert mode, <Tab> past the last field opens a new row.
** 6.2 Add a row ✓ Put the cursor on the =Lemon= row, press =A= for Insert mode at its end and then =<Tab>=: past the last field a new row opens. Type =Kiwi=, press =<Tab>=, type =5=, and leave Insert mode with =<Esc>=. =<Tab>= aligns the table as it goes. | Fruit | Count | |-------+-------| | Pear | 7 | | Lemon | 2 | | Kiwi | 5 | * Lesson 7: links A link is written =[[target][description]]=; only the description shows. ** 7.1 Insert a link ✗ Put the cursor at the end of the =Map= line below, press =<leader>oli=, type =*Treasure chest= as the link and =the treasure= as the description. basics.org 172:15 Tags: work
7.1 Insert a link
Put the cursor at the end of the
Mapline below, press<leader>oli, type*Treasure chestas the link andthe treasureas the description.Map:
Keys $ <leader>oli *Treasure chest <CR> the treasure <CR> <Esc>
- <leader>oli asks for the link, then for its description.
** 7.1 Insert a link ✓ Put the cursor at the end of the =Map= line below, press =<leader>oli=, type =*Treasure chest= as the link and =the treasure= as the description. Map:the treasure *** Treasure chest You found it. ** 7.2 Follow a link ✗ Put the cursor on the link you made and press =<CR>=: the cursor jumps to =Treasure chest=. =<leader>ols= stores a link to where you are, for =<leader>oli= to offer later. * What next Well done! Continue with the second lesson, capture, the agenda and clocking: =:Org tutor workflow= basics.org 182:35 Description: the treasure
7.2 Follow a link
Put the cursor on the link you made and press
<CR>: the cursor jumps toTreasure chest.<leader>olsstores a link to where you are, for<leader>olito offer later.Keys <CR>
- <CR> on a link follows it: here, to a headline.
Map:the treasure *** Treasure chest You found it. ** 7.2 Follow a link ✓ Put the cursor on the link you made and press =<CR>=: the cursor jumps to =Treasure chest=. =<leader>ols= stores a link to where you are, for =<leader>oli= to offer later. * What next Well done! Continue with the second lesson, capture, the agenda and clocking: =:Org tutor workflow= - =g?= lists every key; =:h org= is the manual. - examples/00-index.org links to one file per feature, each with many examples and exercises. ✓ Next lesson: 2. Capture, agenda and clocking (:Org tutor workflow) basics.org 184:1 Tutor "basics" done! Next lesson: 2. Capture, agenda and clocking (:Org tutor wo rkflow)
The lesson: tutor/org/basics.org · the recording: basics.cast (asciicast v2)
org.nvim tutor 2: capture, agenda and clocking
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 5
- Welcome0:00
This second lesson shows how org.nvim fits into a day: catching ideas with capture, seeing what is due in the agenda, and timing your work. It assumes you know the keys of the first lesson (
:Org tutor basics).Try it in Neovim
:Org tutor workflow - Capture a task0:07
Put the cursor on the
Inboxheadline below and run:Org capture_here. Pick a template (twhen you have none of your own), type a title such asCall Bob, then press<C-c><C-c>to file it (<C-c><C-k>cancels).Keys :Org capture_here<CR> t Call Bob <Esc> <C-c><C-c>
Try it in Neovim
:Org tutor workflow - Mark a task done from the agenda0:20
In this file, press
<leader>oa, then<andt. The agenda lists the TODO items of this file. Move toCall the dentistand presst: it becomes DONE, here as well.qcloses the agenda.Keys <leader>oa < t t q
Try it in Neovim
:Org tutor workflow - See a scheduled task in the week0:32
Schedule
Water the plantsfor today with<leader>os(press<CR>at the date prompt). Then open the week agenda for this file:<leader>oa,<,a. In the agenda,fandbgo a week forward and back,<Tab>jumps to the entry.Keys <leader>os <CR> <leader>oa < a q
Try it in Neovim
:Org tutor workflow - Clock in and out0:43
Put the cursor on
Write the reportand press<leader>oxi. Wait a moment, then press<leader>oxo(it works from any buffer, and<leader>oxjjumps back to the clocked task). A:LOGBOOK:drawer with aCLOCK:line appears under the headline.Keys <leader>oxi <leader>oxo <Tab>
Try it in Neovim
:Org tutor workflow - Report the time0:56
Put the cursor on the
Time spentheadline and press<leader>oxr: a clock table appears below it. It sums the time clocked under this headline (:scope subtree), so it shows nothing yet. On its#+BEGIN:line changesubtreetofileand press<C-c><C-c>there: the table now sums every clock of this file, 3.1's task included.Keys <leader>oxr zv ciw file <Esc> <C-c><C-c>
Try it in Neovim
:Org tutor workflow
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
This second lesson shows how org.nvim fits into a day: catching ideas with capture, seeing what is due in the agenda, and timing your work. It assumes you know the keys of the first lesson (
:Org tutor basics).- Capture, the agenda and the clock, all tried out in this one file.
1.1 Capture a task
Put the cursor on the
Inboxheadline below and run:Org capture_here. Pick a template (twhen you have none of your own), type a title such asCall Bob, then press<C-c><C-c>to file it (<C-c><C-k>cancels).Keys :Org capture_here<CR> t Call Bob <Esc> <C-c><C-c>
- :Org capture_here files a capture at the cursor; t picks a template.
- <C-c><C-c> files the entry under Inbox.
** 1.1 Capture a task ✓ Put the cursor on the =Inbox= headline below and run =:Org capture_here=. Pick a template (=t= when you have none of your own), type a title such as =Call Bob=, then press =<C-c><C-c>= to file it (=<C-c><C-k>= cancels). *** Inbox *** TODO Call Bob [2026-10-12 Mon] Inbox * Lesson 2: the agenda The agenda collects the TODO items and dates of your agenda files (=agenda_files=). =<leader>oa= opens its menu. Press =<= in the menu to restrict it to the current file, then the key of a view: =a= for the week, =t= for every TODO item. ** 2.1 Mark a task done from the agenda ✗ In this file, press =<leader>oa=, then =<= and =t=. The agenda lists the TODO items of this file. Move to =Call the dentist= and press =t=: it becomes DONE, here as well. =q= workflow.org 31:5 Captured to ~/.local/share/nvim/org/tutor/workflow.org
2.1 Mark a task done from the agenda
In this file, press
<leader>oa, then<andt. The agenda lists the TODO items of this file. Move toCall the dentistand presst: it becomes DONE, here as well.qcloses the agenda.Keys <leader>oa < t t q
- <leader>oa opens the agenda menu; < limits it to this file.
- t marks the task DONE, in its file as well.
** 2.1 Mark a task done from the agenda ✓ In this file, press =<leader>oa=, then =<= and =t=. The agenda lists the TODO items of this file. Move to =Call the dentist= and press =t=: it becomes DONE, here as well. =q= closes the agenda. *** DONE Call the dentist *** TODO Book a table for Friday ** 2.2 See a scheduled task in the week ✗ Schedule =Water the plants= for today with =<leader>os= (press =<CR>= at the date prompt). Then open the week agenda for this file: =<leader>oa=, =<=, =a=. In the agenda, =f= and =b= go a week forward and back, =<Tab>= jumps to the entry. *** TODO Water the plants * Lesson 3: clocking The clock records the time you spend on a task in a =CLOCK:= line under it. Only one task is clocked at a time: clocking in here clocks out any workflow.org 42:1 Lesson 2: the agenda/2.1 Mark a task done from the agenda/Call the dentist
2.2 See a scheduled task in the week
Schedule
Water the plantsfor today with<leader>os(press<CR>at the date prompt). Then open the week agenda for this file:<leader>oa,<,a. In the agenda,fandbgo a week forward and back,<Tab>jumps to the entry.Keys <leader>os <CR> <leader>oa < a q
- Schedule it for today, then find it in the week agenda: a.
** 2.2 See a scheduled task in the week ✓ Schedule =Water the plants= for today with =<leader>os= (press =<CR>= at the date prompt). Then open the week agenda for this file: =<leader>oa=, =<=, =a=. In the agenda, =f= and =b= go a week forward and back, =<Tab>= jumps to the entry. *** TODO Water the plants SCHEDULED: <2026-10-12 Mon> * Lesson 3: clocking The clock records the time you spend on a task in a =CLOCK:= line under it. Only one task is clocked at a time: clocking in here clocks out any other task you clocked in. ** 3.1 Clock in and out ✗ Put the cursor on =Write the report= and press =<leader>oxi=. Wait a moment, then press =<leader>oxo= (it works from any buffer, and =<leader>oxj= jumps back to the clocked task). A =:LOGBOOK:= drawer with a =CLOCK:= line appears under the headline. workflow.org 58:10
3.1 Clock in and out
Put the cursor on
Write the reportand press<leader>oxi. Wait a moment, then press<leader>oxo(it works from any buffer, and<leader>oxjjumps back to the clocked task). A:LOGBOOK:drawer with aCLOCK:line appears under the headline.Keys <leader>oxi <leader>oxo <Tab>
- <leader>oxi starts the clock on a task, <leader>oxo stops it.
- The time goes in a CLOCK line, in the LOGBOOK drawer.
** 3.1 Clock in and out ✓ Put the cursor on =Write the report= and press =<leader>oxi=. Wait a moment, then press =<leader>oxo= (it works from any buffer, and =<leader>oxj= jumps back to the clocked task). A =:LOGBOOK:= drawer with a =CLOCK:= line appears under the headline. *** TODO Write the report :LOGBOOK: CLOCK: [2026-10-12 Mon 09:00]--[2026-10-12 Mon 09:25] => 0:25 :END: ** 3.2 Report the time ✗ Put the cursor on the =Time spent= headline and press =<leader>oxr=: a clock table appears below it. It sums the time clocked under this headline (=:scope subtree=), so it shows nothing yet. On its =#+BEGIN:= line change =subtree= to =file= and press =<C-c><C-c>= there: the table now sums every clock of this file, 3.1's task included. *** Time spent workflow.org 73:1 Clock stopped at [2026-10-12 Mon 09:25] after 0:25
3.2 Report the time
Put the cursor on the
Time spentheadline and press<leader>oxr: a clock table appears below it. It sums the time clocked under this headline (:scope subtree), so it shows nothing yet. On its#+BEGIN:line changesubtreetofileand press<C-c><C-c>there: the table now sums every clock of this file, 3.1's task included.Keys <leader>oxr zv ciw file <Esc> <C-c><C-c>
- <leader>oxr inserts a clock table of this subtree.
- Make its scope the file, then <C-c><C-c> updates it.
** 3.2 Report the time ✓ Put the cursor on the =Time spent= headline and press =<leader>oxr=: a clock table appears below it. It sums the time clocked under this headline (=:scope subtree=), so it shows nothing yet. On its =#+BEGIN:= line change =subtree= to =file= and press =<C-c><C-c>= there: the table now sums every clock of this file, 3.1's task included. *** Time spent #+BEGIN: clocktable :scope file :maxlevel 2 #+CAPTION: Clock summary at [2026-10-12 Mon 09:25] | Headline | Time | | |--------------------------+--------+------| | *Total time* | *0:25* | | |--------------------------+--------+------| | Lesson 3: clocking | 0:25 | | | \_ 3.1 Clock in and out | | 0:25 | #+END: * What next That's the tour. From here: workflow.org 86:31 Tutor "workflow" done! Next lesson: 3. Writing in org (:Org tutor writing)
The lesson: tutor/org/workflow.org · the recording: workflow.cast (asciicast v2)
org.nvim tutor 3: writing in org
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 11
- Welcome0:00
An org file is mostly text. This lesson shows how to write it: bold and italic words, paragraphs, keywords, blocks of quotes and code, and footnotes. It assumes the keys of the first lesson (
:Org tutor basics).Try it in Neovim
:Org tutor writing - Make a word bold0:07
Select the word
importantwithviwand press<leader>oE, then*: the markers go around the selection. Any marker of the six works the same way.This step is important for the rest.
Keys viw <leader>oE *
Try it in Neovim
:Org tutor writing - Type in italics0:17
With nothing selected,
<leader>oEputs a pair of markers at the cursor and leaves you typing between them. On the empty line belowNotes:, press<leader>oEand/, typein italicsand press<Esc>.Notes:
Keys j <leader>oE / in italics <Esc>
Try it in Neovim
:Org tutor writing - Fill a paragraph0:28
The paragraph below is one long line. Put the cursor on it and press
gqip: it is filled, broken into lines no wider than'textwidth'(79 when it is 0). In a list item or a comment, the filling keeps the indentation or the#.Org files are plain text, so you can read them anywhere, edit them in any editor, keep them in version control and still find your notes in twenty years.
Keys gqip
Try it in Neovim
:Org tutor writing - Draw a horizontal rule0:36
A line of five dashes or more is a horizontal rule. Put the cursor on
First part, presso, type-----and press<Esc>.First part.
Second part.
Keys o ----- <Esc>
Try it in Neovim
:Org tutor writing - Comment out a line0:45
A line that starts with
#and a space is a comment: it stays in the file but is never exported. Put the cursor onDraft:and pressgcc(Vim's comment key) to comment it out;gccagain brings it back.Draft: remember to check the numbers.
Keys gcc
Try it in Neovim
:Org tutor writing - Add a keyword0:53
This file starts with
#+TITLE:. Pressggto go there, pressoand type#+AUTHOR: Ada(or your name), then<Esc>. Exports put the author under the title.Keys gg o #+AUTHOR: Ada <Esc>
Try it in Neovim
:Org tutor writing - Quote a paragraph1:02
Select the two lines of the poem with
Vjand press<leader>oib: a menu of block types opens. Pressqand the lines are wrapped in a quote block.emakes an example block,sa source block,va verse.Hope is the thing with feathers That perches in the soul
Keys Vj <leader>oib q
Try it in Neovim
:Org tutor writing - Insert a source block1:12
On the empty line below
Code:, press<leader>oibands. The cursor waits after#+begin_srcfor the language: typepython, press<CR>and typeprint("hello"), then<Esc>.Code:
Keys j <leader>oib s python <CR> print("hello") <Esc>
Try it in Neovim
:Org tutor writing - Edit code in its own window1:25
Put the cursor on
helloin the block below and press<leader>o': the code opens in a window of its own, set up for its language (indenting, highlighting, completion). Changehellotoworld(ciw), then press<C-c>'to put it back in the block.#+begin_src python print("hello") #+end_src
Keys <leader>o' ciw world <Esc> <C-c>'
Try it in Neovim
:Org tutor writing - Add a footnote1:39
Put the cursor at the end of the
Tealine and press<leader>oif. A reference goes in the text and the cursor jumps to its new definition, in Insert mode: typeGreen or black.and press<Esc>.Tea is ready.
Keys $ <leader>oif Green or black. <Esc>
Try it in Neovim
:Org tutor writing - Jump to a definition and back1:50
Put the cursor on
[fn:milk]afterCoffee with milk.and press<leader>oif: the cursor jumps to the definition. It has no text yet: pressA, type a space andJust a drop., then<Esc>. On the definition's label (0), the same key jumps back to the reference.<CR>follows a footnote too.Coffee with milk.[fn:milk]
[fn:milk]
Keys <leader>oif A Just a drop. <Esc> 0 <leader>oif
Try it in Neovim
:Org tutor writing
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
An org file is mostly text. This lesson shows how to write it: bold and italic words, paragraphs, keywords, blocks of quotes and code, and footnotes. It assumes the keys of the first lesson (
:Org tutor basics).- Markup, paragraphs, blocks and footnotes, tried out in this file.
1.1 Make a word bold
Select the word
importantwithviwand press<leader>oE, then*: the markers go around the selection. Any marker of the six works the same way.This step is important for the rest.
Keys viw <leader>oE *
- <leader>oE asks for a marker and puts it around the selection.
** 1.1 Make a word bold ✓ Select the word =important= with =viw= and press =<leader>oE=, then =*=: the markers go around the selection. Any marker of the six works the same way. This step is *important* for the rest. ** 1.2 Type in italics ✗ With nothing selected, =<leader>oE= puts a pair of markers at the cursor and leaves you typing between them. On the empty line below =Notes:=, press =<leader>oE= and =/=, type =in italics= and press =<Esc>=. Notes: * Lesson 2: paragraphs A blank line separates paragraphs. Inside one, line breaks don't matter when you export: the lines are joined. ** 2.1 Fill a paragraph ✗ writing.org 28:25
1.2 Type in italics
With nothing selected,
<leader>oEputs a pair of markers at the cursor and leaves you typing between them. On the empty line belowNotes:, press<leader>oEand/, typein italicsand press<Esc>.Notes:
Keys j <leader>oE / in italics <Esc>
- With nothing selected, it opens a pair of markers to type in.
** 1.2 Type in italics ✓ With nothing selected, =<leader>oE= puts a pair of markers at the cursor and leaves you typing between them. On the empty line below =Notes:=, press =<leader>oE= and =/=, type =in italics= and press =<Esc>=. Notes: /in italics/ * Lesson 2: paragraphs A blank line separates paragraphs. Inside one, line breaks don't matter when you export: the lines are joined. ** 2.1 Fill a paragraph ✗ The paragraph below is one long line. Put the cursor on it and press =gqip=: it is filled, broken into lines no wider than ='textwidth'= (79 when it is 0). In a list item or a comment, the filling keeps the indentation or the =#=. Org files are plain text, so you can read them anywhere, edit them in any editor writing.org 37:11
2.1 Fill a paragraph
The paragraph below is one long line. Put the cursor on it and press
gqip: it is filled, broken into lines no wider than'textwidth'(79 when it is 0). In a list item or a comment, the filling keeps the indentation or the#.Org files are plain text, so you can read them anywhere, edit them in any editor, keep them in version control and still find your notes in twenty years.
Keys gqip
- gqip fills the paragraph: org.nvim keeps lists and comments intact.
** 2.1 Fill a paragraph ✓ The paragraph below is one long line. Put the cursor on it and press =gqip=: it is filled, broken into lines no wider than ='textwidth'= (79 when it is 0). In a list item or a comment, the filling keeps the indentation or the =#=. Org files are plain text, so you can read them anywhere, edit them in any editor, keep them in version control and still find your notes in twenty years. ** 2.2 Draw a horizontal rule ✗ A line of five dashes or more is a horizontal rule. Put the cursor on =First part=, press =o=, type =-----= and press =<Esc>=. First part. Second part. ** 2.3 Comment out a line ✗ A line that starts with =#= and a space is a comment: it stays in the file but is never exported. Put the cursor on =Draft:= and press =gcc= (Vim's comment key) to comment it out; =gcc= again brings it back. writing.org 50:1
2.2 Draw a horizontal rule
A line of five dashes or more is a horizontal rule. Put the cursor on
First part, presso, type-----and press<Esc>.First part.
Second part.
Keys o ----- <Esc>
- Five dashes on a line of their own make a horizontal rule.
** 2.2 Draw a horizontal rule ✓ A line of five dashes or more is a horizontal rule. Put the cursor on =First part=, press =o=, type =-----= and press =<Esc>=. First part. ----- Second part. ** 2.3 Comment out a line ✗ A line that starts with =#= and a space is a comment: it stays in the file but is never exported. Put the cursor on =Draft:= and press =gcc= (Vim's comment key) to comment it out; =gcc= again brings it back. Draft: remember to check the numbers. * Lesson 3: keywords and blocks A line like =#+TITLE: ...= is a keyword: a setting for the file or for the element below it. A block is text between =#+begin_...= and =#+end_...= lines: a quote, an example, source code. writing.org 57:5
2.3 Comment out a line
A line that starts with
#and a space is a comment: it stays in the file but is never exported. Put the cursor onDraft:and pressgcc(Vim's comment key) to comment it out;gccagain brings it back.Draft: remember to check the numbers.
Keys gcc
- gcc comments the line out with a #: it won't be exported.
** 2.3 Comment out a line ✓ A line that starts with =#= and a space is a comment: it stays in the file but is never exported. Put the cursor on =Draft:= and press =gcc= (Vim's comment key) to comment it out; =gcc= again brings it back. # Draft: remember to check the numbers. * Lesson 3: keywords and blocks A line like =#+TITLE: ...= is a keyword: a setting for the file or for the element below it. A block is text between =#+begin_...= and =#+end_...= lines: a quote, an example, source code. ** 3.1 Add a keyword ✗ This file starts with =#+TITLE:=. Press =gg= to go there, press =o= and type =#+AUTHOR: Ada= (or your name), then =<Esc>=. Exports put the author under the title. ** 3.2 Quote a paragraph ✗ Select the two lines of the poem with =Vj= and press =<leader>oib=: a menu of block types opens. Press =q= and the lines are wrapped in a quote block. =e= makes an example writing.org 66:1
3.1 Add a keyword
This file starts with
#+TITLE:. Pressggto go there, pressoand type#+AUTHOR: Ada(or your name), then<Esc>. Exports put the author under the title.Keys gg o #+AUTHOR: Ada <Esc>
- Keywords at the top of a file set its title, author and options.
#+TITLE: org.nvim tutor 3: writing in org ✓ 6/11 #+AUTHOR: Ada #+STARTUP: showall nologdone fnlocal #+TODO: TODO | DONE An org file is mostly text. This lesson shows how to write it: bold and italic words, paragraphs, keywords, blocks of quotes and code, and footnotes. It assumes the keys of the first lesson (=:Org tutor basics=). - As before, a ✓ at the end of an exercise's headline means it is done, and ✗ that it is not yet. Keys are shown as mapped in your config; =<leader>= is =<Space>=. - This is a working copy: =:w= saves your progress and =:Org tutor writing reset= starts over. - Stuck? =:Org tutor_hint= shows the keys that solve the exercise at the cursor, and =:Org tutor= lists every lesson. * Lesson 1: emphasis Put a marker on each side of a word to style it: *bold*, /italic/, _underline_, +strike-through+, =verbatim= and ~code~. The markers stay in the text, which is plain to read anywhere. Set writing.org 2:13
3.2 Quote a paragraph
Select the two lines of the poem with
Vjand press<leader>oib: a menu of block types opens. Pressqand the lines are wrapped in a quote block.emakes an example block,sa source block,va verse.Hope is the thing with feathers That perches in the soul
Keys Vj <leader>oib q
- <leader>oib wraps the selection in a block; q is a quote.
** 3.2 Quote a paragraph ✓ Select the two lines of the poem with =Vj= and press =<leader>oib=: a menu of block types opens. Press =q= and the lines are wrapped in a quote block. =e= makes an example block, =s= a source block, =v= a verse. #+begin_quote Hope is the thing with feathers That perches in the soul #+end_quote ** 3.3 Insert a source block ✗ On the empty line below =Code:=, press =<leader>oib= and =s=. The cursor waits after =#+begin_src= for the language: type =python=, press =<CR>= and type =print("hello")=, then =<Esc>=. Code: ** 3.4 Edit code in its own window ✗ Put the cursor on =hello= in the block below and press writing.org 85:133.3 Insert a source block
On the empty line below
Code:, press<leader>oibands. The cursor waits after#+begin_srcfor the language: typepython, press<CR>and typeprint("hello"), then<Esc>.Code:
Keys j <leader>oib s python <CR> print("hello") <Esc>
- On an empty line, s inserts a source block; the language goes first.
** 3.3 Insert a source block ✓ On the empty line below =Code:=, press =<leader>oib= and =s=. The cursor waits after =#+begin_src= for the language: type =python=, press =<CR>= and type =print("hello")=, then =<Esc>=. Code: #+begin_src python print("hello") #+end_src ** 3.4 Edit code in its own window ✗ Put the cursor on =hello= in the block below and press =<leader>o'=: the code opens in a window of its own, set up for its language (indenting, highlighting, completion). Change =hello= to =world= (=ciw=), then press =<C-c>'= to put it back in the block. #+begin_src python print("hello") #+end_src writing.org 97:163.4 Edit code in its own window
Put the cursor on
helloin the block below and press<leader>o': the code opens in a window of its own, set up for its language (indenting, highlighting, completion). Changehellotoworld(ciw), then press<C-c>'to put it back in the block.#+begin_src python print("hello") #+end_src
Keys <leader>o' ciw world <Esc> <C-c>'
- <leader>o' opens the code in a window with the language's own setup.
- <C-c>' puts the code back in the block and closes the window.
** 3.4 Edit code in its own window ✓ Put the cursor on =hello= in the block below and press =<leader>o'=: the code opens in a window of its own, set up for its language (indenting, highlighting, completion). Change =hello= to =world= (=ciw=), then press =<C-c>'= to put it back in the block. #+begin_src python print("world") #+end_src * Lesson 4: footnotes A footnote is a reference in the text, a label such as =fn:1= in square brackets, and a definition: a paragraph that starts with the same reference. This file has =#+STARTUP: fnlocal=, so a new definition goes at the end of the section; by default it goes under a =Footnotes= headline at the end of the file. ** 4.1 Add a footnote ✗ Put the cursor at the end of the =Tea= line and press =<leader>oif=. A reference goes in the text and the cursor writing.org 108:144.1 Add a footnote
Put the cursor at the end of the
Tealine and press<leader>oif. A reference goes in the text and the cursor jumps to its new definition, in Insert mode: typeGreen or black.and press<Esc>.Tea is ready.
Keys $ <leader>oif Green or black. <Esc>
- <leader>oif adds a reference and jumps to its definition.
** 4.1 Add a footnote ✓ Put the cursor at the end of the =Tea= line and press =<leader>oif=. A reference goes in the text and the cursor jumps to its new definition, in Insert mode: type =Green or black.= and press =<Esc>=. Tea is ready.[fn:1] [fn:1] Green or black. ** 4.2 Jump to a definition and back ✗ Put the cursor on =[fn:milk]= after =Coffee with milk.= and press =<leader>oif=: the cursor jumps to the definition. It has no text yet: press =A=, type a space and =Just a drop.=, then =<Esc>=. On the definition's label (=0=), the same key jumps back to the reference. =<CR>= follows a footnote too. Coffee with milk.[fn:milk] [fn:milk] writing.org 126:22
4.2 Jump to a definition and back
Put the cursor on
[fn:milk]afterCoffee with milk.and press<leader>oif: the cursor jumps to the definition. It has no text yet: pressA, type a space andJust a drop., then<Esc>. On the definition's label (0), the same key jumps back to the reference.<CR>follows a footnote too.Coffee with milk.[fn:milk]
[fn:milk]
Keys <leader>oif A Just a drop. <Esc> 0 <leader>oif
- On a reference, <leader>oif jumps to the definition.
- On the definition's label, it jumps back to the reference.
** 4.2 Jump to a definition and back ✓ Put the cursor on =[fn:milk]= after =Coffee with milk.= and press =<leader>oif=: the cursor jumps to the definition. It has no text yet: press =A=, type a space and =Just a drop.=, then =<Esc>=. On the definition's label (=0=), the same key jumps back to the reference. =<CR>= follows a footnote too. Coffee with milk.[fn:milk] [fn:milk] Just a drop. * What next You can write in org now. From here: - =g?= lists every key; =:h org-footnotes=, =:h org-fill= and =:h org-babel-edit-special= tell more about this lesson's keys. - =<leader>oe= exports this file to HTML, Markdown, LaTeX and more: that is where the markup, keywords and footnotes show their worth. - examples/00-index.org links to one file per feature, each with many examples and exercises. writing.org 129:20 Tutor "writing" done! Next lesson: 4. Dates in depth (:Org tutor dates)
The lesson: tutor/org/writing.org · the recording: writing.cast (asciicast v2)
org.nvim tutor 4: dates in depth
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 13
- Welcome0:00
This lesson is about dates: typing them quickly at the date prompt, changing them with a key, tasks that repeat, deadlines that warn you early, and ranges. It assumes the first lesson (
:Org tutor basics).Try it in Neovim
:Org tutor dates - Insert today's date0:07
Put the cursor at the end of
Dentist:below, press<leader>oi.and then<CR>: today's date goes in at the cursor.Keys $ <leader>oi. <CR>
Try it in Neovim
:Org tutor dates - Type a relative date0:16
Put the cursor on
Call the plumber, press<leader>os, theni, type+2dand<CR>. Two days from today.+1wis a week,+1ma month,-1dyesterday;.or+0is today.Keys <leader>os i +2d <CR>
Try it in Neovim
:Org tutor dates - A weekday and a time0:25
At the end of
Lunch with Ana:press<leader>oi.,i, typefri 12:30and<CR>. A weekday name is the next such day; a time alone (12:30) is today at that time.Keys $ <leader>oi. i fri 12:30 <CR>
Try it in Neovim
:Org tutor dates - An inactive timestamp0:36
At the end of
Bought the tickets:press<leader>oi!and<CR>. Square brackets make the date inactive: a record of when something happened. The agenda shows only active<...>dates.Keys $ <leader>oi! <CR>
Try it in Neovim
:Org tutor dates - One day later0:45
Put the cursor on the date below and press
<S-Right>twice: the day moves forward, and the weekday follows.<S-Left>goes back.Keys <S-Right> <S-Right>
Try it in Neovim
:Org tutor dates - Change one part0:54
<S-Up>and<S-Down>change the part under the cursor: the year, month, day, hour or minutes (by 5). Put the cursor on the hour10below and press<S-Up>.Keys <S-Up>
Try it in Neovim
:Org tutor dates - Add a repeater1:02
Put the cursor on the
>of the date underWater the plants, pressi, type a space and+1w, then<Esc>. The task now repeats every week.Keys i +1w <Esc>
Try it in Neovim
:Org tutor dates - Mark a repeating task done1:10
Put the cursor on
Take out the binsand presscit. It stays TODO, its date moves on a week, and aLAST_REPEATproperty and a note record when you did it.Keys cit
Try it in Neovim
:Org tutor dates - Repeat from today1:23
.+counts from the day you finish, not from the old date. Put the cursor onStretchand presscit: the date jumps from early October to tomorrow.Keys cit
Try it in Neovim
:Org tutor dates - A warning period1:31
Put the cursor on the
>of the deadline below, pressi, type a space and-3d, then<Esc>.Keys i -3d <Esc>
Try it in Neovim
:Org tutor dates - A date range1:39
At the end of
Holiday:press<leader>oi.and<CR>, then<leader>oi.again: pressed right after a date, it adds the end of a range. Pressltwice and<CR>:<a>--<b>spans three days.Keys $ <leader>oi. <CR> <leader>oi. l l <CR>
Try it in Neovim
:Org tutor dates - A time range1:51
At the end of
Meeting:press<leader>oi.,i, type14:00-15:30and<CR>: one day, from 14:00 to 15:30.Keys $ <leader>oi. i 14:00-15:30 <CR>
Try it in Neovim
:Org tutor dates - See them in the agenda2:02
Press
<leader>oa, then<anda: the week of this file, with the scheduled tasks, the deadlines and your ranges.fshows the next week;qcloses it.Keys <leader>oa < a q
Try it in Neovim
:Org tutor dates
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
This lesson is about dates: typing them quickly at the date prompt, changing them with a key, tasks that repeat, deadlines that warn you early, and ranges. It assumes the first lesson (
:Org tutor basics).- Dates: the prompt, shifting, repeaters, deadlines and ranges.
1.1 Insert today's date
Put the cursor at the end of
Dentist:below, press<leader>oi.and then<CR>: today's date goes in at the cursor.Keys $ <leader>oi. <CR>
- <leader>oi. opens the calendar; <CR> picks the day shown.
** 1.1 Insert today's date ✓ Put the cursor at the end of =Dentist:= below, press =<leader>oi.= and then =<CR>=: today's date goes in at the cursor. - Dentist: <2026-10-12 Mon> ** 1.2 Type a relative date ✗ Put the cursor on =Call the plumber=, press =<leader>os=, then =i=, type =+2d= and =<CR>=. Two days from today. =+1w= is a week, =+1m= a month, =-1d= yesterday; =.= or =+0= is today. *** TODO Call the plumber ** 1.3 A weekday and a time ✗ At the end of =Lunch with Ana:= press =<leader>oi.=, =i=, type =fri 12:30= and =<CR>=. A weekday name is the next such day; a time alone (=12:30=) is today at that time. - Lunch with Ana: ** 1.4 An inactive timestamp ✗ dates.org 27:27
1.2 Type a relative date
Put the cursor on
Call the plumber, press<leader>os, theni, type+2dand<CR>. Two days from today.+1wis a week,+1ma month,-1dyesterday;.or+0is today.Keys <leader>os i +2d <CR>
- At the prompt, i types a date: +2d is two days from today.
** 1.2 Type a relative date ✓ Put the cursor on =Call the plumber=, press =<leader>os=, then =i=, type =+2d= and =<CR>=. Two days from today. =+1w= is a week, =+1m= a month, =-1d= yesterday; =.= or =+0= is today. *** TODO Call the plumber SCHEDULED: <2026-10-14 Wed> ** 1.3 A weekday and a time ✗ At the end of =Lunch with Ana:= press =<leader>oi.=, =i=, type =fri 12:30= and =<CR>=. A weekday name is the next such day; a time alone (=12:30=) is today at that time. - Lunch with Ana: ** 1.4 An inactive timestamp ✗ At the end of =Bought the tickets:= press =<leader>oi!= and =<CR>=. Square brackets make the date inactive: a record of when something happened. The agenda shows only active =<...>= dates. - Bought the tickets: dates.org 34:10 Date: +2d
1.3 A weekday and a time
At the end of
Lunch with Ana:press<leader>oi.,i, typefri 12:30and<CR>. A weekday name is the next such day; a time alone (12:30) is today at that time.Keys $ <leader>oi. i fri 12:30 <CR>
- A weekday name is the next such day, with a time if you add one.
** 1.3 A weekday and a time ✓ At the end of =Lunch with Ana:= press =<leader>oi.=, =i=, type =fri 12:30= and =<CR>=. A weekday name is the next such day; a time alone (=12:30=) is today at that time. - Lunch with Ana: <2026-10-16 Fri 12:30> ** 1.4 An inactive timestamp ✗ At the end of =Bought the tickets:= press =<leader>oi!= and =<CR>=. Square brackets make the date inactive: a record of when something happened. The agenda shows only active =<...>= dates. - Bought the tickets: * Lesson 2: changing a date No need to retype a date to change it: put the cursor on it and use Shift with the arrow keys. ** 2.1 One day later ✗ Put the cursor on the date below and press =<S-Right>= twice: the day moves forward, and the weekday follows. =<S-Left>= dates.org 42:40 Date: fri 12:30
1.4 An inactive timestamp
At the end of
Bought the tickets:press<leader>oi!and<CR>. Square brackets make the date inactive: a record of when something happened. The agenda shows only active<...>dates.Keys $ <leader>oi! <CR>
- <leader>oi! writes the date in brackets: the agenda skips it.
** 1.4 An inactive timestamp ✓ At the end of =Bought the tickets:= press =<leader>oi!= and =<CR>=. Square brackets make the date inactive: a record of when something happened. The agenda shows only active =<...>= dates. - Bought the tickets: [2026-10-12 Mon] * Lesson 2: changing a date No need to retype a date to change it: put the cursor on it and use Shift with the arrow keys. ** 2.1 One day later ✗ Put the cursor on the date below and press =<S-Right>= twice: the day moves forward, and the weekday follows. =<S-Left>= goes back. - Party: <2026-10-12 Mon> ** 2.2 Change one part ✗ =<S-Up>= and =<S-Down>= change the part under the cursor: the year, month, day, hour or minutes (by 5). Put the cursor dates.org 49:38 Date: fri 12:30
2.1 One day later
Put the cursor on the date below and press
<S-Right>twice: the day moves forward, and the weekday follows.<S-Left>goes back.Keys <S-Right> <S-Right>
- <S-Right> moves the date a day later; the weekday follows.
** 2.1 One day later ✓ Put the cursor on the date below and press =<S-Right>= twice: the day moves forward, and the weekday follows. =<S-Left>= goes back. - Party: <2026-10-14 Wed> ** 2.2 Change one part ✗ =<S-Up>= and =<S-Down>= change the part under the cursor: the year, month, day, hour or minutes (by 5). Put the cursor on the hour =10= below and press =<S-Up>=. - Call: <2026-10-12 Mon 10:00> * Lesson 3: repeating tasks A repeater after the date makes a task come back: =+1w= every week, =.+1d= one day after you last did it, =++1m= every month, always to a date in the future. Marking such a task DONE moves its date on instead. ** 3.1 Add a repeater ✗ Put the cursor on the =>= of the date under =Water the plants=, press dates.org 60:19 Date: fri 12:30
2.2 Change one part
<S-Up>and<S-Down>change the part under the cursor: the year, month, day, hour or minutes (by 5). Put the cursor on the hour10below and press<S-Up>.Keys <S-Up>
- <S-Up> changes the part under the cursor: here the hour.
** 2.2 Change one part ✓ =<S-Up>= and =<S-Down>= change the part under the cursor: the year, month, day, hour or minutes (by 5). Put the cursor on the hour =10= below and press =<S-Up>=. - Call: <2026-10-12 Mon 11:00> * Lesson 3: repeating tasks A repeater after the date makes a task come back: =+1w= every week, =.+1d= one day after you last did it, =++1m= every month, always to a date in the future. Marking such a task DONE moves its date on instead. ** 3.1 Add a repeater ✗ Put the cursor on the =>= of the date under =Water the plants=, press =i=, type a space and =+1w=, then =<Esc>=. The task now repeats every week. *** TODO Water the plants SCHEDULED: <2026-10-12 Mon> ** 3.2 Mark a repeating task done ✗ dates.org 67:25 Date: fri 12:30
3.1 Add a repeater
Put the cursor on the
>of the date underWater the plants, pressi, type a space and+1w, then<Esc>. The task now repeats every week.Keys i +1w <Esc>
- A repeater after the date: +1w brings the task back every week.
** 3.1 Add a repeater ✓ Put the cursor on the =>= of the date under =Water the plants=, press =i=, type a space and =+1w=, then =<Esc>=. The task now repeats every week. *** TODO Water the plants SCHEDULED: <2026-10-12 Mon +1w> ** 3.2 Mark a repeating task done ✗ Put the cursor on =Take out the bins= and press =cit=. It stays TODO, its date moves on a week, and a =LAST_REPEAT= property and a note record when you did it. *** TODO Take out the bins SCHEDULED: <2026-10-12 Mon +1w> ** 3.3 Repeat from today ✗ =.+= counts from the day you finish, not from the old date. Put the cursor on =Stretch= and press =cit=: the date jumps from early October to tomorrow. dates.org 80:30 Date: fri 12:30
3.2 Mark a repeating task done
Put the cursor on
Take out the binsand presscit. It stays TODO, its date moves on a week, and aLAST_REPEATproperty and a note record when you did it.Keys cit
- cit on a repeating task moves its date on a week.
- It stays TODO; LAST_REPEAT and a note say when you did it.
** 3.2 Mark a repeating task done ✓ Put the cursor on =Take out the bins= and press =cit=. It stays TODO, its date moves on a week, and a =LAST_REPEAT= property and a note record when you did it. *** TODO Take out the bins SCHEDULED: <2026-10-19 Mon +1w> :PROPERTIES:... - State "DONE" from "TODO" [2026-10-12 Mon 09:00] ** 3.3 Repeat from today ✗ =.+= counts from the day you finish, not from the old date. Put the cursor on =Stretch= and press =cit=: the date jumps from early October to tomorrow. *** TODO Stretch SCHEDULED: <2026-10-05 Mon .+1d> * Lesson 4: deadlines and ranges A deadline shows in the agenda as soon as it is 14 days away. A warning period such as =-3d= after the date makes that 3 days for one deadline. dates.org 87:10 Date: fri 12:30
3.3 Repeat from today
.+counts from the day you finish, not from the old date. Put the cursor onStretchand presscit: the date jumps from early October to tomorrow.Keys cit
- With .+1d the next date counts from today: tomorrow.
** 3.3 Repeat from today ✓ =.+= counts from the day you finish, not from the old date. Put the cursor on =Stretch= and press =cit=: the date jumps from early October to tomorrow. *** TODO Stretch SCHEDULED: <2026-10-13 Tue .+1d> :PROPERTIES:... - State "DONE" from "TODO" [2026-10-12 Mon 09:00] * Lesson 4: deadlines and ranges A deadline shows in the agenda as soon as it is 14 days away. A warning period such as =-3d= after the date makes that 3 days for one deadline. ** 4.1 A warning period ✗ Put the cursor on the =>= of the deadline below, press =i=, type a space and =-3d=, then =<Esc>=. *** TODO Send the invoice DEADLINE: <2026-10-20 Tue> dates.org 99:10 Date: fri 12:30
4.1 A warning period
Put the cursor on the
>of the deadline below, pressi, type a space and-3d, then<Esc>.Keys i -3d <Esc>
- -3d after a deadline: the agenda warns 3 days before, not 14.
** 4.1 A warning period ✓ Put the cursor on the =>= of the deadline below, press =i=, type a space and =-3d=, then =<Esc>=. *** TODO Send the invoice DEADLINE: <2026-10-20 Tue -3d> ** 4.2 A date range ✗ At the end of =Holiday:= press =<leader>oi.= and =<CR>=, then =<leader>oi.= again: pressed right after a date, it adds the end of a range. Press =l= twice and =<CR>=: =<a>--<b>= spans three days. - Holiday: ** 4.3 A time range ✗ At the end of =Meeting:= press =<leader>oi.=, =i=, type =14:00-15:30= and =<CR>=: one day, from 14:00 to 15:30. - Meeting: ** 4.4 See them in the agenda dates.org 115:29 Date: fri 12:30
4.2 A date range
At the end of
Holiday:press<leader>oi.and<CR>, then<leader>oi.again: pressed right after a date, it adds the end of a range. Pressltwice and<CR>:<a>--<b>spans three days.Keys $ <leader>oi. <CR> <leader>oi. l l <CR>
- <leader>oi. again right away adds the end of a range.
** 4.2 A date range ✓ At the end of =Holiday:= press =<leader>oi.= and =<CR>=, then =<leader>oi.= again: pressed right after a date, it adds the end of a range. Press =l= twice and =<CR>=: =<a>--<b>= spans three days. - Holiday: <2026-10-12 Mon>--<2026-10-14 Wed> ** 4.3 A time range ✗ At the end of =Meeting:= press =<leader>oi.=, =i=, type =14:00-15:30= and =<CR>=: one day, from 14:00 to 15:30. - Meeting: ** 4.4 See them in the agenda Press =<leader>oa=, then =<= and =a=: the week of this file, with the scheduled tasks, the deadlines and your ranges. =f= shows the next week; =q= closes it. * What next That's dates. From here: dates.org 122:45 Date: fri 12:30
4.3 A time range
At the end of
Meeting:press<leader>oi.,i, type14:00-15:30and<CR>: one day, from 14:00 to 15:30.Keys $ <leader>oi. i 14:00-15:30 <CR>
- Two times with a dash make a time range on one day.
** 4.3 A time range ✓ At the end of =Meeting:= press =<leader>oi.=, =i=, type =14:00-15:30= and =<CR>=: one day, from 14:00 to 15:30. - Meeting: <2026-10-12 Mon 14:00-15:30> ** 4.4 See them in the agenda Press =<leader>oa=, then =<= and =a=: the week of this file, with the scheduled tasks, the deadlines and your ranges. =f= shows the next week; =q= closes it. * What next That's dates. From here: - =g?= lists every key, grouped by topic; =:h org-dates= is the manual on dates, =:h org-repeat= on repeaters. - examples/00-index.org links to one file per feature, with examples and exercises. ✓ Next lesson: 5. Tables as a spreadsheet (:Org tutor tables) dates.org 128:39 Tutor "dates" done! Next lesson: 5. Tables as a spreadsheet (:Org tutor tables)
4.4 See them in the agenda
Press
<leader>oa, then<anda: the week of this file, with the scheduled tasks, the deadlines and your ranges.fshows the next week;qcloses it.Keys <leader>oa < a q
- The week agenda of this file shows every active date of the lesson.
** 4.4 See them in the agenda Press =<leader>oa=, then =<= and =a=: the week of this file, with the scheduled tasks, the deadlines and your ranges. =f= shows the next week; =q= closes it. * What next That's dates. From here: - =g?= lists every key, grouped by topic; =:h org-dates= is the manual on dates, =:h org-repeat= on repeaters. - examples/00-index.org links to one file per feature, with examples and exercises. ✓ Next lesson: 5. Tables as a spreadsheet (:Org tutor tables) dates.org 130:1
The lesson: tutor/org/dates.org · the recording: dates.cast (asciicast v2)
org.nvim tutor 5: tables as a spreadsheet
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 14
- Welcome0:00
An org table is more than lined-up text: you move around it like a form, reshape it with a key, and give it formulas that compute columns and totals, like a small spreadsheet. The first lesson showed how to align a table and add a row; this one goes further.
Try it in Neovim
:Org tutor tables - Next and previous field0:07
<Tab>goes to the next field,<S-Tab>to the previous one. OnMilkpressi, then<Tab>twice to reach its price, type1.20and press<Esc>.Keys i <Tab> <Tab> 1.20 <Esc>
Try it in Neovim
:Org tutor tables - Down a column0:17
<CR>goes to the same field of the next row. OnEggspressiand<Tab>, type12, press<CR>, type3and press<Esc>.Keys i <Tab> 12 <CR> 3 <Esc>
Try it in Neovim
:Org tutor tables - Move a column0:28
<M-h>and<M-l>move the column at the cursor. Put theQtycolumn first: onQtypress<M-h>.Keys <M-h>
Try it in Neovim
:Org tutor tables - Move a row0:36
<M-k>and<M-j>move the row. PutCoffeeat the top: on its row press<M-k>.Keys <M-k>
Try it in Neovim
:Org tutor tables - Delete a column0:43
<M-H>deletes the column at the cursor,<M-L>inserts an empty one. Delete theNotescolumn: onNotespress<M-H>.Keys <M-H>
Try it in Neovim
:Org tutor tables - Delete a row0:51
<M-K>deletes the row at the cursor,<M-J>inserts an empty one above it. Delete theOldrow: onOldpress<M-K>.Keys <M-K>
Try it in Neovim
:Org tutor tables - Add a separator line0:58
<leader>oT-puts a line under the current row. Separate the header: onDaypress<leader>oT-.Keys <leader>oT-
Try it in Neovim
:Org tutor tables - Sort the rows1:06
<leader>oTssorts the rows by the column at the cursor. It asks how:aalphabetically,nby number (AandNin reverse). On a number ofScorepress<leader>oTsandN.Keys <leader>oTs N
Try it in Neovim
:Org tutor tables - A column formula1:15
Text typed in a field that starts with an equals sign becomes the formula of its column. On
Applespressiand<Tab>three times, type ~=$2*$3~ (Qty times Price) and press<Tab>. A#+TBLFM:line appears.Keys i <Tab> <Tab> <Tab> =$2*$3 <Tab> <Esc>
Try it in Neovim
:Org tutor tables - Ask for a formula1:27
=<C-c>== asks for the formula of the column at the cursor and computes that one field. On the
0next to10press =<C-c>==, type$1*0.62(km to miles) and press<CR>.Keys <C-c>= $1*0.62 <CR>
Try it in Neovim
:Org tutor tables - Recalculate1:36
A new formula fills only the field you typed it in. To compute every field again, press
<leader>oTfin the table. On a#+TBLFM:line<C-c><C-c>does the same.Keys <leader>oTf
Try it in Neovim
:Org tutor tables - A field formula1:44
Starting with ~:=~ instead makes a formula for that one field. On
Sumpressiand<Tab>, type ~:=vsum(@2..@-1)~, then<Esc>and<C-c><C-c>: it sums row 2 to the row above.Keys i <Tab> :=vsum(@2..@-1) <Esc> <C-c><C-c>
Try it in Neovim
:Org tutor tables - A number format1:55
A format after
;shapes a formula's results:%.2fshows two decimals, so1.becomes1.00. PressAon the#+TBLFM:line, type;%.2f, then<Esc>and<C-c><C-c>to recalculate.Keys A ;%.2f <Esc> <C-c><C-c>
Try it in Neovim
:Org tutor tables - Convert comma-separated lines2:04
<leader>oTcin Visual mode turns lines of text into a table: comma-separated (CSV) when every line has a comma, else split at tabs or spaces. Select the three lines withVandjj, then press<leader>oTc.city,people Lima,10 Oslo,7
Keys V jj <leader>oTc
Try it in Neovim
:Org tutor tables
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
An org table is more than lined-up text: you move around it like a form, reshape it with a key, and give it formulas that compute columns and totals, like a small spreadsheet. The first lesson showed how to align a table and add a row; this one goes further.
- Tables you can move around, reshape and compute, like a spreadsheet.
1.1 Next and previous field
<Tab>goes to the next field,<S-Tab>to the previous one. OnMilkpressi, then<Tab>twice to reach its price, type1.20and press<Esc>.Keys i <Tab> <Tab> 1.20 <Esc>
- <Tab> jumps to the next field and lines the table up.
** 1.1 Next and previous field ✓ =<Tab>= goes to the next field, =<S-Tab>= to the previous one. On =Milk= press =i=, then =<Tab>= twice to reach its price, type =1.20= and press =<Esc>=. | Item | Qty | Price | |-------+-----+-------| | Bread | 1 | 2.50 | | Milk | 2 | 1.20 | ** 1.2 Down a column ✗ =<CR>= goes to the same field of the next row. On =Eggs= press =i= and =<Tab>=, type =12=, press =<CR>=, type =3= and press =<Esc>=. | Item | Qty | |-------+-----| | Eggs | | | Flour | | tables.org 32:21
1.2 Down a column
<CR>goes to the same field of the next row. OnEggspressiand<Tab>, type12, press<CR>, type3and press<Esc>.Keys i <Tab> 12 <CR> 3 <Esc>
- <CR> goes down to the same field of the next row.
** 1.2 Down a column ✓ =<CR>= goes to the same field of the next row. On =Eggs= press =i= and =<Tab>=, type =12=, press =<CR>=, type =3= and press =<Esc>=. | Item | Qty | |-------+-----| | Eggs | 12 | | Flour | 3 | * Lesson 2: reshaping In Normal mode the keys that move headlines move table columns and rows, and their Shift versions delete and insert them. ** 2.1 Move a column ✗ =<M-h>= and =<M-l>= move the column at the cursor. Put the =Qty= column first: on =Qty= press =<M-h>=. | Item | Qty | |--------+-----| | Apples | 4 | tables.org 42:13
2.1 Move a column
<M-h>and<M-l>move the column at the cursor. Put theQtycolumn first: onQtypress<M-h>.Keys <M-h>
- <M-h> moves the column at the cursor to the left.
** 2.1 Move a column ✓ =<M-h>= and =<M-l>= move the column at the cursor. Put the =Qty= column first: on =Qty= press =<M-h>=. | Qty | Item | |-----+--------| | 4 | Apples | | 2 | Pears | ** 2.2 Move a row ✗ =<M-k>= and =<M-j>= move the row. Put =Coffee= at the top: on its row press =<M-k>=. | Drink | Cups | |--------+------| | Tea | 2 | | Coffee | 3 | ** 2.3 Delete a column ✗ =<M-H>= deletes the column at the cursor, =<M-L>= inserts an empty one. Delete the =Notes= tables.org 52:3
2.2 Move a row
<M-k>and<M-j>move the row. PutCoffeeat the top: on its row press<M-k>.Keys <M-k>
- <M-k> moves the row up, like a headline.
** 2.2 Move a row ✓ =<M-k>= and =<M-j>= move the row. Put =Coffee= at the top: on its row press =<M-k>=. | Drink | Cups | |--------+------| | Coffee | 3 | | Tea | 2 | ** 2.3 Delete a column ✗ =<M-H>= deletes the column at the cursor, =<M-L>= inserts an empty one. Delete the =Notes= column: on =Notes= press =<M-H>=. | Item | Notes | Qty | |-------+-------+-----| | Rice | dry | 1 | | Beans | dry | 2 | ** 2.4 Delete a row ✗ =<M-K>= deletes the row at the cursor, tables.org 63:3
2.3 Delete a column
<M-H>deletes the column at the cursor,<M-L>inserts an empty one. Delete theNotescolumn: onNotespress<M-H>.Keys <M-H>
- <M-H> deletes the column at the cursor.
** 2.3 Delete a column ✓ =<M-H>= deletes the column at the cursor, =<M-L>= inserts an empty one. Delete the =Notes= column: on =Notes= press =<M-H>=. | Item | Qty | |-------+-----| | Rice | 1 | | Beans | 2 | ** 2.4 Delete a row ✗ =<M-K>= deletes the row at the cursor, =<M-J>= inserts an empty one above it. Delete the =Old= row: on =Old= press =<M-K>=. | Task | Hours | |-------+-------| | Write | 3 | | Old | 9 | | Read | 1 | tables.org 71:11
2.4 Delete a row
<M-K>deletes the row at the cursor,<M-J>inserts an empty one above it. Delete theOldrow: onOldpress<M-K>.Keys <M-K>
- <M-K> deletes the row, <M-J> inserts one.
** 2.4 Delete a row ✓ =<M-K>= deletes the row at the cursor, =<M-J>= inserts an empty one above it. Delete the =Old= row: on =Old= press =<M-K>=. | Task | Hours | |-------+-------| | Write | 3 | | Read | 1 | ** 2.5 Add a separator line ✗ =<leader>oT-= puts a line under the current row. Separate the header: on =Day= press =<leader>oT-=. | Day | Steps | | Mon | 4200 | | Tue | 6100 | ** 2.6 Sort the rows ✗ =<leader>oTs= sorts the rows by the column at the cursor. It asks how: =a= alphabetically, =n= by number (=A= and =N= in reverse). On a tables.org 84:3
2.5 Add a separator line
<leader>oT-puts a line under the current row. Separate the header: onDaypress<leader>oT-.Keys <leader>oT-
- <leader>oT- draws a separator line under the row.
** 2.5 Add a separator line ✓ =<leader>oT-= puts a line under the current row. Separate the header: on =Day= press =<leader>oT-=. | Day | Steps | |-----+-------| | Mon | 4200 | | Tue | 6100 | ** 2.6 Sort the rows ✗ =<leader>oTs= sorts the rows by the column at the cursor. It asks how: =a= alphabetically, =n= by number (=A= and =N= in reverse). On a number of =Score= press =<leader>oTs= and =N=. | Name | Score | |------+-------| | Ana | 12 | | Ben | 31 | | Cleo | 25 | * Lesson 3: formulas tables.org 90:3
2.6 Sort the rows
<leader>oTssorts the rows by the column at the cursor. It asks how:aalphabetically,nby number (AandNin reverse). On a number ofScorepress<leader>oTsandN.Keys <leader>oTs N
- <leader>oTs sorts by this column; N is by number, largest first.
** 2.6 Sort the rows ✓ =<leader>oTs= sorts the rows by the column at the cursor. It asks how: =a= alphabetically, =n= by number (=A= and =N= in reverse). On a number of =Score= press =<leader>oTs= and =N=. | Name | Score | |------+-------| | Ben | 31 | | Cleo | 25 | | Ana | 12 | * Lesson 3: formulas Formulas live in a =#+TBLFM:= line under the table. =$2= is column 2 of the same row, =@3= row 3 (separator lines don't count), =@>= the last row and =@-1= the row above. ** 3.1 A column formula ✗ Text typed in a field that starts with an equals sign becomes the formula of its column. On =Apples= press =i= and =<Tab>= three times, type ~=$2*$3~ (Qty times Price) and press =<Tab>=. A =#+TBLFM:= line appears. tables.org 102:13
3.1 A column formula
Text typed in a field that starts with an equals sign becomes the formula of its column. On
Applespressiand<Tab>three times, type ~=$2*$3~ (Qty times Price) and press<Tab>. A#+TBLFM:line appears.Keys i <Tab> <Tab> <Tab> =$2*$3 <Tab> <Esc>
- A field typed as =formula becomes the formula of its column.
** 3.1 A column formula ✓ Text typed in a field that starts with an equals sign becomes the formula of its column. On =Apples= press =i= and =<Tab>= three times, type ~=$2*$3~ (Qty times Price) and press =<Tab>=. A =#+TBLFM:= line appears. | Item | Qty | Price | Total | |--------+-----+-------+-------| | Apples | 3 | 0.5 | 1.5 | | Lemons | 4 | 0.25 | | #+TBLFM: $4=$2*$3 ** 3.2 Ask for a formula ✗ =<C-c>== asks for the formula of the column at the cursor and computes that one field. On the =0= next to =10= press =<C-c>==, type =$1*0.62= (km to miles) and press =<CR>=. | Km | Miles | |----+-------| | 10 | 0 | | 42 | 0 | tables.org 120:2
3.2 Ask for a formula
=<C-c>== asks for the formula of the column at the cursor and computes that one field. On the
0next to10press =<C-c>==, type$1*0.62(km to miles) and press<CR>.Keys <C-c>= $1*0.62 <CR>
- <C-c>= asks for the formula of this column.
** 3.2 Ask for a formula ✓ =<C-c>== asks for the formula of the column at the cursor and computes that one field. On the =0= next to =10= press =<C-c>==, type =$1*0.62= (km to miles) and press =<CR>=. | Km | Miles | |----+-------| | 10 | 6.2 | | 42 | 0 | #+TBLFM: $2=$1*0.62 ** 3.3 Recalculate ✗ A new formula fills only the field you typed it in. To compute every field again, press =<leader>oTf= in the table. On a =#+TBLFM:= line =<C-c><C-c>= does the same. | Item | Qty | Price | Total | |--------+-----+-------+-------| | Apples | 3 | 0.5 | | | Lemons | 4 | 0.25 | | #+TBLFM: $4=$2*$3 tables.org 130:10 Column formula $2=$1*0.62
3.3 Recalculate
A new formula fills only the field you typed it in. To compute every field again, press
<leader>oTfin the table. On a#+TBLFM:line<C-c><C-c>does the same.Keys <leader>oTf
- <leader>oTf recalculates every formula of the table.
** 3.3 Recalculate ✓ A new formula fills only the field you typed it in. To compute every field again, press =<leader>oTf= in the table. On a =#+TBLFM:= line =<C-c><C-c>= does the same. | Item | Qty | Price | Total | |--------+-----+-------+-------| | Apples | 3 | 0.5 | 1.5 | | Lemons | 4 | 0.25 | 1. | #+TBLFM: $4=$2*$3 ** 3.4 A field formula ✗ Starting with ~:=~ instead makes a formula for that one field. On =Sum= press =i= and =<Tab>=, type ~:=vsum(@2..@-1)~, then =<Esc>= and =<C-c><C-c>=: it sums row 2 to the row above. | Item | Cost | |------+------| | Rent | 800 | | Food | 250 | |------+------| tables.org 141:3 Column formula $2=$1*0.62
3.4 A field formula
Starting with ~:=~ instead makes a formula for that one field. On
Sumpressiand<Tab>, type ~:=vsum(@2..@-1)~, then<Esc>and<C-c><C-c>: it sums row 2 to the row above.Keys i <Tab> :=vsum(@2..@-1) <Esc> <C-c><C-c>
- A field typed as :=formula gets a formula of its own.
** 3.4 A field formula ✓ Starting with ~:=~ instead makes a formula for that one field. On =Sum= press =i= and =<Tab>=, type ~:=vsum(@2..@-1)~, then =<Esc>= and =<C-c><C-c>=: it sums row 2 to the row above. | Item | Cost | |------+------| | Rent | 800 | | Food | 250 | |------+------| | Sum | 1050 | #+TBLFM: @4$2=vsum(@2..@-1) ** 3.5 A number format ✗ A format after =;= shapes a formula's results: =%.2f= shows two decimals, so =1.= becomes =1.00=. Press =A= on the =#+TBLFM:= line, type =;%.2f=, then =<Esc>= and =<C-c><C-c>= to recalculate. | Item | Qty | Price | Total | |--------+-----+-------+-------| | Apples | 3 | 0.5 | 1.5 | tables.org 155:15 Column formula $2=$1*0.62
3.5 A number format
A format after
;shapes a formula's results:%.2fshows two decimals, so1.becomes1.00. PressAon the#+TBLFM:line, type;%.2f, then<Esc>and<C-c><C-c>to recalculate.Keys A ;%.2f <Esc> <C-c><C-c>
- After a semicolon, %.2f rounds the result to two decimals.
** 3.5 A number format ✓ A format after =;= shapes a formula's results: =%.2f= shows two decimals, so =1.= becomes =1.00=. Press =A= on the =#+TBLFM:= line, type =;%.2f=, then =<Esc>= and =<C-c><C-c>= to recalculate. | Item | Qty | Price | Total | |--------+-----+-------+-------| | Apples | 3 | 0.5 | 1.50 | | Lemons | 4 | 0.25 | 1.00 | #+TBLFM: $4=$2*$3;%.2f * Lesson 4: from text to a table Data copied from elsewhere often comes as lines of text. ** 4.1 Convert comma-separated lines ✗ =<leader>oTc= in Visual mode turns lines of text into a table: comma-separated (CSV) when every line has a comma, else split at tabs or spaces. Select the three lines with =V= and =jj=, then press =<leader>oTc=. city,people tables.org 167:22 Column formula $2=$1*0.62
4.1 Convert comma-separated lines
<leader>oTcin Visual mode turns lines of text into a table: comma-separated (CSV) when every line has a comma, else split at tabs or spaces. Select the three lines withVandjj, then press<leader>oTc.city,people Lima,10 Oslo,7
Keys V jj <leader>oTc
- <leader>oTc on selected comma-separated lines makes a table.
** 4.1 Convert comma-separated lines ✓ =<leader>oTc= in Visual mode turns lines of text into a table: comma-separated (CSV) when every line has a comma, else split at tabs or spaces. Select the three lines with =V= and =jj=, then press =<leader>oTc=. | city | people | | Lima | 10 | | Oslo | 7 | * What next That's the spreadsheet tour. From here: - =g?= lists every table key; =<leader>o'= in a table opens its formulas in an editor, and =<C-c>== asks for the formula of the current column. - =:h org-tables= and =:h org-table-calc= are the manual: references, ranges, functions and formats. - examples/00-index.org links to one file per feature, the spreadsheet included. ✓ Next lesson: 6. Properties and column view (:Org tutor properties) tables.org 180:1 Tutor "tables" done! Next lesson: 6. Properties and column view (:Org tutor prop erties)
The lesson: tutor/org/tables.org · the recording: tables.cast (asciicast v2)
org.nvim tutor 6: properties and column view
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 10
- Welcome0:00
Properties are named values on a headline, such as a colour, an owner or how long a task will take. Column view shows them as a table over your outline, where you can edit them and see their sums.
Try it in Neovim
:Org tutor properties - Set a property0:07
Put the cursor on
Coffee grinderand press<leader>op. Type the nameColorand<CR>, then the valueredand<CR>. A drawer with:Color: redappears under the headline.Keys <leader>op Color <CR> red <CR>
Try it in Neovim
:Org tutor properties - Cycle through allowed values0:17
A
:Size_ALL:property lists the valuesSizemay take, in its whole subtree (an_ALLproperty is inherited). Open the drawer ofBlue shirtwith<Tab>on its:PROPERTIES:line. Then on:Size: Mpress<S-Right>: it changes to the next allowed value,L(<S-Left>goes back).Keys j <Tab> <S-Right>
Try it in Neovim
:Org tutor properties - Pick an allowed value0:30
When a property has allowed values,
<leader>opoffers them in a menu. OnRed shirt, setSizetoS: press the key, typeSizeand<CR>, then pickS.Keys <leader>op Size <CR> 1 <CR>
Try it in Neovim
:Org tutor properties - Set an effort0:40
Effortis the property for how long a task should take, asH:MM. The clock, the agenda and column view use it. OnWrite the intro, press<leader>oxe, type0:45and<CR>.Keys <leader>oxe 0:45 <CR>
Try it in Neovim
:Org tutor properties - Delete a property0:48
On
Old lamp, press<leader>oPand pickColor. The drawer goes too, as nothing is left in it.Keys <leader>oP 1 <CR>
Try it in Neovim
:Org tutor properties - Open column view0:56
On
Websitepress<leader>oC. Its headlines become rows, andWebsiteshows the sum of the efforts below it,3:30. Pressqto close the view again.Keys <leader>oC q
Try it in Neovim
:Org tutor properties - Cycle a value in column view1:13
Open column view on
Garden.landhmove across the columns,jandkacross the rows. On theOwnercolumn ofDig the beds, pressnuntil it showsBen(pgoes back). Thenqcloses the view.Keys <leader>oC l l n q
Try it in Neovim
:Org tutor properties - Edit a value and watch the sum1:27
Open column view on
Kitchen. On theEffortcolumn ofPaint the walls, presse, type3:00and<CR>: the sum onKitchengoes from0:30to3:30. Pressqwhen you are done.Keys <leader>oC l e 3:00 <CR> q
Try it in Neovim
:Org tutor properties - Insert a columnview block1:39
A columnview block writes the column view of a subtree into the file, as a table. Put the cursor on the
Report:line below and press<C-c><C-x>i, then<CR>at the prompt (localis the subtree the block is in).Keys <C-c><C-x>i <CR>
Try it in Neovim
:Org tutor properties - Update a columnview block1:47
Pack the boxesnow takes2:00, but the table below still says1:00. Put the cursor on its#+BEGIN:line and press<C-c><C-c>(or<leader>oxu): the table is written again, with the new times.Keys <C-c><C-c>
Try it in Neovim
:Org tutor properties
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
Properties are named values on a headline, such as a colour, an owner or how long a task will take. Column view shows them as a table over your outline, where you can edit them and see their sums.
- Properties: named values on headlines, and column view to see them.
1.1 Set a property
Put the cursor on
Coffee grinderand press<leader>op. Type the nameColorand<CR>, then the valueredand<CR>. A drawer with:Color: redappears under the headline.Keys <leader>op Color <CR> red <CR>
- <leader>op asks for a property name, then its value.
** 1.1 Set a property ✓ Put the cursor on =Coffee grinder= and press =<leader>op=. Type the name =Color= and =<CR>=, then the value =red= and =<CR>=. A drawer with =:Color: red= appears under the headline. *** Coffee grinder :PROPERTIES: :Color: red :END: ** 1.2 Cycle through allowed values ✗ A =:Size_ALL:= property lists the values =Size= may take, in its whole subtree (an =_ALL= property is inherited). Open the drawer of =Blue shirt= with =<Tab>= on its =:PROPERTIES:= line. Then on =:Size: M= press =<S-Right>=: it changes to the next allowed value, =L= (=<S-Left>= goes back). *** Shirts :PROPERTIES:... **** Blue shirt :PROPERTIES:... properties.org 28:5 Color: red
1.2 Cycle through allowed values
A
:Size_ALL:property lists the valuesSizemay take, in its whole subtree (an_ALLproperty is inherited). Open the drawer ofBlue shirtwith<Tab>on its:PROPERTIES:line. Then on:Size: Mpress<S-Right>: it changes to the next allowed value,L(<S-Left>goes back).Keys j <Tab> <S-Right>
- <Tab> on a folded drawer opens it.
- <S-Right> on a property moves to its next allowed value.
** 1.2 Cycle through allowed values ✓ A =:Size_ALL:= property lists the values =Size= may take, in its whole subtree (an =_ALL= property is inherited). Open the drawer of =Blue shirt= with =<Tab>= on its =:PROPERTIES:= line. Then on =:Size: M= press =<S-Right>=: it changes to the next allowed value, =L= (=<S-Left>= goes back). *** Shirts :PROPERTIES:... **** Blue shirt :PROPERTIES: :Size: L :END: ** 1.3 Pick an allowed value ✗ When a property has allowed values, =<leader>op= offers them in a menu. On =Red shirt=, set =Size= to =S=: press the key, type =Size= and =<CR>=, then pick =S=. *** Shirts :PROPERTIES:... properties.org 46:12 Color: red
1.3 Pick an allowed value
When a property has allowed values,
<leader>opoffers them in a menu. OnRed shirt, setSizetoS: press the key, typeSizeand<CR>, then pickS.Keys <leader>op Size <CR> 1 <CR>
- With allowed values, <leader>op offers them in a menu.
** 1.3 Pick an allowed value ✓ When a property has allowed values, =<leader>op= offers them in a menu. On =Red shirt=, set =Size= to =S=: press the key, type =Size= and =<CR>=, then pick =S=. *** Shirts :PROPERTIES:... **** Red shirt :PROPERTIES: :Size: S :END: ** 1.4 Set an effort ✗ =Effort= is the property for how long a task should take, as =H:MM=. The clock, the agenda and column view use it. On =Write the intro=, press =<leader>oxe=, type =0:45= and =<CR>=. *** TODO Write the intro ** 1.5 Delete a property ✗ On =Old lamp=, press =<leader>oP= and pick =Color=. The properties.org 58:6
1.4 Set an effort
Effortis the property for how long a task should take, asH:MM. The clock, the agenda and column view use it. OnWrite the intro, press<leader>oxe, type0:45and<CR>.Keys <leader>oxe 0:45 <CR>
- <leader>oxe sets the Effort property: hours and minutes.
** 1.4 Set an effort ✓ =Effort= is the property for how long a task should take, as =H:MM=. The clock, the agenda and column view use it. On =Write the intro=, press =<leader>oxe=, type =0:45= and =<CR>=. *** TODO Write the intro :PROPERTIES: :Effort: 0:45 :END: ** 1.5 Delete a property ✗ On =Old lamp=, press =<leader>oP= and pick =Color=. The drawer goes too, as nothing is left in it. *** Old lamp :PROPERTIES:... * Lesson 2: column view Column view draws the properties of a subtree as columns over its headlines. A =#+COLUMNS:= line sets the columns for the whole file: properties.org 68:10 Effort: 0:45
1.5 Delete a property
On
Old lamp, press<leader>oPand pickColor. The drawer goes too, as nothing is left in it.Keys <leader>oP 1 <CR>
- <leader>oP removes a property, and the drawer once empty.
** 1.5 Delete a property ✓ On =Old lamp=, press =<leader>oP= and pick =Color=. The drawer goes too, as nothing is left in it. *** Old lamp * Lesson 2: column view Column view draws the properties of a subtree as columns over its headlines. A =#+COLUMNS:= line sets the columns for the whole file: : #+COLUMNS: %25ITEM %Effort{:} %Owner Each =%Name= is a column and =ITEM= is the headline. A number before the name is the column's width, and ={:}= after it adds up the times of the children in their parent. A =:COLUMNS:= property sets the columns for one subtree, as in the trees below. Most properties belong to their own headline only: =COLUMNS= and the =_ALL= ones are among the few that are inherited. ** 2.1 Open column view ✗ On =Website= press =<leader>oC=. Its headlines become rows, properties.org 77:52.1 Open column view
On
Websitepress<leader>oC. Its headlines become rows, andWebsiteshows the sum of the efforts below it,3:30. Pressqto close the view again.Keys <leader>oC q
- <leader>oC shows the subtree's properties as columns.
- The parent row sums the efforts below it: 2:00 and 1:30 make 3:30.
- q closes column view and gives the headlines back.
** 2.1 Open column view ✓ On =Website= press =<leader>oC=. Its headlines become rows, and =Website= shows the sum of the efforts below it, =3:30=. Press =q= to close the view again. *** Website :PROPERTIES:... **** Design the pages :PROPERTIES:... **** Write the copy :PROPERTIES:... ** 2.2 Cycle a value in column view ✗ Open column view on =Garden=. =l= and =h= move across the columns, =j= and =k= across the rows. On the =Owner= column of =Dig the beds=, press =n= until it shows =Ben= (=p= goes back). Then =q= closes the view. *** Garden :PROPERTIES:... **** Dig the beds :PROPERTIES:... properties.org 97:5
2.2 Cycle a value in column view
Open column view on
Garden.landhmove across the columns,jandkacross the rows. On theOwnercolumn ofDig the beds, pressnuntil it showsBen(pgoes back). Thenqcloses the view.Keys <leader>oC l l n q
- l moves to the next column, n to the next allowed value.
- The new value is written in the drawer of Dig the beds.
*** Website :PROPERTIES:... **** Design the pages :PROPERTIES:... **** Write the copy :PROPERTIES:... ** 2.2 Cycle a value in column view ✓ Open column view on =Garden=. =l= and =h= move across the columns, =j= and =k= across the rows. On the =Owner= column of =Dig the beds=, press =n= until it shows =Ben= (=p= goes back). Then =q= closes the view. *** Garden :PROPERTIES:... **** Dig the beds :PROPERTIES:... ** 2.3 Edit a value and watch the sum ✗ Open column view on =Kitchen=. On the =Effort= column of =Paint the walls=, press =e=, type =3:00= and =<CR>=: the sum on =Kitchen= goes from =0:30= to =3:30=. Press =q= when you are done. properties.org 120:17
2.3 Edit a value and watch the sum
Open column view on
Kitchen. On theEffortcolumn ofPaint the walls, presse, type3:00and<CR>: the sum onKitchengoes from0:30to3:30. Pressqwhen you are done.Keys <leader>oC l e 3:00 <CR> q
- e edits the value under the cursor; the sum above follows.
** 2.3 Edit a value and watch the sum ✓ Open column view on =Kitchen=. On the =Effort= column of =Paint the walls=, press =e=, type =3:00= and =<CR>=: the sum on =Kitchen= goes from =0:30= to =3:30=. Press =q= when you are done. *** Kitchen :PROPERTIES:... **** Paint the walls :PROPERTIES: :Effort: 3:00 :END: **** Fix the tap :PROPERTIES:... ** 2.4 Insert a columnview block ✗ A columnview block writes the column view of a subtree into the file, as a table. Put the cursor on the =Report:= line below and press =<C-c><C-x>i=, then =<CR>= at the prompt (=local= is the subtree the block is in). *** Shop properties.org 134:20 Edit: 3:00
2.4 Insert a columnview block
A columnview block writes the column view of a subtree into the file, as a table. Put the cursor on the
Report:line below and press<C-c><C-x>i, then<CR>at the prompt (localis the subtree the block is in).Keys <C-c><C-x>i <CR>
- <C-c><C-x>i writes the column view into the file.
** 2.4 Insert a columnview block ✓ A columnview block writes the column view of a subtree into the file, as a table. Put the cursor on the =Report:= line below and press =<C-c><C-x>i=, then =<CR>= at the prompt (=local= is the subtree the block is in). *** Shop :PROPERTIES:... Report: #+BEGIN: columnview :hlines 1 :id local | ITEM | Effort | |-------------+--------| | Shop | 0:20 | | Order paint | 0:20 | #+END: **** Order paint :PROPERTIES: :Effort: 0:20 :END: ** 2.5 Update a columnview block ✗ properties.org 154:1 Capture columns (local, global, entry with :ID: property) [local]:
2.5 Update a columnview block
Pack the boxesnow takes2:00, but the table below still says1:00. Put the cursor on its#+BEGIN:line and press<C-c><C-c>(or<leader>oxu): the table is written again, with the new times.Keys <C-c><C-c>
- <C-c><C-c> on #+BEGIN: writes the table again, up to date.
** 2.5 Update a columnview block ✓ =Pack the boxes= now takes =2:00=, but the table below still says =1:00=. Put the cursor on its =#+BEGIN:= line and press =<C-c><C-c>= (or =<leader>oxu=): the table is written again, with the new times. *** Move :PROPERTIES:... #+BEGIN: columnview :hlines 1 :id local | ITEM | Effort | |----------------+--------| | Move | 2:00 | | Pack the boxes | 2:00 | #+END: **** Pack the boxes :PROPERTIES:... * What next That's properties and column view. From here: - =g?= lists every key, grouped by topic; =:h org-properties= properties.org 175:1 Tutor "properties" done! Next lesson: 7. Organize and find (:Org tutor organize)
The lesson: tutor/org/properties.org · the recording: properties.cast (asciicast v2)
org.nvim tutor 7: organize and find
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 12
- Welcome0:00
Notes pile up. This lesson shows how to keep a file in order: move entries where they belong (refile), put finished work out of the way (archive), and find things again: sparse trees, jumping to a heading, narrowing to one subtree and searching tags in the agenda.
Try it in Neovim
:Org tutor organize - Refile a task0:07
Put the cursor on
Buy stampsand press<leader>or. PickErrandsin the list: the task moves to the end ofErrands, the headline after this lesson.Keys <leader>or 2 <CR>
Try it in Neovim
:Org tutor organize - Copy instead of moving0:15
<leader>oRfiles a copy and keeps the original. OnRenew the passportpress<leader>oRand pickErrands: the task is now in both places.Keys <leader>oR 2 <CR>
Try it in Neovim
:Org tutor organize - Tag a subtree ARCHIVE0:23
On
Old ideaspress<leader>ohA. The ARCHIVE tag keeps a subtree folded (<Tab>leaves it closed) and out of the agenda, while it stays where it is. The same key removes the tag.Keys <leader>ohA <Tab>
Try it in Neovim
:Org tutor organize - Archive under the Archive sibling0:31
On
Fix the fencepress<C-c><C-x>A: it moves under anArchiveheadline next to it, which is made, with the ARCHIVE tag, the first time.Keys <C-c><C-x>A
Try it in Neovim
:Org tutor organize - Archive to a file0:39
On
Pay the rentpress<leader>o$: the subtree leaves this file fororganize.org_archive, next to it. The#+ARCHIVE:line or anARCHIVEproperty says where;archive_locationis the default.Keys <leader>o$
Try it in Neovim
:Org tutor organize - Show the TODO entries0:46
Press
<leader>o/and thent: only the open TODO entries of the file show.Water the gardenis DONE, so it folds away.Keys <leader>o/ t
Try it in Neovim
:Org tutor organize - Search for a word0:53
Press
<leader>o/,r, typeinvoiceand press<CR>: the entries with the word in their text open, the word highlighted.Keys <leader>o/ r invoice <CR>
Try it in Neovim
:Org tutor organize - Match a tag1:02
Press
<leader>o/,m, typephoneand press<CR>: the headlines taggedphoneshow. A match can combine tags:phone-work.Keys <leader>o/ m phone <CR>
Try it in Neovim
:Org tutor organize - Back to the whole file1:10
Press
<leader>o/and thenCto clear the highlights, and<S-Tab>until the whole file shows again.Keys <leader>o/ C <S-Tab> <S-Tab> <S-Tab>
Try it in Neovim
:Org tutor organize - Jump to a heading1:20
<leader>o.shows the outline of this file in a tab of its own. TypeWhat nextto search for it, press<CR>to end the search and<CR>again to jump there. The folds of this file stay as they were.Keys <leader>o. What next <CR> <CR>
Try it in Neovim
:Org tutor organize - Narrow to a subtree1:29
On
Packing listpress<leader>ohn: the subtree opens alone in an edit buffer. Add an item- Sunscreenat the end, then press<C-c>'to write it back and close it.Keys <leader>ohn G o - Sunscreen <Esc> <C-c>'
Try it in Neovim
:Org tutor organize - Search tags in the agenda1:44
The agenda searches tags across files. Press
<leader>oa, then<(this file only),m, typeerrandand press<CR>. OnReturn the bookspress<Tab>to jump to it.Keys <leader>oa < m errand <CR> <Tab>
Try it in Neovim
:Org tutor organize
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
Notes pile up. This lesson shows how to keep a file in order: move entries where they belong (refile), put finished work out of the way (archive), and find things again: sparse trees, jumping to a heading, narrowing to one subtree and searching tags in the agenda.
- Refile, archive and search, all tried out in this one file.
1.1 Refile a task
Put the cursor on
Buy stampsand press<leader>or. PickErrandsin the list: the task moves to the end ofErrands, the headline after this lesson.Keys <leader>or 2 <CR>
- <leader>or moves the subtree under a headline you pick.
** 1.1 Refile a task ✓ Put the cursor on =Buy stamps= and press =<leader>or=. Pick =Errands= in the list: the task moves to the end of =Errands=, the headline after this lesson. *** TODO Book the flights ** 1.2 Copy instead of moving ✗ =<leader>oR= files a copy and keeps the original. On =Renew the passport= press =<leader>oR= and pick =Errands=: the task is now in both places. *** TODO Renew the passport * Errands The target of Lesson 1: refiled entries land at the end of it. ** TODO Buy stamps * Lesson 2: archive Archiving puts done work out of the way, so the outline and the agenda stay short. Nothing is lost: archived entries keep their text. organize.org 30:10 Refiled "Buy stamps" to Errands
1.2 Copy instead of moving
<leader>oRfiles a copy and keeps the original. OnRenew the passportpress<leader>oRand pickErrands: the task is now in both places.Keys <leader>oR 2 <CR>
- <leader>oR files a copy and keeps the original.
** 1.2 Copy instead of moving ✓ =<leader>oR= files a copy and keeps the original. On =Renew the passport= press =<leader>oR= and pick =Errands=: the task is now in both places. *** TODO Renew the passport * Errands The target of Lesson 1: refiled entries land at the end of it. ** TODO Buy stamps ** TODO Renew the passport * Lesson 2: archive Archiving puts done work out of the way, so the outline and the agenda stay short. Nothing is lost: archived entries keep their text. ** 2.1 Tag a subtree ARCHIVE ✗ On =Old ideas= press =<leader>ohA=. The ARCHIVE tag keeps a subtree folded (=<Tab>= leaves it closed) and out of the agenda, while it stays where it is. The same key removes the tag. organize.org 37:10 Copied "Renew the passport" to Errands
2.1 Tag a subtree ARCHIVE
On
Old ideaspress<leader>ohA. The ARCHIVE tag keeps a subtree folded (<Tab>leaves it closed) and out of the agenda, while it stays where it is. The same key removes the tag.Keys <leader>ohA <Tab>
- <leader>ohA tags it ARCHIVE: it stays folded.
** 2.1 Tag a subtree ARCHIVE ✓ On =Old ideas= press =<leader>ohA=. The ARCHIVE tag keeps a subtree folded (=<Tab>= leaves it closed) and out of the agenda, while it stays where it is. The same key removes the tag. *** Old ideas :ARCHIVE:... ** 2.2 Archive under the Archive sibling ✗ On =Fix the fence= press =<C-c><C-x>A=: it moves under an =Archive= headline next to it, which is made, with the ARCHIVE tag, the first time. *** DONE Fix the fence *** TODO Paint the shed ** 2.3 Archive to a file ✗ On =Pay the rent= press =<leader>o$=: the subtree leaves this file for =organize.org_archive=, next to it. The =#+ARCHIVE:= line or an =ARCHIVE= property says where; =archive_location= is the default. *** DONE Pay the rent organize.org 54:5 Subtree is archived and stays closed. Use <C-c><C-Tab> to cycle it anyway.
2.2 Archive under the Archive sibling
On
Fix the fencepress<C-c><C-x>A: it moves under anArchiveheadline next to it, which is made, with the ARCHIVE tag, the first time.Keys <C-c><C-x>A
- <C-c><C-x>A moves it under the Archive sibling.
** 2.2 Archive under the Archive sibling ✓ On =Fix the fence= press =<C-c><C-x>A=: it moves under an =Archive= headline next to it, which is made, with the ARCHIVE tag, the first time. *** TODO Paint the shed *** Archive :ARCHIVE:... ** 2.3 Archive to a file ✗ On =Pay the rent= press =<leader>o$=: the subtree leaves this file for =organize.org_archive=, next to it. The =#+ARCHIVE:= line or an =ARCHIVE= property says where; =archive_location= is the default. *** DONE Pay the rent * Lesson 3: sparse trees A sparse tree folds the whole file down to the entries that match, with the headlines above them, and highlights the matches. =<leader>o/= shows the menu of searches. ** 3.1 Show the TODO entries ✗ organize.org 63:1 Subtree "Fix the fence" moved to archive sibling
2.3 Archive to a file
On
Pay the rentpress<leader>o$: the subtree leaves this file fororganize.org_archive, next to it. The#+ARCHIVE:line or anARCHIVEproperty says where;archive_locationis the default.Keys <leader>o$
- <leader>o$ moves it to the archive file.
** 2.3 Archive to a file ✓ On =Pay the rent= press =<leader>o$=: the subtree leaves this file for =organize.org_archive=, next to it. The =#+ARCHIVE:= line or an =ARCHIVE= property says where; =archive_location= is the default. * Lesson 3: sparse trees A sparse tree folds the whole file down to the entries that match, with the headlines above them, and highlights the matches. =<leader>o/= shows the menu of searches. ** 3.1 Show the TODO entries ✗ Press =<leader>o/= and then =t=: only the open TODO entries of the file show. =Water the garden= is DONE, so it folds away. *** TODO Call the plumber *** DONE Water the garden The roses too. ** 3.2 Search for a word ✗ Press =<leader>o/=, =r=, type =invoice= and press =<CR>=: the entries with the word in their text open, the word highlighted. organize.org 75:1 Subtree "Pay the rent" archived in ~/.local/share/nvim/org/tutor/organize.org_ar chive
3.1 Show the TODO entries
Press
<leader>o/and thent: only the open TODO entries of the file show.Water the gardenis DONE, so it folds away.Keys <leader>o/ t
- <leader>o/ t shows only the open TODO entries.
* Lesson 1: refile... ** 1.1 Refile a task... ✓ *** TODO Book the flights... ** 1.2 Copy instead of moving... ✓ *** TODO Renew the passport... * Errands... ** TODO Buy stamps ** TODO Renew the passport... * Lesson 2: archive... ** 2.2 Archive under the Archive sibling... ✓ *** TODO Paint the shed... * Lesson 3: sparse trees... ** 3.1 Show the TODO entries... ✓ *** TODO Call the plumber... * Lesson 4: jump and focus... ** 4.3 Search tags in the agenda... ✗ *** TODO Return the books :errand: *** TODO Pick up the parcel :errand:... * What next... organize.org 30:1 8 matches for TODO entries
3.2 Search for a word
Press
<leader>o/,r, typeinvoiceand press<CR>: the entries with the word in their text open, the word highlighted.Keys <leader>o/ r invoice <CR>
- r searches for a regexp and opens the entries that have it.
* Lesson 3: sparse trees... ** 3.2 Search for a word ✓ Press =<leader>o/=, =r=, type =invoice= and press =<CR>=: the entries with the word in their text open, the word highlighted. *** Shop Send the invoice to Anna. * Lesson 4: jump and focus... * What next... organize.org 89:32 2 matches for /invoice/
3.3 Match a tag
Press
<leader>o/,m, typephoneand press<CR>: the headlines taggedphoneshow. A match can combine tags:phone-work.Keys <leader>o/ m phone <CR>
- m matches tags: the headlines tagged phone show.
* Lesson 3: sparse trees... ** 3.3 Match a tag... ✓ *** Call the bank :phone:... * Lesson 4: jump and focus... * What next... organize.org 101:1 1 match for phone
3.4 Back to the whole file
Press
<leader>o/and thenCto clear the highlights, and<S-Tab>until the whole file shows again.Keys <leader>o/ C <S-Tab> <S-Tab> <S-Tab>
- C clears the highlights; <S-Tab> shows the whole file.
* Lesson 3: sparse trees A sparse tree folds the whole file down to the entries that match, with the headlines above them, and highlights the matches. =<leader>o/= shows the menu of searches. ** 3.1 Show the TODO entries ✓ Press =<leader>o/= and then =t=: only the open TODO entries of the file show. =Water the garden= is DONE, so it folds away. *** TODO Call the plumber *** DONE Water the garden The roses too. ** 3.2 Search for a word ✓ Press =<leader>o/=, =r=, type =invoice= and press =<CR>=: the entries with the word in their text open, the word highlighted. *** Shop Send the invoice to Anna. *** Garden Nothing to send here. organize.org 75:1 SHOW ALL
4.1 Jump to a heading
<leader>o.shows the outline of this file in a tab of its own. TypeWhat nextto search for it, press<CR>to end the search and<CR>again to jump there. The folds of this file stay as they were.Keys <leader>o. What next <CR> <CR>
- <leader>o. shows the outline; type to search, <CR> to jump.
Type =What next= to search for it, press =<CR>= to end the search and =<CR>= again to jump there. The folds of this file stay as they were. ** 4.2 Narrow to a subtree ✗ On =Packing list= press =<leader>ohn=: the subtree opens alone in an edit buffer. Add an item =- Sunscreen= at the end, then press =<C-c>'= to write it back and close it. *** Packing list - Passport - Charger ** 4.3 Search tags in the agenda ✗ The agenda searches tags across files. Press =<leader>oa=, then =<= (this file only), =m=, type =errand= and press =<CR>=. On =Return the books= press =<Tab>= to jump to it. *** TODO Return the books :errand: *** TODO Pick up the parcel :errand: * What next organize.org 136:3
4.2 Narrow to a subtree
On
Packing listpress<leader>ohn: the subtree opens alone in an edit buffer. Add an item- Sunscreenat the end, then press<C-c>'to write it back and close it.Keys <leader>ohn G o - Sunscreen <Esc> <C-c>'
- <leader>ohn opens the subtree alone, in an edit buffer.
- <C-c>' writes it back and closes the edit buffer.
** 4.2 Narrow to a subtree ✓ On =Packing list= press =<leader>ohn=: the subtree opens alone in an edit buffer. Add an item =- Sunscreen= at the end, then press =<C-c>'= to write it back and close it. *** Packing list - Passport - Charger - Sunscreen ** 4.3 Search tags in the agenda ✗ The agenda searches tags across files. Press =<leader>oa=, then =<= (this file only), =m=, type =errand= and press =<CR>=. On =Return the books= press =<Tab>= to jump to it. *** TODO Return the books :errand: *** TODO Pick up the parcel :errand: * What next That's how to keep a file in order. From here: organize.org 124:5
4.3 Search tags in the agenda
The agenda searches tags across files. Press
<leader>oa, then<(this file only),m, typeerrandand press<CR>. OnReturn the bookspress<Tab>to jump to it.Keys <leader>oa < m errand <CR> <Tab>
- In the agenda menu, m searches tags; < keeps it to this file.
- <Tab> jumps to the entry in its file.
** 4.3 Search tags in the agenda ✓ The agenda searches tags across files. Press =<leader>oa=, then =<= (this file only), =m=, type =errand= and press =<CR>=. On =Return the books= press =<Tab>= to jump to it. *** TODO Return the books :errand: *** TODO Pick up the parcel :errand: * What next organize.org 134:1 Headlines with TAGS match: errand Press ‘1 r’ to search again organize: TODO Return the books :errand: organize: TODO Pick up the parcel :errand: agenda 3:20 Tutor "organize" done! Next lesson: 8. Code and export (:Org tutor code)
The lesson: tutor/org/organize.org · the recording: organize.cast (asciicast v2)
org.nvim tutor 8: code and export
Turn your phone sideways for a bigger terminal, or read the transcript.
Exercises 12
- Welcome0:00
An org file can hold code that runs, with its results written right under it, and any part of the file exports to Markdown, plain text, HTML and more. The code here is Lua: it needs nothing installed, as Lua blocks run inside Neovim.
Try it in Neovim
:Org tutor code - Run a block0:07
Put the cursor on the
#+begin_srcline below, press<C-c><C-c>and answery: the value the code returns appears under it.Keys <C-c><C-c> y
Try it in Neovim
:Org tutor code - Print instead of return0:15
The result is the value the code returns (
:results value, the default). With:results outputit is what the code prints. Run this block.Keys <C-c><C-c> y
Try it in Neovim
:Org tutor code - Get a table back0:24
A list of rows comes back as an org table, which you can edit, sort or use in a formula. Run this block.
Keys <C-c><C-c> y
Try it in Neovim
:Org tutor code - Write a block0:31
On the empty line under
Your block, press<leader>oibands: an empty source block appears, with the cursor where its language goes. Typelua, press<Esc>, open a line witho, writereturn 1 + 2,<Esc>, and run it.Keys j <leader>oib s lua <Esc> o return 1 + 2 <Esc> <C-c><C-c> y
Try it in Neovim
:Org tutor code - Edit a block in its own window0:47
<leader>o'in a block opens its code in a window of its own, as a Lua buffer: indenting, completion and your Lua tools work there. ChangeWorldto your name, then press<C-c>'to write it back into the block.Keys <leader>o' ciw Ada <Esc> <C-c>'
Try it in Neovim
:Org tutor code - Read a table1:00
The block below adds up the
pricecolumn of the table namedprices(=:var data=prices=: its rows, without the header). Run it.Keys <C-c><C-c> y
Try it in Neovim
:Org tutor code - Call a named block1:08
greetis a named block, with"you"as the defaultname. A#+CALL:line runs it with other values: run the#+CALL:line.Keys <C-c><C-c> y
Try it in Neovim
:Org tutor code - Use another block's result1:16
=:var n=dice()= runs the block named
diceand hands its value over. Run the second block: you are asked for each of the two,ytwice.Keys <C-c><C-c> y y
Try it in Neovim
:Org tutor code - Tangle a block to a file1:24
Press
<leader>obtanywhere in this file: the block below is written tohello.lua, next to this copy (in Neovim's data directory). Then press<CR>on the link to see the file, and:qto close it.Keys <leader>obt <CR> :q<CR>
Try it in Neovim
:Org tutor code - Export to Markdown1:36
Put the cursor on
Trip notes, press<leader>oe,s,mandM: its Markdown opens in a new window.:qcloses it.Keys <leader>oe s m M :q<CR>
Try it in Neovim
:Org tutor code - Export options1:48
Plain text (
tA) starts with the title and author, then a table of contents, and numbers the sections. On the empty line below, write#+OPTIONS: toc:nil num:nil author:nilto turn off the contents, the numbers and the author: the line holds for the whole file, wherever it is. Then exportPacking:<leader>oe,s,t,A.Keys j i #+OPTIONS: toc:nil num:nil author:nil <Esc> <leader>oe s t A :q<CR>
Try it in Neovim
:Org tutor code - Keep a subtree out2:10
A headline tagged
noexportis left out of exports, with its subtree. TagPrivatewith<leader>ot(typenoexport,<CR>), then exportDiaryto Markdown:Privateis not in it.Keys <leader>ot noexport <CR> <leader>oe s m M :q<CR>
Try it in Neovim
:Org tutor code
Transcript the exercises, their keys and captions, and the screen at the end of each, as text
Welcome
An org file can hold code that runs, with its results written right under it, and any part of the file exports to Markdown, plain text, HTML and more. The code here is Lua: it needs nothing installed, as Lua blocks run inside Neovim.
- Code that runs inside your notes, and exports of them.
1.1 Run a block
Put the cursor on the
#+begin_srcline below, press<C-c><C-c>and answery: the value the code returns appears under it.Keys <C-c><C-c> y
- <C-c><C-c> runs the block; y answers the question before it runs.
** 1.1 Run a block ✓ Put the cursor on the =#+begin_src= line below, press =<C-c><C-c>= and answer =y=: the value the code returns appears under it. *** The answer #+begin_src lua return 6 * 7 #+end_src #+RESULTS: : 42 ** 1.2 Print instead of return ✗ The result is the value the code returns (=:results value=, the default). With =:results output= it is what the code prints. Run this block. *** Greetings #+begin_src lua :results output print("Hello from Lua") code.org 33:11.2 Print instead of return
The result is the value the code returns (
:results value, the default). With:results outputit is what the code prints. Run this block.Keys <C-c><C-c> y
- With :results output the result is what the code prints.
** 1.2 Print instead of return ✓ The result is the value the code returns (=:results value=, the default). With =:results output= it is what the code prints. Run this block. *** Greetings #+begin_src lua :results output print("Hello from Lua") print("and hello again") #+end_src #+RESULTS: : Hello from Lua : and hello again ** 1.3 Get a table back ✗ A list of rows comes back as an org table, which you can edit, sort or use in a formula. Run this block. *** Shopping #+begin_src lua code.org 46:11.3 Get a table back
A list of rows comes back as an org table, which you can edit, sort or use in a formula. Run this block.
Keys <C-c><C-c> y
- A list of rows comes back as an org table.
** 1.3 Get a table back ✓ A list of rows comes back as an org table, which you can edit, sort or use in a formula. Run this block. *** Shopping #+begin_src lua return { { "bread", 2 }, { "cheese", 1 }, { "apples", 6 } } #+end_src #+RESULTS: | bread | 2 | | cheese | 1 | | apples | 6 | ** 1.4 Write a block ✗ On the empty line under =Your block=, press =<leader>oib= and =s=: an empty source block appears, with the cursor where its language goes. Type =lua=, press =<Esc>=, open a line with =o=, write =return 1 + 2=, =<Esc>=, and run it. code.org 60:11.4 Write a block
On the empty line under
Your block, press<leader>oibands: an empty source block appears, with the cursor where its language goes. Typelua, press<Esc>, open a line witho, writereturn 1 + 2,<Esc>, and run it.Keys j <leader>oib s lua <Esc> o return 1 + 2 <Esc> <C-c><C-c> y
- <leader>oib inserts a block; s makes it a source block.
** 1.4 Write a block ✓ On the empty line under =Your block=, press =<leader>oib= and =s=: an empty source block appears, with the cursor where its language goes. Type =lua=, press =<Esc>=, open a line with =o=, write =return 1 + 2=, =<Esc>=, and run it. *** Your block #+begin_src lua return 1 + 2 #+end_src #+RESULTS: : 3 ** 1.5 Edit a block in its own window ✗ =<leader>o'= in a block opens its code in a window of its own, as a Lua buffer: indenting, completion and your Lua tools work there. Change =World= to your name, then press =<C-c>'= to write it back into the block. code.org 78:14
1.5 Edit a block in its own window
<leader>o'in a block opens its code in a window of its own, as a Lua buffer: indenting, completion and your Lua tools work there. ChangeWorldto your name, then press<C-c>'to write it back into the block.Keys <leader>o' ciw Ada <Esc> <C-c>'
- <leader>o' opens the code in a Lua buffer of its own.
- <C-c>' writes the change back into the block.
** 1.5 Edit a block in its own window ✓ =<leader>o'= in a block opens its code in a window of its own, as a Lua buffer: indenting, completion and your Lua tools work there. Change =World= to your name, then press =<C-c>'= to write it back into the block. *** Who #+begin_src lua return "Hello, Ada" #+end_src * Lesson 2: blocks that work together The header argument =:var name=value= gives a block a variable. The value can be a number, a string, a table of this file or the result of another block, both found by their =#+NAME:=. ** 2.1 Read a table ✗ The block below adds up the =price= column of the table named =prices= (=:var data=prices=: its rows, without the header). Run it. *** Prices code.org 92:20
2.1 Read a table
The block below adds up the
pricecolumn of the table namedprices(=:var data=prices=: its rows, without the header). Run it.Keys <C-c><C-c> y
- :var data=prices hands the table to the block as a list of rows.
** 2.1 Read a table ✓ The block below adds up the =price= column of the table named =prices= (=:var data=prices=: its rows, without the header). Run it. *** Prices #+NAME: prices | item | price | |--------+-------| | bread | 3 | | cheese | 5 | | apples | 4 | #+begin_src lua :var data=prices local total = 0 for _, row in ipairs(data) do total = total + row[2] end return total #+end_src #+RESULTS: code.org 112:12.2 Call a named block
greetis a named block, with"you"as the defaultname. A#+CALL:line runs it with other values: run the#+CALL:line.Keys <C-c><C-c> y
- #+CALL runs the named block with the values it gives.
** 2.2 Call a named block ✓ =greet= is a named block, with ="you"= as the default =name=. A =#+CALL:= line runs it with other values: run the =#+CALL:= line. *** Greeter #+NAME: greet #+begin_src lua :var name="you" return "Hello, " .. name #+end_src #+CALL: greet(name="Neovim") #+RESULTS: : Hello, Neovim ** 2.3 Use another block's result ✗ =:var n=dice()= runs the block named =dice= and hands its value over. Run the second block: you are asked for each of the two, =y= twice. *** Dice #+NAME: dice code.org 133:1
2.3 Use another block's result
=:var n=dice()= runs the block named
diceand hands its value over. Run the second block: you are asked for each of the two,ytwice.Keys <C-c><C-c> y y
- dice runs first, and its value becomes n.
** 2.3 Use another block's result ✓ =:var n=dice()= runs the block named =dice= and hands its value over. Run the second block: you are asked for each of the two, =y= twice. *** Dice #+NAME: dice #+begin_src lua return 4 #+end_src #+begin_src lua :var n=dice() return "Double: " .. n * 2 #+end_src #+RESULTS: : Double: 8 * Lesson 3: tangle Tangling writes the code of blocks to the file their =:tangle= header names: a config kept in org next to its notes, a script, a module. code.org 148:1
3.1 Tangle a block to a file
Press
<leader>obtanywhere in this file: the block below is written tohello.lua, next to this copy (in Neovim's data directory). Then press<CR>on the link to see the file, and:qto close it.Keys <leader>obt <CR> :q<CR>
- <leader>obt writes each block to the file its :tangle names.
- The link opens the file it wrote; :q closes it.
** 3.1 Tangle a block to a file ✓ Press =<leader>obt= anywhere in this file: the block below is written to =hello.lua=, next to this copy (in Neovim's data directory). Then press =<CR>= on the link to see the file, and =:q= to close it. *** Script #+begin_src lua :tangle hello.lua print("Hello from a tangled file") #+end_src file:hello.lua * Lesson 4: export =<leader>oe= opens the export menu: =m= Markdown, =h= HTML, =t= plain text, =l= LaTeX and more. In each, the upper-case key exports to a buffer you can read or copy, the lower-case one to a file next to this one. =s= in the menu exports only the subtree at the cursor. ** 4.1 Export to Markdown ✗ Put the cursor on =Trip notes=, press =<leader>oe=, =s=, =m= and =M=: code.org 170:3 :q4.1 Export to Markdown
Put the cursor on
Trip notes, press<leader>oe,s,mandM: its Markdown opens in a new window.:qcloses it.Keys <leader>oe s m M :q<CR>
- <leader>oe opens the export menu; s limits it to this subtree.
- M exports to a Markdown buffer, in a new window.
** 4.1 Export to Markdown ✓ Put the cursor on =Trip notes=, press =<leader>oe=, =s=, =m= and =M=: its Markdown opens in a new window. =:q= closes it. *** Trip notes Pack *light* and bring a /good/ book. **** Monday Train to the coast. **** Tuesday Walk to the lighthouse. ** 4.2 Export options ✗ Plain text (=t= =A=) starts with the title and author, then a table of contents, and numbers the sections. On the empty line below, write =#+OPTIONS: toc:nil num:nil author:nil= to turn off the contents, the numbers and the author: the line holds for the whole file, wherever it is. Then export =Packing=: =<leader>oe=, =s=, =t=, =A=. *** Packing **** Clothes code.org 182:5 :q
4.2 Export options
Plain text (
tA) starts with the title and author, then a table of contents, and numbers the sections. On the empty line below, write#+OPTIONS: toc:nil num:nil author:nilto turn off the contents, the numbers and the author: the line holds for the whole file, wherever it is. Then exportPacking:<leader>oe,s,t,A.Keys j i #+OPTIONS: toc:nil num:nil author:nil <Esc> <leader>oe s t A :q<CR>
- An #+OPTIONS line sets how the whole file exports.
- A gives plain text in a buffer: no contents, numbers or author.
** 4.2 Export options ✓ Plain text (=t= =A=) starts with the title and author, then a table of contents, and numbers the sections. On the empty line below, write =#+OPTIONS: toc:nil num:nil author:nil= to turn off the contents, the numbers and the author: the line holds for the whole file, wherever it is. Then export =Packing=: =<leader>oe=, =s=, =t=, =A=. #+OPTIONS: toc:nil num:nil author:nil *** Packing **** Clothes A coat and two shirts. **** Books One novel. ** 4.3 Keep a subtree out ✗ A headline tagged =noexport= is left out of exports, with its subtree. Tag =Private= with =<leader>ot= (type =noexport=, =<CR>=), then export =Diary= to Markdown: =Private= is not in it. *** Diary **** Morning code.org 197:5 :q
4.3 Keep a subtree out
A headline tagged
noexportis left out of exports, with its subtree. TagPrivatewith<leader>ot(typenoexport,<CR>), then exportDiaryto Markdown:Privateis not in it.Keys <leader>ot noexport <CR> <leader>oe s m M :q<CR>
- The noexport tag keeps a headline and its subtree out of exports.
** 4.3 Keep a subtree out ✓ A headline tagged =noexport= is left out of exports, with its subtree. Tag =Private= with =<leader>ot= (type =noexport=, =<CR>=), then export =Diary= to Markdown: =Private= is not in it. *** Diary **** Morning Coffee by the sea. **** Private :noexport: Not for the blog. * What next That's it for code and export. From here: - =g?= lists every key, and =<leader>obh= the keys of source blocks. =:h org-babel= is the manual for code, with every header argument, and =:h org-export= the one for export. - Other languages (shell, Python, ...) run the same way, once their program is installed: =:h org-babel-languages=. - examples/00-index.org links to one file per feature, source blocks and export among them. code.org 208:5 :q
The lesson: tutor/org/code.org · the recording: code.cast (asciicast v2)
Try the syntax
Type some Org below, or start from an example: headlines, TODO keywords, tags, lists, checkboxes, tables, blocks, links, dates and markup are highlighted as you type. (This box only colors text; the editing happens in Neovim.)
#+TITLE: My first org file * TODO Write the report :work: SCHEDULED: <2026-10-12 Mon> DEADLINE: <2026-10-16 Fri> ** [#A] Gather the numbers [1/2] - [X] Sales - [ ] Costs * DONE Call Bob CLOSED: [2026-10-11 Sun 17:02] Notes with *bold*, /italic/, _underline_, =verbatim= and ~code~. # a comment#+NAME: stock | Fruit | Count | Price | Total | |--------+-------+-------+-------| | Apple | 3 | 0.50 | 1.50 | | Orange | 12 | 0.25 | 3.00 | |--------+-------+-------+-------| | Sum | 15 | | 4.50 | #+TBLFM: $4=$2*$3;%.2f::@>$2=vsum(@I..@II)::@>$4=vsum(@I..@II);%.2f* Fruit, in Lua #+begin_src lua :results output local fruits = { "apple", "pear" } for i, f in ipairs(fruits) do print(i, f) end #+end_src #+RESULTS: : 1 apple : 2 pear #+begin_quote Code and its output, in one file. #+end_quote* TODO Plan the trip <2026-10-16 Fri 09:00> DEADLINE: <2026-10-20 Tue -2d> SCHEDULED: <2026-10-14 Wed> :PROPERTIES: :CREATED: [2026-10-12 Mon 08:30] :END: - Trains: [[https://example.org/trains][the timetable]] - See [[*Packing list]] and [[file:notes.org::*Ideas][my ideas]] - Every week <2026-10-12 Mon +1w>; away <2026-10-16 Fri>--<2026-10-18 Sun> - A footnote[fn:1] and a plain link: https://org-nvim.com * Packing list [fn:1] Footnotes work too.Ready for the real thing?
Install org.nvim and run :Org tutor: the same lessons, in your editor, with every exercise checked as you do it.