Orgmode clone written in Lua for Neovim 0.9.4+
Setup • Docs • Showcase • Treesitter • Troubleshoot • Plugins • Contributing • Kudos
- Neovim 0.9.4 or later
Use your favourite package manager:
lazy.nvim (recommended)
{
'nvim-orgmode/orgmode',
event = 'VeryLazy',
ft = { 'org' },
config = function()
-- Setup orgmode
require('orgmode').setup({
org_agenda_files = '~/orgfiles/**/*',
org_default_notes_file = '~/orgfiles/refile.org',
})
-- NOTE: If you are using nvim-treesitter with ~ensure_installed = "all"~ option
-- add ~org~ to ignore_install
-- require('nvim-treesitter.configs').setup({
-- ensure_installed = 'all',
-- ignore_install = { 'org' },
-- })
end,
}
Note that this setup is not needed for lazy.nvim since instructions above covers full setup
-- init.lua
require('orgmode').setup({
org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
org_default_notes_file = '~/Dropbox/org/refile.org',
})
-- NOTE: If you are using nvim-treesitter with ~ensure_installed = "all"~ option
-- add ~org~ to ignore_install
-- require('nvim-treesitter.configs').setup({
-- ensure_installed = 'all',
-- ignore_install = { 'org' },
-- })
Or if you are using ~init.vim~, wrap the above snippet like so:
" init.vim
lua << EOF
require('orgmode').setup({
org_agenda_files = {'~/Dropbox/org/*', '~/my-orgs/**/*'},
org_default_notes_file = '~/Dropbox/org/refile.org',
})
EOF
blink.cmp
require('blink.cmp').setup({
sources = {
completion = {
enabled_providers = { 'lsp', 'path', 'snippets', 'buffer', 'orgmode' }
-- Or if you want to use only this provider in org files
-- enabled_providers = function()
-- if vim.bo.filetype == 'org' then
-- return { 'orgmode' }
-- end
-- return { 'lsp', 'path', 'snippets', 'buffer' }
-- end
},
providers = {
orgmode = {
name = 'Orgmode',
module = 'orgmode.org.autocompletion.blink',
},
},
},
})
completion-nvim
vim.g.completion_chain_complete_list = {
org = {
{ mode = 'omni'},
},
}
-- add additional keyword chars
vim.cmd[[autocmd FileType org setlocal iskeyword+=:,#,+]]
Or just use omnifunc
via <C-x><C-o>
- Open agenda prompt:
<Leader>oa
- Open capture prompt:
<Leader>oc
- In any orgmode buffer press
g?
for help
If you are new to Orgmode, see Getting started section in the Docs or a hands-on tutorial in our wiki.
The built-in treesitter parser is used for parsing the org files.
- LaTex is still highlighted through syntax file
Make sure you are not overriding indentexpr in Org buffers with nvim-treesitter indentation
Tree-sitter parser might not be installed.
Try running :lua require('orgmode.config'):reinstall_grammar()
to reinstall it.
Dates are generated with Lua native date support, and it reads your current locale when creating them.
To use different locale you can add this to your init.lua
:
vim.cmd('language en_US.utf8')
or init.vim
language en_US.utf8
Just make sure you have en_US
locale installed on your system. To see what you have available on the system you can
start the command :language
and press <TAB>
to autocomplete possible options.
Links are concealed with Vim’s conceal feature (see :help conceal
). To enable concealing, add this to your init.lua
:
vim.opt.conceallevel = 2
vim.opt.concealcursor = 'nc'
Or if you are using init.vim
:
set conceallevel=2
set concealcursor=nc
If you are using Windows, paths are by default written with backslashes.
To use forward slashes, you must enable shellslash
option
(see :help shellslash
).
vim.opt.shellslash = true
Or if you are using init.vim
:
set shellslash
More info on issue #281
- Agenda view
- Search by tags/keyword
- Clocking time
- Repeatable dates, date and time ranges
- Capturing to default notes file/destination
- Archiving (archive file or ARCHIVE tag)
- Exporting (via
emacs
,pandoc
and custom export options) - Notifications (experimental, see issue #49)
- Calendar popup for easier navigation and date updates
- Various org file mappings:
- Promote/Demote
- Change TODO state
- Change dates
- Insert/Move/Refile headlines
- Change tags
- Toggle checkbox state
- Remote editing from agenda view
- Repeatable mapping via vim-repeat
- Agenda prompt:
- Agenda view (
a
):- Ability to show daily(
vd
)/weekly(vw
)/monthly(vm
)/yearly(vy
) agenda - Support for various date settings:
- DEADLINE: Warning settings - example:
<2021-06-11 Fri 11:00 -1d>
- SCHEDULED: Delay setting - example:
<2021-06-11 Fri 11:00 -2d>
- All dates - Repeater settings:
- Cumulate type:
<2021-06-11 Fri 11:00 +1w>
- Catch-up type:
<2021-06-11 Fri 11:00 ++1w>
- Restart type:
<2021-06-11 Fri 11:00 .+1w>
- Cumulate type:
- Time ranges - example:
<2021-06-11 Fri 11:00-12:30>
- Date ranges - example:
<2021-06-11 Fri 11:00-12:30>--<2021-06-13 Sun 22:00>
- DEADLINE: Warning settings - example:
- Properly lists tasks according to defined dates (DEADLINE,SCHEDULED,Plain date)
- Navigate forward (
f
)/backward(b
) or jump to specific date (J
) - Go to task under cursor in current window(
<CR>
) or other window(<TAB>
) - Print category from “:CATEGORY:” property if defined
- Ability to show daily(
- List tasks that have “TODO” state (
t
): - Find headlines matching tag(s) (
m
): - Search for headlines (and it’s content) for a query (
s
): - Advanced search for tags/todo kewords/properties
- Notifications (experimental, see issue #49)
- Clocking time
- Agenda view (
- Capture:
- Define custom templates
- Fast capturing to default notes file via
<C-c>
- Capturing to specific destination
<Leader>or
- Abort capture with
<Leader>ok
- Org files
- Clocking time
- Refile to destination/headline:
<Leader>or
- Increase/Decrease date under cursor:
<C-a>
/<C-x>
- Change date under cursor via calendar popup:
cid
- Change headline TODO state: forward
cit
or backwardciT
- Open hyperlink or date under cursor:
<Leader>oo
- Toggle checkbox:
<C-space>
- Toggle current line to headline and vice versa:
<Leader>o*
- Toggle folding of current headline:
<TAB>
- Toggle folding in whole file:
<S-TAB>
- Archive headline:
<Leader>o$
- Add archive tag:
<Leader>oA
- Change tags:
<Leader>ot
- Promote headline:
<<
- Demote headline:
>>
- Promote subtree:
<s
- Demote subtree:
>s
- Add headline/list item/checkbox:
<Leader><CR>
- Insert heading after current heading and it’s content:
<Leader>oih
- Insert TODO heading after current line:
<Leader>oiT
- Insert TODO heading after current heading and it’s content:
<Leader>oit
- Move headline up:
<Leader>oK
- Move headline down:
<Leader>oJ
- Highlighted code blocks (
#+BEGIN_SRC filetype
) Exporting (viaemacs
,pandoc
and custom export options)
Link to detailed documentation: DOCS
- org-roam.nvim - Implementation of Org-roam knowledge management system
- telescope-orgmode.nvim - Telescope extension to find headlines, refile and insert links
- org-bullets.nvim - Show org mode bullets as UTF-8 characters
- headlines.nvim - Add few highlight options for code blocks and headlines
- sniprun - For code evaluation in blocks
- vim-table-mode - For table support
See all available plugins on orgmode-nvim
If you built a plugin please add “orgmode-nvim” topic to it.
NOTE: None of the Emacs Orgmode plugins will be built into nvim-orgmode. Anything that’s a separate plugin in Emacs Orgmode should be a separate plugin in here. The point of this plugin is to provide functionality that’s built into Emacs Orgmode core, and a good foundation for external plugins.
If you want to build a plugin, post suggestions and improvements on Plugins infrastructure issue.
Documentation for our work-in-progress API can be found here
See CONTRIBUTING.md
If you are just starting out with orgmode, have a look at the Getting Started section in our wiki.
Vim documentation is auto generated from DOCS.md file with md2vim.
Hosted documentation is on: https://nvim-orgmode.github.io/
- ✅ Support searching by properties
- 🔳 Improve checkbox hierarchy
- ✅ Support todo keyword faces
- ✅ Support clocking work time
- ✅ Improve folding
- ✅ Support exporting (via existing emacs tools)
- 🔳 Support archiving to specific headline
- ✅ Support tables
- 🔳 Support diary format dates
- 🔳 Support evaluating code blocks
- @dhruvasagar and his vim-dotoo plugin that got me started using orgmode. Without him this plugin would not happen.
- @milisims for writing a treesitter parser for org
- vim-orgmode for some parts of the code (mostly syntax)