Vim: Как вы выделяете шаблон поиска из скрипта?

624
Steve Vermeulen

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

function! g:TestFunc() let @/ ="testtext" set hlsearch endfunction  nnoremap <space> :call g:TestFunc()<cr> 

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

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

0

3 ответа на вопрос

4
Bradd Szonye

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

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

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

команда того матча - именно то, что я искал, ура! Steve Vermeulen 11 лет назад 0
1
Ingo Karkat

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

0
Life
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 

Instead of using normal! nN, write nN in the mapping command:

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