Garbage collector that stops inactive LSP clients to free RAM
In many scenarios, unmanaged LSP clients running on background can take several Gb of RAM. So I wrote this LSP garbage collector for NormalNvim to auto free it. But you can use it on any distro.
Add this to lazy
{
"zeioth/garbage-day.nvim",
dependencies = "neovim/nvim-lspconfig",
event = "VeryLazy",
opts = {
-- your options here
}
},
We also support changing opts on execution time like :let g:garbage_day_config['option']='value'
Name | Default | Description |
---|---|---|
aggressive_mode |
false |
Set it to true to stop all lsp clients except the current buffer, every time you enter a buffer. aggressive_mode ignores grace_period , and it only triggers when entering a buffer with a different filetype than the current buffer. Ensures the maximum RAM save. |
excluded_lsp_clients |
here | Table of LSP clients that should never be stopped. Useful for LSP clients that miss behave. |
grace_period |
60*15 |
Seconds to wait before stopping all LSP clients after neovim loses focus. |
wakeup_delay |
0 |
Milliseconds to wait before restoring LSP after the mouse re-enters nvim. Useful to avoid waking up the LSP clients by accident when passing the mouse over it. |
You can tweak them in case some particular LSP client don't start/stop correctly on your machine.
Name | Default | Description |
---|---|---|
aggressive_mode_ignore |
here | Buffers to ignore on aggressive_mode . |
notifications |
false |
Set it to true to get a notification every time LSP garbage collection triggers. |
notification_engine |
default |
Can be set to fidget or notify to send notifications with those plugins. |
retries |
3 |
Times to try to start a LSP client before giving up. |
timeout |
1000 |
Milliseconds that will take for retries to complete. Example: by default we try 3 retries for 1000ms. |
IMPORTANT: If you change the default values, make sure the value of grace_period
is always bigger than timeout
/1000. This ensures you are leaving enough time between stop_lsp()
/start_lsp()
, so they don't overlap.
If it doesn't work
This plugin has been tested with neovim 0.10 and 0.11. If you are in a neovim version superior to nvim 0.11, and it doesn't work, please open a issue tagging me and I will fix it.Can I manually trigger garbage collection?
Yes, you can do it like
require("garbage-day.utils").stop_lsp() -- stop all lsp clients.
require("garbage-day.utils").start_lsp() -- start lsp clients for the current buffer.
If you want to help me, please star this repository to increase the visibility of the project.
- lsp-timeout: Recommended for nvim versions
<=0.8