Я бы не подумал, что это будет сложно сделать, но это не работает. Я пытаюсь включить подсветку поиска из скрипта. Я пробовал следующее:

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

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

Который не работает. То есть удар по пробелу перед текстом с надписью "testtext" не выделяет текст. Пользователь все еще должен нажать "n".

Я также попытался добавить exec 'normal! n' до конца функции, но это также не сработало. Даже feedkeys('n') не работает.

3 ответа3

4

Функция работает как положено, если hlsearch не установлен перед вызовом. Похоже, что установка его в функции не имеет никакого эффекта, если она уже установлена. Вы можете обойти это, установив nohlsearch в вашем отображении:

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

Если ваша цель - просто выделить определенные шаблоны, и вам не нужно специально использовать механизм hlsearch , вы можете вместо этого использовать команду match . Это делает то же самое более чисто.

1

Вы не можете установить последний использованный шаблон поиска и подсветку из функции, см . :help function-search-undo . Вместо этого переместите :set hlsearch прямо в ваше отображение.

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

Вместо использования normal! nN , напишите nN в команде отображения:

vnoremap [g/ :<c-u>call wordsubstitute#run()<CR>nN

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .