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.

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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.