persisted.nvim/doc/persisted.nvim.txt

398 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

*persisted.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 23
==============================================================================
Table of Contents *persisted.nvim-table-of-contents*
- Features |persisted.nvim-features|
- Requirements |persisted.nvim-requirements|
- Installation |persisted.nvim-installation|
- Usage |persisted.nvim-usage|
- Configuration |persisted.nvim-configuration|
- License |persisted.nvim-license|
Persisted.nvim
Persisted.nvim is a simple lua plugin for automated session management within Neovim
Forked from Persistence.nvim as active development had stopped
FEATURES *persisted.nvim-features*
- Automatically saves the active session under `.local/share/nvim/sessions` on exiting Neovim
- Supports sessions across multiple git branches
- Supports auto saving and loading of sessions with allowed/ignored directories
- Simple API to save/stop/restore/delete/list the current session(s)
- Telescope extension to work with saved sessions
REQUIREMENTS *persisted.nvim-requirements*
- Neovim >= 0.8.0
INSTALLATION *persisted.nvim-installation*
Install the plugin with your preferred package manager:
**Lazy.nvim**
>lua
-- Lua
use({
"olimorris/persisted.nvim"
-- lazy = true, -- For lazy loading
config = true
})
<
**Packer**
>lua
-- Lua
use({
"olimorris/persisted.nvim",
--module = "persisted", -- For lazy loading
config = function()
require("persisted").setup()
end,
})
<
**Vim Plug**
>vim
" Vim Script
Plug 'olimorris/persisted.nvim'
lua << EOF
require("persisted").setup {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
}
EOF
<
TELESCOPE EXTENSION ~
Ensure that the telescope extension is loaded with:
>lua
require("telescope").load_extension("persisted")
<
LAZY LOADING ~
The plugin is designed to work with startup screens like vim-startify
<https://github.com/mhinz/vim-startify> or dashboard
<https://github.com/glepnir/dashboard-nvim> out of the box. It will never load
a session automatically by default.
However, to lazy load the plugin add the `module = "persisted"` line to Packer
or `lazy = true` for Lazy.nvim.
USAGE *persisted.nvim-usage*
**Default commands**
The plugin comes with a number of commands:
- `:SessionToggle` - Determines whether to load, start or stop a session
- `:SessionStart` - Start recording a session. Useful if `autosave = false`
- `:SessionStop` - Stop recording a session
- `:SessionSave` - Save the current session
- `:SessionLoad` - Load the session for the current directory and current branch if `git_use_branch = true`
- `:SessionLoadLast` - Load the most recent session
- `:SessionLoadFromPath` - Load a session from a given path
- `:SessionDelete` - Delete the current session
**Note:** The author only binds `:SessionToggle` to a keymap for simplicity.
**Telescope**
The Telescope extension may be opened via `:Telescope persisted`.
Once opened, the available keymaps are: `<CR>` - Source the session file
`<C-d>` - Delete the session file
**Helpers**
The plugin sets a global variable, `vim.g.persisting`, which is set to `true`
when a session is started. The author uses this to display an icon in their
statusline
<https://github.com/olimorris/dotfiles/blob/0cdaee183c64f872778952f90f62b9366851101c/.config/nvim/lua/Oli/plugins/statusline.lua#L257>.
CONFIGURATION *persisted.nvim-configuration*
DEFAULTS ~
The plugin comes with the following defaults:
>lua
require("persisted").setup({
save_dir = vim.fn.expand(vim.fn.stdpath("data") .. "/sessions/"), -- directory where session files are saved
silent = false, -- silent nvim message when sourcing session file
use_git_branch = false, -- create session files based on the branch of the git enabled repository
autosave = true, -- automatically save session files when exiting Neovim
should_autosave = nil, -- function to determine if a session should be autosaved
autoload = false, -- automatically load the session for the cwd on Neovim startup
on_autoload_no_session = nil, -- function to run when `autoload = true` but there is no session to load
follow_cwd = true, -- change session file name to match current working directory if it changes
allowed_dirs = nil, -- table of dirs that the plugin will auto-save and auto-load from
ignored_dirs = nil, -- table of dirs that are ignored when auto-saving and auto-loading
telescope = { -- options for the telescope extension
reset_prompt_after_deletion = true, -- whether to reset prompt after session deleted
},
})
<
SESSION OPTIONS ~
As the plugin uses Vims `:mksession` command then you may change the
`vim.o.sessionoptions` value to determine what to write into the session.
Please see `:h sessionoptions` for more information.
**Note:** The author uses `vim.o.sessionoptions =
"buffers,curdir,folds,winpos,winsize"`
SESSION SAVE LOCATION ~
The location of the session files may be changed by altering the `save_dir`
configuration option. For example:
>lua
require("persisted").setup({
save_dir = vim.fn.expand(vim.fn.stdpath("data") .. "/sessions/"), -- Resolves to ~/.local/share/nvim/sessions/
})
<
**Note:** The plugin may be unable to find existing sessions if the `save_dir`
value is changed
GIT BRANCHING ~
One of the plugins core features is the ability to have multiple sessions
files for a given project, by using git branches. To enable git branching:
>lua
require("persisted").setup({
use_git_branch = true,
})
<
**Note:** If git branching is enabled on a non git enabled repo, then `main`
will be used as the default branch
AUTOSAVING ~
By default, the plugin will automatically save a Neovim session to disk when
the `VimLeavePre` autocommand is triggered. Autosaving can be turned off by:
>lua
require("persisted").setup({
autosave = false,
})
<
Autosaving can be further controlled for certain directories by specifying
`allowed_dirs` and `ignored_dirs`.
There may be occasions when you do not wish to autosave; perhaps when a
dashboard or terminal are open. To control this, a callback function,
`should_autosave`, may be specified. This function should return a boolean
value.
>lua
require("persisted").setup({
should_autosave = function()
-- do not autosave if the alpha dashboard is the current filetype
if vim.bo.filetype == "alpha" then
return false
end
return true
end,
})
<
AUTOLOADING ~
The plugin can be enabled to automatically load sessions when Neovim is
started. Whilst off by default, this can be turned on by:
>lua
require("persisted").setup({
autoload = true,
})
<
You can also provide a function to run when `autoload = true` but there is no
session to be loaded:
>lua
require("persisted").setup({
autoload = true,
on_autoload_no_session = function()
vim.notify("No existing session to load.")
end
})
<
Autoloading can be further controlled for certain directories by specifying
`allowed_dirs` and `ignored_dirs`.
**Note:** Autoloading will not occur if a user opens Neovim with arguments. For
example: `nvim some_file.rb`
FOLLOWING CURRENT WORKING DIRECTORY ~
There may be a need to change the working directory to quickly access files in
other directories without changing the current sessions name on save. This
behavior can be configured with `follow_cwd = false`.
By default, the session name will match the current working directory:
>lua
require("persisted").setup({
follow_cwd = true,
})
<
**Note:** If `follow_cwd = false` the session name is stored upon loading under
the global variable `vim.g.persisting_session`. This variable can be manually
adjusted if changes to the session name are needed. Alternatively, if
`follow_cwd = true` then `vim.g.persisting_session = nil`.
ALLOWED DIRECTORIES ~
You may specify a table of directories for which the plugin will autosave
and/or autoload from. For example:
>lua
require("persisted").setup({
allowed_dirs = {
"~/.dotfiles",
"~/Code",
},
})
<
Specifying `~/Code` will autosave and autoload from that directory as well as
all its sub-directories.
**Note:** If `allowed_dirs` is left at its default value and `autosave` and/or
`autoload` are set to `true`, then the plugin will autoload/autosave from _any_
directory
IGNORED DIRECTORIES ~
You may specify a table of directories for which the plugin will **never**
autosave and autoload from. For example:
>lua
require("persisted").setup({
ignored_dirs = {
"~/.config",
"~/.local/nvim"
},
})
<
Specifying `~/.config` will prevent any autosaving and autoloading from that
directory as well as all its sub-directories.
EVENTS / CALLBACKS ~
The plugin fires events at various points during its lifecycle which users can
leverage:
- `PersistedLoadPre` - For _before_ a session is loaded
- `PersistedLoadPost` - For _after_ a session is loaded
- `PersistedTelescopeLoadPre` - For _before_ a session is loaded via Telescope
- `PersistedTelescopeLoadPost` - For _after_ a session is loaded via Telescope
- `PersistedSavePre` - For _before_ a session is saved
- `PersistedSavePost` - For _after_ a session is saved
For example, to ensure that the excellent minimap
<https://github.com/wfxr/minimap.vim> plugin is not saved into a session, an
autocommand can be created to hook into the `PersistedSavePre` event:
>lua
local group = vim.api.nvim_create_augroup("PersistedHooks", {})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "PersistedSavePre",
group = group,
callback = function()
pcall(vim.cmd, "bw minimap")
end,
})
<
Session data is also made available to the callbacks:
>lua
local group = vim.api.nvim_create_augroup("PersistedHooks", {})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "PersistedTelescopeLoadPre",
group = group,
callback = function(session)
print(session.data.branch) -- Print the session's branch
end,
})
<
The session data available differs depending on the events that are hooked
into. For non-telescope events, only the session `name` is available (via
`session.data.name`). However for telescope events, the `branch`, `name`,
`file_path` and `dir_path` are available.
Finaly, if youre using the excellent Legendary.nvim
<https://github.com/mrjones2014/legendary.nvim> plugin, consider the following
snippet format:
>lua
{
name = "PersistedHooks",
{
"User",
function()
print("Loading session!")
end,
opts = { pattern = "PersistedLoadPre" },
},
},
<
TELESCOPE EXTENSION ~
The plugin contains an extension for telescope.nvim
<https://github.com/nvim-telescope/telescope.nvim> which allows the user to
list all of the saved session files and source them via `:Telescope persisted`.
LICENSE *persisted.nvim-license*
MIT <https://github.com/olimorris/persisted.nvim/blob/main/LICENSE>
Generated by panvimdoc <https://github.com/kdheepak/panvimdoc>
vim:tw=78:ts=8:noet:ft=help:norl: