replacer.nvim makes quickfix windows editable, allowing changes to both the content of a file and its path. You can use this to rename variables and files easily. When moving a file around, if the origin folder gets empty, it's deleted.
See the example below.
replacerdemo.mp4
First, populate a quickfix window with the lines and files you want to
change. If you don't know how, try the :Rg
command from fzf.vim.
Now, inside the quickfix window, execute :lua require("replacer").run()<cr>
.
You can also map it to a shortcut, for instance in lua:
api.nvim_set_keymap('n', '<leader>h', ':lua require("replacer").run()<cr>', { silent = true })
Or in VimScript:
nmap <leader>h :lua require("replacer").run()<cr>
Your quickfix window will change and now you can edit the lines and move/rename the files.
Save the buffer when you're done. That's it.
Renaming/moving files is enabled by default. To disable this functionality, set
the option rename_files
. For instance:
api.nvim_set_keymap('n', '<Leader>h', ':lua require("replacer").run({ rename_files = false })<cr>', { silent = true })
By default, changes are saved when you write the buffer. To disable this
functionality and instead set a custom shortcut to save the changes, set the
save_on_write
option and execute the save
function. For instance:
local opts = { save_on_write = false, rename_files = false }
api.nvim_set_keymap('n', '<Leader>h', ':lua require("replacer").run(opts)<cr>', { silent = true })
api.nvim_set_keymap('n', '<Leader>H', ':lua require("replacer").save(opts)<cr>', { silent = true })
Notice that the options are sent to both run
and save
. This is important
for consistent behavior.
You can also use the setup
function to set global options. For instance, with
lazy.nvim you can do something like this:
{
dir = 'gabrielpoca/replacer.nvim',
opts = {rename_files = false},
keys = {
{
'<leader>h',
function() require('replacer').run() end,
desc = "run replacer.nvim"
}
}
}
The rename_files
will be set to false
by default in every execution
of the functions run
and save
.