Simple neovim zettelkasten functionality as a lua plugin.
Marty Oehme
aef7d29997
Action module contains the interactions the user can take directly with the zettelkasten, and which in turn act on the editor. First action to be taken is the opening of zettel links. `action.open(mytext)` allows the user to pass in a md/wikilink-formatted string from which the function will open the first found in the current buffer. `action.open_selected()` does the same, but looks at the cursor context to get its string (the link under current cursor position as of now; in the future probably also the next link on current line, and the first link in visual selection) |
||
---|---|---|
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",