serenevoid / kiwi.nvim Goto Github PK
View Code? Open in Web Editor NEWA stripped down VimWiki for neovim
Home Page: https://serenevoid.github.io/blog/my-note-taking-plugin
License: GNU General Public License v3.0
A stripped down VimWiki for neovim
Home Page: https://serenevoid.github.io/blog/my-note-taking-plugin
License: GNU General Public License v3.0
While this plugin looks promising, I cannot get it work as expected with more than one notes location.
My configuration:
return {
'serenevoid/kiwi.nvim',
dependencies = {
"nvim-lua/plenary.nvim"
},
opts = {
{
name = "work",
path = "/Users/avastmick/notes/edu-docs"
},
{
name = "personal",
path = "/Users/avastmick/notes/local-notes"
}
},
keys = {
{ "<leader>kw", ":lua require(\"kiwi\").open_wiki_index(\"work\")<cr>", desc = "Open Wiki index" },
{ "<leader>kp", ":lua require(\"kiwi\").open_wiki_index(\"personal\")<cr>", desc = "Open index of personal wiki" },
{ "T", ":lua require(\"kiwi\").todo.toggle()<cr>", desc = "Toggle Markdown Task" }
},
lazy = true
}
Usage:
I open the personal
and add in a line 'Daily Plan', select words and , I get the following path (see the status line)
I hit Ctrl+o
to return to index.md
, hovered link does not show duplicated path elements:
If I remove the leading ./
from the new link, navigates to a new file in the directory I opened nvim
.
Hey @serenevoid,
first of all: Great project. I found it looking for a neovim implementation of vimwiki.
Are there any plans to implement the journal feature? If not, do you think there is a way to script the Journal behavior and map it to key bindings?
Like:
I think I need to refresh my Lua Fu and may contribute myself.
Best,
Moritz
I might be the very first user that doesn´t have experience with Vimwiki that tries kiwi.nvim.
After installation I automatically entered :he kiwi, but then I saw the same readme and it wasn´t pleasant to read.
I have tried to make a first version for the help file. Would you like me to send a pull request for it?
my config located in "~/.config/nvim/lua/lucas/lazy/kiwi.lua"
return {
'serenevoid/kiwi.nvim',
opts = {
{
name = "todo",
path = "~/Sync/todo"
},
{
name = "zet",
path = "~/Sync/zet"
}
},
keys = {
{ "<leader>ww", ":lua require(\"kiwi\").open_wiki_index()<cr>", desc = "Open Wiki index" },
{ "<leader>wp", ":lua require(\"kiwi\").open_wiki_index(\"todo\")<cr>", desc = "Open index of personal wiki" },
{ "<C-Enter>", ":lua require(\"kiwi\").todo.toggle()<cr>", desc = "Toggle Markdown Task" }
},
lazy = true
}
Hi,
I noticed the VimWiki (markdown) has hyperlink defined as [topic](topic)
, whereas kiwi uses the actual file path [topic](./topic.md)
. Both contain markdown notes are in a flat folder.
I wrote a python script to convert the VimWiki notes to the Kiwi notes. Perhaps it can help others.
[update, 10/04/2023] fix a bug: replace space in filename with underscore
import regex as re
import sys
from pathlib import Path
# usage:
# python vimwiki2kiwi.py <path_of_vimwiki_note_folder> <path_of_kiwi_note_folder>
# e.g. python vimwiki2kiwi.py ./notes ./output
input_folder = Path(sys.argv[1])
output_folder = Path(sys.argv[2])
p = re.compile("(\[.*\]\()(.*)(\))")
def func(obj):
m = obj.group(2).replace(" ", "_")
m = "./" + m + ".md"
return obj.group(1) + m + obj.group(3)
if not input_folder.exists():
print(f"input folder {input_folder} does not exist.")
exit(1)
if not output_folder.exists():
print(f"output folder {output_folder} does not exist.")
print("creating one")
output_folder.mkdir(parents=True, exist_ok=True)
for file in input_folder.glob("./*.md"):
print(f"converting {file}")
outfile = output_folder / file.name.replace(" ", "_")
outfile.touch()
with open(file, "r") as ifp, open(outfile, "w") as ofp:
for line in ifp:
newline = re.sub(p, func, line)
print(newline, file=ofp, end="")
I structure my notes in one wiki, but in a directory structure. At the moment kiwi.nvim try to always use the main wiki directory. I need to define a path manually:
[diary](./diary/diary.md)
Then if I create links in the diary.md, they will be created also under the main path. The link [entry](./entry.md)
doesn't construct the file under the directory "diary" as a ./ suggest.
If directory structures should be supported then two option is possible:
If the actual .md
is in a sub directory
[entry](./entry.md)
should be created in the same directory[entry](./diary/entry.md)
I'd love the ability to have my diary and wiki in two different places. Meaning I'd like to specify in my config whether or not a filepath is meant to be used for a wiki or diary or both.
Since this is meant to be a stripped down version of vimwiki I understand features are supposed to be minimal, but I feel like toggling an existing feature on or off is still in scope.
I'm pretty comfortable with lua and might draft a PR adding this functionality if this seems desirable to @serenevoid and/or other users.
Some examples of how this might look in the lua config.
booleans for each:
require('kiwi').setup({
{
name = "personal",
path = "/home/username/personal-wiki",
-- for diary and wiki (current default)
wiki = true,
diary = true
},
{
name = "work",
path = "/other/wiki/path"
-- for just wiki
wiki = true,
diary = false
},
{
name = "work",
path = "/other/diary/path"
-- for just diary
wiki = false,
diary = true
}
})
OR
lua table with options:
require('kiwi').setup({
{
name = "personal",
path = "/home/username/personal-wiki",
-- for diary and wiki (current default)
usage = { "diary", "wiki" }
},
{
name = "work",
path = "/other/wiki/path"
-- for just wiki
usage = { "wiki" }
},
{
name = "work",
path = "/other/diary/path"
-- for just diary
usage = { "diary" }
}
})
In the readme file the following key bindings are mentioned.
<Enter> -- Follow/Create wiki link.
<Tab> -- Find next wiki link.
T -- Toggle TODO list
Enter does not create a wiki link in Normal mode, this only works in Visual mode.
So i installed the plugin with lazy.nvim:
{
'serenevoid/kiwi.nvim',
dependencies = {
"nvim-lua/plenary.nvim"
},
opts = {
{
name = "wiki",
path = "C:\\Users\\leogo\\vimwiki"
},
},
keys = {
{ "<leader>www", ":lua require(\"kiwi\").open_wiki_index()<cr>", desc = "Open Wiki index" },
{ "<leader>wp", ":lua require(\"kiwi\").open_wiki_index(\"personal\")<cr>", desc = "Open index of personal wiki" },
{ "T", ":lua require(\"kiwi\").todo.toggle()<cr>", desc = "Toggle Markdown Task" }
},
lazy = true
},
My Problem is when i create a new markdown file and wont to safe it, it says:
"~\vimwikiC:/Users/leogo/vimwiki/test.md"
E212: Can't open file for writing: no such file or directory
Maybe someone can help me :)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.