From 9071e045ebae642135b89865ac58e26f8cdb5590 Mon Sep 17 00:00:00 2001 From: jdhao Date: Fri, 30 Aug 2024 00:57:51 +0200 Subject: [PATCH] Make * and # search case aware By default, when you press `*` to search word under the cursor, the option `smartcase` is ignored. This means that if you press `*` when your cursor is on `The`, the lower case one `the` is also searched. In this commit, we translate star and # search into normal search so that 'smartcase' option is respected. --- lua/config/hlslens.lua | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/lua/config/hlslens.lua b/lua/config/hlslens.lua index c682d5c..cbf540a 100644 --- a/lua/config/hlslens.lua +++ b/lua/config/hlslens.lua @@ -35,33 +35,48 @@ keymap.set("n", "N", "", { end, }) -local no_word_under_cursor = function() +local check_cursor_word = function() local cursor_word = vim.fn.expand("") - local result = cursor_word == "" if result then local msg = "E348: No string under cursor" api.nvim_err_writeln(msg) end - return result + return result, cursor_word end keymap.set("n", "*", "", { callback = function() - if no_word_under_cursor() then + local cursor_word_empty, cursor_word = check_cursor_word() + if cursor_word_empty then return end - vim.fn.execute("normal! *N") + + local cmd = string.format([[normal! /\v<%s>]], cursor_word) + + -- In order to say that we are pressing Enter key, instead of typing literally the character, + -- we need to replace special notation with their internal representation. + local escaped_enter = vim.api.nvim_replace_termcodes("", true, false, true) + + -- character `N` is used to keep the cursor when pressing `*` + local full_cmd = cmd .. escaped_enter .. "N" + vim.fn.execute(full_cmd) hlslens.start() end, }) keymap.set("n", "#", "", { callback = function() - if no_word_under_cursor() then + local cursor_word_empty, cursor_word = check_cursor_word() + if cursor_word_empty then return end - vim.fn.execute("normal! #N") + + local cmd = string.format([[normal! ?\v<%s>]], cursor_word) + local escaped_enter = vim.api.nvim_replace_termcodes("", true, false, true) + + local full_cmd = cmd .. escaped_enter .. "N" + vim.fn.execute(full_cmd) hlslens.start() end, })