nvim-lsp-file-operations
nvim-lsp-file-operations copied to clipboard
Neovim plugin that adds support for file operations using built-in LSP
nvim-lsp-file-operations
nvim-lsp-file-operations is a Neovim plugin that adds support for file operations using built-in LSP
support.
This plugin works by subscribing to events emitted by nvim-tree
and neo-tree. But other integrations are possible.
Features
Full implementation of all workspace.fileOperations in the current lsp spec:
- workspace/WillRename (Currently tested with metals, rust-analyzer and typescript-language-server)
- workspace/DidRename (Currently tested with vtsls and lua-language-server)
- workspace/WillCreate
- workspace/DidCreate
- workspace/WillDelete
- workspace/DidDelete
https://user-images.githubusercontent.com/14187674/211327507-39f21a74-0a43-43f0-ba3e-91109125286c.mp4
If you have usecases for any other operations please open an issue.
Installation
Using packer.nvim
For Nvim-tree Users
use {
"antosha417/nvim-lsp-file-operations",
requires = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-tree.lua",
},
config = function()
require("lsp-file-operations").setup()
end,
}
For Neo-tree Users
use {
"antosha417/nvim-lsp-file-operations",
requires = {
"nvim-lua/plenary.nvim",
"nvim-neo-tree/neo-tree.nvim",
},
config = function()
require("lsp-file-operations").setup()
end,
}
Using lazy.nvim
Note that the config function will let you skip the setup step.
For Nvim-tree Users
return {
{
"antosha417/nvim-lsp-file-operations",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-tree.lua",
},
config = function()
require("lsp-file-operations").setup()
end,
},
}
For Neo-tree Users
return {
{
"antosha417/nvim-lsp-file-operations",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-neo-tree/neo-tree.nvim",
},
config = function()
require("lsp-file-operations").setup()
end,
},
}
Please note that the order that the plugins load in is important, neo-tree must load before nvim-lsp-file-operations for it to work, so nvim-lsp-file-operations depends on neo-tree and not the other way around.
Setup
require("lsp-file-operations").setup()
This is equivalent to:
require("lsp-file-operations").setup {
-- used to see debug logs in file `vim.fn.stdpath("cache") .. lsp-file-operations.log`
debug = false,
-- select which file operations to enable
operations = {
willRenameFiles = true,
didRenameFiles = true,
willCreateFiles = true,
didCreateFiles = true,
willDeleteFiles = true,
didDeleteFiles = true,
},
-- how long to wait (in milliseconds) for file rename information before cancelling
timeout_ms = 10000,
}
Contributing
PRs are always welcome.