v0.2.0 breaking change: add visited_at to Bookmark structure
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 your away from the noises
- Persistent your bookmarks into a human reable json file, which you can manipulate munally
- More usecases
- Video Explaination
- Simple version: everything should work out of box if you are ok with the default config.
-- with lazy.nvim
return {
"LintaoAmons/bookmarks.nvim",
dependencies = {
{"stevearc/dressing.nvim"} -- optional: to have the same UI shown in the GIF
}
}
Detailed config
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"),
})
end
}
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 |
Commands we have right now
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" })
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
- 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
- filetree-like BookmarkList and Bookmark browsing.
- smart location calibration according to bookmark content