diff --git a/lua/textcase/plugin/plugin.lua b/lua/textcase/plugin/plugin.lua index f993dd6..b38304b 100644 --- a/lua/textcase/plugin/plugin.lua +++ b/lua/textcase/plugin/plugin.lua @@ -175,12 +175,16 @@ function M.incremental_substitute(opts, preview_ns, preview_buf) local get_match = utils.get_list(utils.escape_string(transformed_source), mode) for match in get_match do - if dest ~= "" then - conversion.replace_matches(match, transformed_source, transformed_dest, false, buf) - end - local length = transformed_dest == "" and #transformed_source or #transformed_dest - if preview_ns ~= nil then - vim.api.nvim_buf_add_highlight(buf, preview_ns, "Search", match[1] - 1, match[2] - 1, match[2] - 1 + length) + local match_is_inside_visual_range = match[1] >= opts.line1 and match[1] <= opts.line2 + + if match_is_inside_visual_range then + if dest ~= "" then + conversion.replace_matches(match, transformed_source, transformed_dest, false, buf) + end + local length = transformed_dest == "" and #transformed_source or #transformed_dest + if preview_ns ~= nil then + vim.api.nvim_buf_add_highlight(buf, preview_ns, "Search", match[1] - 1, match[2] - 1, match[2] - 1 + length) + end end end end diff --git a/tests/textcase/plugin/subs_spec.lua b/tests/textcase/plugin/subs_spec.lua index b704e89..61223ff 100644 --- a/tests/textcase/plugin/subs_spec.lua +++ b/tests/textcase/plugin/subs_spec.lua @@ -24,6 +24,32 @@ describe("plugin", function() "elit-sed dolor-sit amet", }, }, + { + keys = "Vj:Subs/lorem_ipsum/elit_sed/", + buffer_lines = { + "LoremIpsum DolorSit amet", + "lorem_ipsum dolor_sit amet", + "lorem-ipsum dolor-sit amet", + }, + expected = { + "ElitSed DolorSit amet", + "elit_sed dolor_sit amet", + "lorem-ipsum dolor-sit amet", + }, + }, + { + keys = "V:Subs/lorem_ipsum/elit_sed/", + buffer_lines = { + "LoremIpsum DolorSit amet", + "lorem_ipsum dolor_sit amet", + "lorem-ipsum dolor-sit amet", + }, + expected = { + "ElitSed DolorSit amet", + "lorem_ipsum dolor_sit amet", + "lorem-ipsum dolor-sit amet", + }, + }, -- This test case adds a word in the Subs command { keys = "Vjj:Subs/lorem ipsum/lorem ipsum nunc/",