Installation
Requires Neovim 0.11 or later. Optional tools:
pandoc DOCX, EPUB, RST, ... export
LibreOffice ODT conversion (export.odt.preferred_output_format)
unzip ODT styles taken from an .odt/.ott file
latexmk / pdflatex native PDF export
makeinfo Info export (Texinfo files need nothing)
interpreters whatever languages Babel should run
lazy.nvim / LazyVim:
{
"xheisenbugx/org.nvim", -- or: dir = "~/path/to/checkout", name = "org.nvim"
main = "org",
lazy = false,
opts = {
org_directory = "~/org",
agenda_files = { "~/org/**/*.org" },
default_notes_file = "~/org/refile.org",
},
}
Other plugin managers: add the plugin to 'runtimepath' and call:
require("org").setup({ ... })
Option defaults follow Emacs Org 9.8 (see org-config): with no agenda_files the agenda and refile see only the current file until you add some (<C-c>[ adds the current file), todo_keywords is TODO | DONE, nothing is logged on DONE and files open fully expanded. A common starting point closer to many Emacs setups:
require("org").setup({
agenda_files = { "~/org" },
default_notes_file = "~/org/refile.org",
todo_keywords = { "TODO(t) NEXT(n) | DONE(d)" },
log_done = "time",
log_into_drawer = true,
startup_folded = "overview",
})
If setup() is never called, the defaults are used the first time an org buffer is opened or :Org is run.
:Org version shows the org.nvim release, its git version and where it is installed (org-version); with a count it inserts that at the cursor. The release is the latest vX.Y.Z git tag of the checkout, or "unreleased" when there is none (or org.nvim isn't a git checkout).
Run :checkhealthorgto check paths and external tools, and to list options given to setup() that org.nvim doesn't know (typos, or action names inmappingsthat don't exist). Inside tmux, Ghostty, kitty, WezTerm or Alacritty it also checks that the terminal can send the keys org maps: - <C-CR>, <S-CR>, <C-,> and the like need extended keys (CSI u), which tmux passes on only withset -s extended-keys onand aterminal-featuresentry withextkeysfor the outer terminal (read when a client attaches) - the terminal's keybinds must not take a mapped key: Ghostty'sctrl+tab, kitty'sctrl+shift+enterandctrl+shift+arrows, WezTerm'sALT+EnterandCTRL+SHIFT+arrows, ... (read from the terminal itself when its CLI is installed, else from its config file and the known defaults) - on macOS, Option must send Alt for the <M-...> keys Inside tmux the terminal is the one of the attached client.
Windows
org.nvim runs on Windows as on Linux and macOS; the test suite runs on Windows in CI. Paths may use \ or /, a drive (C:\notes) or a UNC share (\\server\share); org.nvim works with / internally and writes files with LF line endings. ~ is $HOME when set, else %USERPROFILE%. What differs:
- Desktop notifications (org-notifications, pomodoro) are toasts shown through
powershell.exe(Windows PowerShell, part of Windows); their sender is "Windows PowerShell". yank_mediareads images and files copied or cut in Explorer from the clipboard throughpowershell.exe.- The
orgcommand line isbin\org.cmd, and:Org cli_installwrites anorg.cmdlauncher into its directory (symlinks need administrator rights). The git merge driver isbin\org-merge.cmd. - The
icsextension converts time zones with a bundled table of each zone's current rule, as Windows has no zoneinfo files: times far in the past may use today's rule of a zone that changed since. TZwith a zone name ("Europe/Berlin") has no effect: the Windows C library only takes the old "EST5EDT" form. org.nvim uses the system's time zone.:tangle-modeand:shebangcan't make a file executable: Windows has no Unix file modes.- org-crypt needs GnuPG for Windows (or Gpg4win) on %PATH%. The
gpgof Git for Windows can't ask for passphrases outside its own terminal; a call that hangs is stopped after a minute. - Babel runs
sh/bashblocks with theshorbashon %PATH% (Git for Windows, MSYS2, WSL'sbash.exe), like Emacs.