Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/0x00-ketsu/autosave.nvim
A Neovim plugin which saves files to disk automatically.
https://github.com/0x00-ketsu/autosave.nvim
autosave lua neovim neovim-plugin
Last synced: about 2 months ago
JSON representation
A Neovim plugin which saves files to disk automatically.
- Host: GitHub
- URL: https://github.com/0x00-ketsu/autosave.nvim
- Owner: 0x00-ketsu
- License: mit
- Created: 2023-01-24T11:22:12.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-12-07T00:48:07.000Z (10 months ago)
- Last Synced: 2024-06-17T19:02:18.028Z (3 months ago)
- Topics: autosave, lua, neovim, neovim-plugin
- Language: Lua
- Homepage:
- Size: 14.6 KB
- Stars: 25
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Autosave.nvim
A NeoVim plugin written in Lua that aims to automatically saving file(s) when changed.
## Requirements
Neovim version >= `0.9.0` (or [nightly](https://github.com/neovim/neovim/releases/tag/nightly))
>
> For Neovim `0.5.0` <= version < `0.9.0`, use tag `v1.0`.## Features
- Automatically save current file(s).
- Set conditions that file(s) must meet to be saved (e.g. filetype, existence, ...).
- Specific events that will trigger the plugin.
- Custom hook(s) (e.g. print a message when the plugin is enabled).
- Toggle (enable if disabled, disable if enabled) the plugin.**Screenshots**
prompt_style = 'stdout'
prompt_style = 'notify'
## Installation
- [Lazy](https://github.com/folke/lazy.nvim)
```lua
-- lua
require('lazy').setup({
'0x00-ketsu/autosave.nvim',
-- lazy-loading on events
event = { "InsertLeave", "TextChanged" },
config = function()
require('autosave').setup {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
}
end
})
```- [Packer](https://github.com/wbthomason/packer.nvim)
```lua
-- Lua
use {
'0x00-ketsu/autosave.nvim',
config = function()
require('autosave').setup {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
}
end
}
```## Setup
Following defaults:
```lua
local autosave = require('autosave')
autosave.setup(
{
enable = true,
prompt_style = 'stdout',
prompt_message = function()
return 'Autosave: saved at ' .. vim.fn.strftime('%H:%M:%S')
end,
events = {'InsertLeave', 'TextChanged'},
conditions = {
exists = true,
modifiable = true,
filename_is_not = {},
filetype_is_not = {}
},
write_all_buffers = false,
debounce_delay = 135
}
)
```For details, check out the [Configuration](#Configuration) section.
## Commands
- `:ASToggle`: toggle the plugin on and off.
- `:ASEnable`: enable autosave.nvim.
- `:ASDisable`: disable autosave.nvim.## Configuration
Although settings already have self-explanatory names, here is where you can find info about each one of them and their classifications!
### General
- `enable`: (boolean) if true, enables autosave.nvim at startup, same as `:ASEnable`.
- `prompt_style`: (string) style to display `prompt_message`, choices: `stdout` `notify`
- `prompt_message`: (string) message to be displayed when saving file(s).
- `events`: (table): events that will trigger the plugin.
- `write_all_buffers`: (boolean) if true, writes to all modifiable buffers that meet the `conditions`.
- `debounce_delay`: (integer) if greater than 0, saves the file at most every `debounce_delay` milliseconds, vastly improving editing performance.
If 0 then saves are performed immediately after `events` occur.
It's recommend to leave the default value (`135`), which is just long enough to reduce unnecessary saves, but short enough that you don't notice the delay.### Conditions
These are the conditions that every file must meet so that it can be saved. If every file to be auto-saved doesn't meet all of the conditions it won't be saved.
- `exists`: (boolean) if true, enables this condition. If the file doesn't exist it won't save it (e.g. if you `nvim stuff.txt` and don't save the file then this condition won't be met)
- `modifiable`: (boolean) if true, enables this condition. If the file isn't modifiable, then this condition isn't met.
- `filename_is_not`: (table, string) if there is one or more filenames (should be array) in the table, it enables this condition. Use this to exclude filenames that you don't want to automatically save.
- `filetype_is_not`: (table, string) if there is one or more filetypes (should be array) in the table, it enables this condition. Use this to exclude filetypes that you don't want to automatically save.### Hooks
| Function | Description |
|----------------------|----------------------------------|
| hook_before_enable() | Before activate the plugin |
| hook_after_enable() | After activate the plugin |
| hook_before_disable() | Before disactivate the plugin |
| hook_after_disable() | After disactivate the plugin |
| hook_before_saving() | Before saving file(s) |
| hook_after_saving | After saving file(s) |e.g.
`hook_after_disable`
```lua
local autosave = require('autosave')
autosave.hook_after_disable = function ()
print('Do sth after disactivate the plugin')
end
````hook_before_saving`
```lua
local autosave = require('autosave')
autosave.hook_before_saving = function ()
if true then
vim.g.auto_save_abort = true -- Save will be aborted
end
end
```## API
- Check if the plugin is enabled
`vim.g.autosave_state` (variable type is `boolean`)
e.g.
```lua
local is_enable_autosave = vim.g.autosave_state and ' 💾 ' or ''
```- Enable the plugin
```lua
require('autosave.action').enable()
```- Disable the plugin
```lua
require('autosave.action').disable()
```- Toggle (enable if disabled, disable if enabled) the plugin
```lua
require('autosave.action').toggle()
```## Thanks
- [pocco81/AutoSave.nvim](https://github.com/Pocco81/AutoSave.nvim)
## License
MIT