Pounce — это плагин движения, похожий на EasyMotion, Sneak, Hop и Lightspeed. Он основан на инкрементном нечетком поиске. Вот демо:
Демо показывает поиск слова «ht_mask», набрав «s», чтобы активировать Pounce, «htm», чтобы уточнить поиск, а затем «J», чтобы выбрать совпадение.
Использование vim-plug:
Plug 'rlane/pounce.nvim'
Команда :Pounce
запускает движение. Введите символ в пункте назначения, и Pounce выделит все совпадения на экране. Затем уточните совпадения, введя больше символов (по порядку), которые присутствуют после пункта назначения. Первая буква совпадения будет заменена прописной буквой «принять ключ». Вы можете нажать эту клавишу, чтобы перейти к матчу, или продолжить уточнение поиска. Enter принимает лучшее совпадение (выделено синим цветом). Escape отменяет движение и оставляет курсор в предыдущей позиции.
Вы также можете использовать :Pounce <chars>
для инициализации поиска с помощью <chars>
. Вы можете напрямую нажать клавишу «Принять», чтобы перейти к этому совпадению или продолжить уточнение в обычном режиме. Вы можете использовать это с <Cr>
для инициализации поиска содержимым регистра. Например, <Cr>/
инициализирует поиск последним шаблоном поиска, который вы использовали в /
. Вы также можете рассмотреть возможность использования сопоставлений <expr>
или обратных вызовов Lua с vim.fn.expand
. Для этих случаев использования определены команды PounceReg <regname>
и PounceExpand <expr>
.
Команда :PounceRepeat
работает таким же образом, но инициализируется входными данными предыдущей команды Pounce.
По умолчанию сопоставления не создаются. Вот предложение:
nmap s <cmd> Pounce <CR>
nmap S <cmd> PounceRepeat <CR>
xmap s <cmd> Pounce <CR>
omap gs <cmd> Pounce <CR> " 's' is used by vim-surround
nmap S :Pounce <C-r> / <cr> " note: if you want to use <C-r> you cannot use <cmd>
Вы также можете использовать Lua API напрямую:
local map = vim . keymap . set
map ( " n " , " s " , function () require ' pounce ' . pounce { } end )
map ( " n " , " S " , function () require ' pounce ' . pounce { do_repeat = true } end )
map ( " x " , " s " , function () require ' pounce ' . pounce { } end )
map ( " o " , " gs " , function () require ' pounce ' . pounce { } end )
map ( " n " , " S " , function () require ' pounce ' . pounce { input = { reg = " / " } } end )
Функция pounce
принимает таблицу в качестве аргумента. Вы можете использовать любые ключи, которые принимает setup
, а также:
require ' pounce ' . pounce {
do_repeat = true | false -- to reuse the last pounce search
input = string | table -- a string to initialize the input, or a table:
input = {
reg = string -- the name of a vim register to use as the input (:h registers)
expand = string -- an expression passed to vim.fn.expand (:h expand())
}
}
Конфигурация выполняется с помощью функции setup
. Вызов setup
не является обязательным. Вот значения по умолчанию:
require ' pounce ' . setup {
accept_keys = " JFKDLSAHGNUVRBYTMICEOXWPQZ " ,
accept_best_key = " <enter> " ,
multi_window = true ,
debug = false ,
}
Обратите внимание, что accept_keys
позволяет вам настроить порядок отображения ключей принятия — при совпадении по наибольшей близости получает первую букву в строке accept_keys
. Пользователи альтернативных раскладок клавиатуры могут изменить эту строку. Colemak DHm может начинаться с NTESIROA...
например.
Ниже перечислены некоторые примеры дополнительных команд, которые вы можете использовать:
<cmd> PounceReg / <cr> " Pounce with last search pattern
<cmd> PounceReg 0 <cr> " Pounce with last yank
<cmd> PounceReg " <cr> " Pounce with last d/c/y
<cmd> PounceReg . <cr> " Pounce with last inserted text
" zy <cmd> PounceReg z<cr > " From visual mode: Pounce using the selection as the input
<cmd> PounceExpand <cword><cr> " Pounce with the current word
<cmd> PounceExpand % <cr> " Pounce with the current filename
В этом пространстве довольно много плагинов. Вот несколько альтернатив Pounce: