SkillAgentSearch skills...

Sad.nvim

Space Age seD in Neovim. A project-wide find and replace plugin for Neovim.

Install / Use

/learn @ray-x/Sad.nvim
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

sad.nvim

Space Age seD in neovim. A project wide find and replace plugin with sad & fzf

This plug is a wrapper for sad by ms-jqd

You need

  • install sad
  • fzf so you can confirm/select the matches to apply your changes
  • by default the plugin using fd to list all files in the current folder, you can use git ls_file
  • a pager tool, e.g. delta

https://user-images.githubusercontent.com/1681295/144705615-658ab025-f2a3-4857-b9d3-e5e2142bf316.mp4

install

Plug

Plug 'ray-x/guihua.lua', {'do': 'cd lua/fzy && make' }
Plug 'ray-x/sad.nvim'

packer

  require("packer").startup({
    function(use)
      use({ "wbthomason/packer.nvim" })
      use({
        "ray-x/sad.nvim",
        requires = { "ray-x/guihua.lua", run = "cd lua/fzy && make" },
        config = function()
          require("sad").setup{}
        end,
      })
    end,
  })

Configure

require'sad'.setup({
  debug = false, -- print debug info
  diff = 'delta', -- you can use `less`, `diff-so-fancy`
  ls_file = 'fd', -- also git ls-files
  exact = false, -- exact match
  vsplit = false, -- split sad window the screen vertically, when set to number
  -- it is a threadhold when window is larger than the threshold sad will split vertically,
  height_ratio = 0.6, -- height ratio of sad window when split horizontally
  width_ratio = 0.6, -- height ratio of sad window when split vertically

})

usage

  • If you put your cursor on the word want to replace or visual select the word you want to replace, simply run
:Sad

You will be prompt to input new word to be replace

  • replace all oldtext to newtext for all project files
:Sad oldtext newtext
  • add file filter, e.g lua files
:Sad oldtext newtext lua
  • The lua way, you can add key map

-- replace old with new
lua require'sad'.replace('old', 'new')

-- or replace old with input for 'md' files
lua require'sad'.replace('old', nil, 'md')

-- or replace expand('<word>') or visual select with 'new' for md files
lua require'sad'.replace(nil, 'new', 'md')

-- or replace expand('<word>') or visual select with your input for md files
lua require'sad'.replace(nil, nil, 'md')

"capture group   "123" -> 🌈123🌈
:Sad "(\d+)" '🌈$1🌈'

"capture group   123 -> 🌈123🌈
:Sad (\d+) '🌈$1🌈'

" multiple lines:"
Sad (firstKey:firstValue\n\s*secondKey):secondVal $1:newSecondValue
" or use ${1}
Sad (firstKey:firstValue\n\s*secondKey:)secondVal ${1}newSecondValue

confirm or cancel

  • <Tab> To toggle the individual item in the replacement list
  • <CR> to confirm and apply all the replacement
  • <Esc> to cancel all changes
  • <Ctrl-a> toggle select all

Alternatives

  • vim&neovim: far.vim a vim plugin with python & vimscript

  • neovim: nvim-spectre Lua plugin, find with rg and replace with sed

    and most importantly, with realtime preview

Related Skills

View on GitHub
GitHub Stars204
CategoryDevelopment
Updated1mo ago
Forks0

Languages

Lua

Security Score

100/100

Audited on Feb 14, 2026

No findings