From 43b047691f24937a81bee89cf4397767d05b39fc Mon Sep 17 00:00:00 2001 From: Alisue Date: Wed, 18 Jan 2023 05:29:37 +0900 Subject: [PATCH] WIP --- autoload/kensaku_command.vim | 47 +++++++++++++++++++++++++++++++++++- doc/kensaku_command.jax | 3 +++ plugin/kensaku_command.vim | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/autoload/kensaku_command.vim b/autoload/kensaku_command.vim index 18ced26..d6b9192 100644 --- a/autoload/kensaku_command.vim +++ b/autoload/kensaku_command.vim @@ -1,5 +1,9 @@ function! kensaku_command#search(value) abort - call s:search(kensaku#query(a:value)) + if empty(a:value) + call s:incsearch() + else + call s:search(kensaku#query(a:value)) + endif endfunction function! s:search(value) abort @@ -15,3 +19,44 @@ function! s:search(value) abort echohl None endif endfunction + +function! s:incsearch() abort + let l:ns = { + \ 'curpos': getcurpos(), + \ 'previous': '', + \} + let l:timer = timer_start( + \ g:kensaku_command#incsearch_interval, + \ { -> s:incsearch_update(l:ns) }, + \ {'repeat': -1}, + \) + try + redraw | call input(g:kensaku_command#incsearch_prompt) + finally + call timer_stop(l:timer) + endtry +endfunction + +function! s:incsearch_update(ns) abort + let l:cmdline = getcmdline() + if l:cmdline ==# a:ns.previous + return + endif + let a:ns.previous = l:cmdline + call setpos('.', a:ns.curpos) + silent! call s:search(kensaku#query(l:cmdline)) + redraw +endfunction + +function! s:define(name, default) abort + let g:{a:name} = get(g:, a:name, a:default) +endfunction + +call s:define( + \ 'kensaku_command#incsearch_interval', + \ 100, + \) +call s:define( + \ 'kensaku_command#incsearch_prompt', + \ '/', + \) diff --git a/doc/kensaku_command.jax b/doc/kensaku_command.jax index 3774fbf..936913f 100644 --- a/doc/kensaku_command.jax +++ b/doc/kensaku_command.jax @@ -44,6 +44,9 @@ USAGE *kensaku-command-usage* < 検索結果をハイライトしたい場合は |'hlsearch'| オプションを参照してください。 +また、検索ワードを指定せずに |:Kensaku| コマンドを実行するとインクリメンタルサ +ーチモードになります。 + ============================================================================= INTERFACE *kensaku-command-interface* diff --git a/plugin/kensaku_command.vim b/plugin/kensaku_command.vim index 1ca531e..8aba93a 100644 --- a/plugin/kensaku_command.vim +++ b/plugin/kensaku_command.vim @@ -3,4 +3,4 @@ if exists('g:loaded_kensaku_command') endif let g:loaded_kensaku_command = 1 -command! -nargs=+ Kensaku call kensaku_command#search() +command! -nargs=* Kensaku call kensaku_command#search()