Vim: Jak podświetlasz wzór wyszukiwania ze skryptu?

0

Nie sądziłbym, że to będzie trudne, ale nie działa. To, co próbuję zrobić, to włączyć podświetlenie ze skryptu. Próbowałem:

function! g:TestFunc()
    let @/ ="testtext"
    set hlsearch
endfunction

nnoremap <space> :call g:TestFunc()<cr>

Co nie działa. Oznacza to, że naciśnięcie spacji przed tekstem „testtext” w nim nie powoduje podświetlenia tekstu. Użytkownik nadal musi nacisnąć „n”.

Próbowałem też dodać exec 'normal! n' do końca funkcji, ale to również nie działa. Parzysty feedkeys('n') zawodzi.

Steve Vermeulen
źródło

Odpowiedzi:

4

Funkcja działa zgodnie z oczekiwaniami, jeśli hlsearch jest rozbrojony przed wywołaniem. Wygląda na to, że ustawienie tej funkcji nie ma wpływu, jeśli jest już ustawione. Możesz obejść to, ustawiając nohlsearch w twoim mapowaniu:

nnoremap <space> :set nohlsearch\|:call g:TestFunc()<cr>

Jeśli twoim celem jest po prostu podkreślenie pewnych wzorów, a nie musisz specjalnie używać hlsearch mechanizm, możesz zajrzeć do korzystania z match zamiast tego polecenie. Dokładniej realizuje to samo.

Bradd Szonye
źródło
to polecenie meczowe jest dokładnie tym, czego szukałem, okrzyki!
Steve Vermeulen
1

Nie można ustawić ostatnio używanego wzoru wyszukiwania i podświetlania w obrębie funkcji, patrz :help function-search-undo. Zamiast tego przenieś :set hlsearch bezpośrednio do twojego mapowania.

Ingo Karkat
źródło
0
function! wordsubstitute#run()
    execute "normal! gv\"ay"
    let @/ = @a
    "set nohlsearch
    let s:search_cmd = "normal! /".@/."/\<CR>"
    execute s:search_cmd."N"
    "set hlsearch
endfunction

Zamiast używać normal! nN, pisać nN w poleceniu mapowania:

vnoremap [g/ :<c-u>call wordsubstitute#run()<CR>nN
Life
źródło