mirror of
https://github.com/zoriya/auto-save.nvim.git
synced 2025-12-06 06:36:11 +00:00
14bc188b5eeeee9696d61f0cdd7384e946adccb0
Made stylua.toml use two spaces as indentation since that seems to be the most common convention in lua. Rest of the settings are kept in Stylua defaults but made explicit. Also updated .editorconfig to match config in stylua.toml.
🧶 auto-save.nvim
Automatically save your changes in NeoVim
📋 Features
- automatically save your changes so the world doesn't collapse
- highly customizable:
- conditionals to assert whether to save or not
- execution message (it can be dimmed and personalized)
- events that trigger auto-save
- debounce the save with a delay
- multiple callbacks
- automatically clean the message area
📚 Requirements
- Neovim >= 0.5.0
📦 Installation
Install the plugin with your favourite package manager:
Lazy.nvim
{
"okuuva/auto-save.nvim",
cmd = "ASToggle", -- optional for lazy loading on command
event = { "InsertLeave", "TextChanged" } -- optional for lazy loading on trigger events
opts = {
-- your config goes here
-- or just leave it empty :)
},
},
Packer.nvim
use({
"okuuva/auto-save.nvim",
config = function()
require("auto-save").setup {
-- your config goes here
-- or just leave it empty :)
}
end,
})
vim-plug
Plug 'okuuva/auto-save.nvim'
lua << EOF
require("auto-save").setup {
-- your config goes here
-- or just leave it empty :)
}
EOF
⚙️ Configuration
auto-save comes with the following defaults:
{
enabled = true, -- start auto-save when the plugin is loaded (i.e. when your package manager loads it)
execution_message = {
enabled = true,
message = function() -- message to print on save
return ("AutoSave: saved at " .. vim.fn.strftime("%H:%M:%S"))
end,
dim = 0.18, -- dim the color of `message`
cleaning_interval = 1250, -- (milliseconds) automatically clean MsgArea after displaying `message`. See :h MsgArea
},
trigger_events = {"InsertLeave", "TextChanged"}, -- vim events that trigger auto-save. See :h events
-- function that determines whether to save the current buffer or not
-- return true: if buffer is ok to be saved
-- return false: if it's not ok to be saved
condition = function(buf)
local fn = vim.fn
local utils = require("auto-save.utils.data")
if
fn.getbufvar(buf, "&modifiable") == 1 and
utils.not_in(fn.getbufvar(buf, "&filetype"), {}) then
return true -- met condition(s), can save
end
return false -- can't save
end,
write_all_buffers = false, -- write all buffers when the current one meets `condition`
debounce_delay = 135, -- saves the file at most every `debounce_delay` milliseconds
callbacks = { -- functions to be executed at different intervals
enabling = nil, -- ran when enabling auto-save
disabling = nil, -- ran when disabling auto-save
before_asserting_save = nil, -- ran before checking `condition`
before_saving = nil, -- ran before doing the actual save
after_saving = nil -- ran after doing the actual save
}
}
Additionally you may want to set up a key mapping to toggle auto-save:
vim.api.nvim_set_keymap("n", "<leader>n", ":ASToggle<CR>", {})
or as part of the lazy.nvim plugin spec:
{
"okuuva/auto-save.nvim",
keys = {
{ "<leader>n", ":ASToggle<CR>", desc = "Toggle auto-save" },
},
...
},
🪴 Usage
Besides running auto-save at startup (if you have enabled = true in your config), you may as well:
ASToggle: toggle auto-save
🤝 Contributing
- All pull requests are welcome.
- If you encounter bugs please open an issue.
👋 Acknowledgements
This plugin wouldn't exist without Pocco81's work on the original.
Description
Languages
Lua
100%