It's a Neovim plugin that improves the search experience.
It provides:
- stable jump to next / previous search pattern (regardless of the last search direction)
- search the word under the cursor without moving (like
*
or#
) - search operator:
- search text selected in visual mode (visual selection + operator)
- search text provided by a motion (operator + motion)
- it all works for a multiline search.
![](https://private-user-images.githubusercontent.com/17349169/292287310-41f674db-1dfd-4764-b0e9-6a2ce861154f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE2NzUyMDUsIm5iZiI6MTcyMTY3NDkwNSwicGF0aCI6Ii8xNzM0OTE2OS8yOTIyODczMTAtNDFmNjc0ZGItMWRmZC00NzY0LWIwZTktNmEyY2U4NjExNTRmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzIyVDE5MDE0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThiMzQwNDQxODc0ODI1ZjJlYjFhOGE0ZDM3YjI2OGQxNmRhOGE5MDdlYmExNDdjYTJiODg1Yzk1OWE2NTkxNTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.SCnC0SDzhAFHd6PCAFGMYa5653DXdx8A_WaQdsfUICk)
![](https://private-user-images.githubusercontent.com/17349169/292287317-50cdb24c-58b9-4aa6-ba14-f58786b41183.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE2NzUyMDUsIm5iZiI6MTcyMTY3NDkwNSwicGF0aCI6Ii8xNzM0OTE2OS8yOTIyODczMTctNTBjZGIyNGMtNThiOS00YWE2LWJhMTQtZjU4Nzg2YjQxMTgzLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzIyVDE5MDE0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ3ZmQwYTAwYTc5NTUzNTUwNzU0Y2JiYzNmMTkwNjE1NGQ2M2MzNGViOGE1N2I0MjI3MDQxMzIyNzA5NmQ5ZjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.XWo4-IBhu-RI5dje5rt8Q0iXAnCYRRL1g5-tLNYxmT8)
![](https://private-user-images.githubusercontent.com/17349169/275397716-a3a4942d-5a67-4d22-8d78-d33c48375c92.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE2NzUyMDUsIm5iZiI6MTcyMTY3NDkwNSwicGF0aCI6Ii8xNzM0OTE2OS8yNzUzOTc3MTYtYTNhNDk0MmQtNWE2Ny00ZDIyLThkNzgtZDMzYzQ4Mzc1YzkyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzIyVDE5MDE0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTgxMjczNTY1MDRkZmVjNGUyYjBmODgzYzIwZTE5MzY1ZjY2MWRjNTU5MTQzYjBhOWI4ZjdmNTZjMTBiZDA2OTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.9HDeHzpjzSZ7i4tcq1UKuDm9fOgJ9pBzsAHhFibDxNU)
local search = require("improved-search")
-- Search next / previous.
vim.keymap.set({"n", "x", "o"}, "n", search.stable_next)
vim.keymap.set({"n", "x", "o"}, "N", search.stable_previous)
-- Search current word without moving.
vim.keymap.set("n", "!", search.current_word)
-- Search selected text in visual mode
vim.keymap.set("x", "!", search.in_place) -- search selection without moving
vim.keymap.set("x", "*", search.forward) -- search selection forward
vim.keymap.set("x", "#", search.backward) -- search selection backward
-- Search by motion in place
vim.keymap.set("n", "|", search.in_place)
-- You can also use search.forward / search.backward for motion selection.
function / operator | modes | description |
---|---|---|
stable_next | n, x, o | Search next pattern (regardless of a previous search direction) |
stable_previous | n, x, o | Search previous pattern (regardless of a previous search direction) |
current_word[_strict] | n | Search current word in-place |
in_place[_strict] | n, x, o | In-place search operator |
forward[_strict] | n, x, o | Forward search operator |
backward[_strict] | n, x, o | Backward search operator |
_strict
postfix means that a search operator / function uses a pattern with word boundaries. In other words, the pattern is encapsulated with\<
and\>
.
- Search text that is selected by visual block mode isn't work as expected.