Simple neovim zettelkasten functionality as a lua plugin.
Marty Oehme
972845505f
`link.new` will create a correctly formatted to link for a zettel which does *not exist* yet, by adding its own anchor. |
||
---|---|---|
autoload | ||
lua/zettelkasten | ||
plugin | ||
README.md |
Zettelkasten.nvim
To develop / debug:
start neovim with nvim --cmd "set rtp+=$(pwd)" .
to automatically load the files in project dir as if they were on path
TODO: needed functionality
- note creation (new anchor)
- create anchor
- unique anchor creation
- create link (md / wiki)
- create anchor
- note listing (anchors / titles, no anchor)
- list anchors
- list filenames
- link following (to existing anchor)
- link creation (to existing note)
- list existing
- create link (md / wiki)
- link switching (to another existing note)
- note search (title / full-text)
- jump to zettel (open existing anchor)
- select by anchor
- select by (fuzzy) title match
- options
- zettel anchor separator
- zettel extension
- link style (wiki/markdown)
- custom link style?
- recursive dir lookup for zettel
- zettel anchor regex
TODO: nice-to-haves
-
completion engine (e.g. for
completion-nvim
, look in completion_buffers/completion-tags for reference) -
zettel caching for big directories
-
backlinks (via rg for filename anchor?)
- keep tree of notes cached?
-
zettel maintenance
- fix malformed anchors
- add missing anchors
- 'rename' anchor (goes against stability?)
- recognize duplicate anchors (in directory, when listing, etc)
- provide option to rename and automatically change backlinks
-
zettel 'lens' (preview first headline + content of linked zettel through floating window etc, on keypress)
-
anchor creation
- must be unique
- default: 10 digits, usually current date+time (YYMMDDHHmm)
- but, if multiple links created within one minute (or other circumstances), this would duplicate
- thus, duplicate-check before creating a new anchor
- if duplicated, generate first non-duplicated link (recursive?)
- try to move backwards through minutes not forward
- i.e. if 2030101200 exists move to 2030101159, 2030101158, ...
- if moving backwards, we do not take away id space from future note creation
- if moving forwards, every zettel created within a minute would delay next zettel creation another minute
Options
atm:
anchor_separator = vim.g["zettel_anchor_separator"] or vim.b["zettel_anchor_separator"] or "_",
zettel_extension = vim.g["zettel_extension"] or vim.b["zettel_extension"] or ".md",
zettel_root = vim.g["zettel_root"] or vim.b["zettel_root"] or "~/documents/notes",