Awesome
[!WARNING] Breaking change!
Dev branch will be merged into main branch next Saturday!
The json file db format will be changed.
To avoid data lose!! Be sure you have backed your current bookmark db file up
Pin the version to v0.5.4 to avoid this error message
Bookmarks.nvim
You only need one shortcut to add bookmarks.
- Toggle mark: Add and Remove mark with one shortcut
- Mark with name: so you can record more information
- Icon and virtual text: display icon and name at the marked lines
- Group your bookmarks: so keep you away from the noises
- Persistent your bookmarks into a human reable json file, which you can manipulate munally
- More usecases
- Video Explaination
Install and Config
- Simple version: everything should work out of box if you are ok with the default config.
-- with lazy.nvim
return {
"LintaoAmons/bookmarks.nvim",
tag = "v0.5.4", -- optional, pin the plugin at specific version for stability
dependencies = {
{"nvim-telescope/telescope.nvim"},
{"stevearc/dressing.nvim"} -- optional: to have the same UI shown in the GIF
}
}
<details>
<summary>Detailed config</summary>
Right now we have only one config options
return { "LintaoAmons/bookmarks.nvim",
config = function ()
require("bookmarks").setup( {
json_db_path = vim.fs.normalize(vim.fn.stdpath("config") .. "/bookmarks.db.json"),
signs = {
mark = { icon = "", color = "grey" },
},
})
end
}
</details>
Commands and Keybindings
There's two concepts in this plugin: BookmarkList
and Bookmark
. You can look into the code to find the structure of those two domain objects
Command | Description |
---|---|
BookmarksMark | Mark current line into active BookmarkList. |
BookmarksGoto | Go to bookmark at current active BookmarkList |
BookmarksCommands | Find and trigger a bookmark command. |
BookmarksGotoRecent | Go to latest visited/created Bookmark |
Command | Description |
---|---|
[List] new | create a new BookmarkList and set it to active and mark current line into this BookmarkList |
[List] rename | rename a BookmarkList |
[List] delete | delete a bookmark list |
[List] set active | set a BookmarkList as active |
[List] Browsing all lists | |
[Mark] mark to list | bookmark current line and add it to specific bookmark list |
[Mark] rename bookmark | rename selected bookmark |
[Mark] Browsing all marks | |
[Mark] delete bookmark | delete selected bookmarks |
This plugin don't provide any default keybinding. I recommend you to have those three keybindings.
vim.keymap.set({ "n", "v" }, "mm", "<cmd>BookmarksMark<cr>", { desc = "Mark current line into active BookmarkList." })
vim.keymap.set({ "n", "v" }, "mo", "<cmd>BookmarksGoto<cr>", { desc = "Go to bookmark at current active BookmarkList" })
vim.keymap.set({ "n", "v" }, "ma", "<cmd>BookmarksCommands<cr>", { desc = "Find and trigger a bookmark command." })
vim.keymap.set({ "n", "v" }, "mg", "<cmd>BookmarksGotoRecent<cr>", { desc = "Go to latest visited/created Bookmark" })
Thanks
CONTRIBUTING
Don't hesitate to ask me anything about the codebase if you want to contribute.
You can contact with me by drop me an email or telegram
FIND MORE USER FRIENDLY PLUGINS MADE BY ME
TODO
V1
- BookmarksMark's input box as a command line. Text start with
!
considered as command.-
!newlist [listname]
bookmark current line into a newly created bookmark list and set the list as current active list.
-
- remove parse commands, prefer BookmarkCommands instead
-
BookmarkCommands
commands picker, a picker allow user to trigger any bookmark command. - user defined commands
- more useful information when deal with corrupted json db (no issues report yet)
- refactor: extract picker module
- Telescope as default picker and will fallback to vim.ui if don't have telescope dependencies
- telescope enhancement (use specific command instead)
- Recent files as bookmarks: record all the buffer the user recently opened and sort by the visited_at
- A new command to create bookmark and put it into specific bookmark list (instead current active one)
- goto next/prev bookmark in the current buffer
V2
- filetree-like BookmarkList and Bookmark browsing.
- smart location calibration according to bookmark content