diff --git a/lua/cmdbuf/handler/lua/cmd.lua b/lua/cmdbuf/handler/lua/cmd.lua index 2f8e82b..2002a19 100644 --- a/lua/cmdbuf/handler/lua/cmd.lua +++ b/lua/cmdbuf/handler/lua/cmd.lua @@ -34,9 +34,18 @@ function M.add_history(self, line) vim.fn.histadd("cmd", self._lua(line)) end -function M.delete_histories(self, lines) +function M.delete_histories(_, lines) for _, line in ipairs(lines) do - historylib.delete("cmd", self._lua(line)) + if historylib.delete("cmd", line, [[\s*lua\s*]]) then + goto continue + end + if historylib.delete("cmd", line, [[\s*lua\s*=]]) then + goto continue + end + if historylib.delete("cmd", line, [[\s*=\s*]]) then + goto continue + end + ::continue:: end end diff --git a/lua/cmdbuf/lib/history.lua b/lua/cmdbuf/lib/history.lua index c27929a..2ea4df1 100644 --- a/lua/cmdbuf/lib/history.lua +++ b/lua/cmdbuf/lib/history.lua @@ -1,8 +1,10 @@ local M = {} -function M.delete(name, str) - local pattern = ("^%s$"):format(vim.fn.escape(str, "[]\\*~")) - vim.fn.histdel(name, pattern) +function M.delete(name, str, prefix) + prefix = prefix or "" + local pattern = ("^%s%s$"):format(prefix, vim.fn.escape(str, "[]\\*~")) + local result = vim.fn.histdel(name, pattern) + return result == 1 end function M.filter_map(name, f) diff --git a/spec/lua/cmdbuf/handler/lua/cmd_spec.lua b/spec/lua/cmdbuf/handler/lua/cmd_spec.lua index d68e36f..e3cbac0 100644 --- a/spec/lua/cmdbuf/handler/lua/cmd_spec.lua +++ b/spec/lua/cmdbuf/handler/lua/cmd_spec.lua @@ -52,6 +52,30 @@ describe("lua/cmd handler", function() assert.no.exists_pattern("target_lua_cmd") end) + it("can delete a lua= command from history", function() + vim.fn.histadd("cmd", [[lua=vim.cmd.target_lua_cmd()]]) + + cmdbuf.open({ type = "lua/cmd" }) + helper.search("target_lua_cmd") + cmdbuf.delete() + assert.no.exists_pattern("target_lua_cmd") + + vim.cmd.edit({ bang = true }) + assert.no.exists_pattern("target_lua_cmd") + end) + + it("can delete a = command from history", function() + vim.fn.histadd("cmd", [[=vim.cmd.target_lua_cmd()]]) + + cmdbuf.open({ type = "lua/cmd" }) + helper.search("target_lua_cmd") + cmdbuf.delete() + assert.no.exists_pattern("target_lua_cmd") + + vim.cmd.edit({ bang = true }) + assert.no.exists_pattern("target_lua_cmd") + end) + it("lists including lua= command", function() vim.fn.histadd("cmd", [[lua="equal_test"]])