Skip to content

Commit

Permalink
fix(Subs): Make sure Subs command only changes text in visual range
Browse files Browse the repository at this point in the history
  • Loading branch information
peterfication committed Dec 15, 2023
1 parent 00df59f commit 9904f58
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 6 deletions.
16 changes: 10 additions & 6 deletions lua/textcase/plugin/plugin.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 26 additions & 0 deletions tests/textcase/plugin/subs_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,32 @@ describe("plugin", function()
"elit-sed dolor-sit amet",
},
},
{
keys = "Vj:Subs/lorem_ipsum/elit_sed/<CR>",
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/<CR>",
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/<CR>",
Expand Down

0 comments on commit 9904f58

Please sign in to comment.