Vim: Как вы выделяете шаблон поиска из скрипта?
Я бы не подумал, что это будет сложно сделать, но это не работает. Я пытаюсь включить подсветку поиска из скрипта. Я пробовал следующее:
function! g:TestFunc()
let @/ ="testtext"
set hlsearch
endfunction
nnoremap <space> :call g:TestFunc()<cr>
Который не работает. То есть удар по пробелу перед текстом с надписью "testtext" не выделяет текст. Пользователь все еще должен нажать 'n'.
Я также попытался добавить exec 'normal! n'
до конца функции, но это также не сработало. Четное feedkeys('n')
выходит из строя.
3 ответа
Функция работает как положено, если hlsearch
не вызывается перед вызовом. Похоже, что установка его в функции не имеет никакого эффекта, если она уже установлена. Вы можете обойти это, установив nohlsearch
в вашем отображении:
nnoremap <space> :set nohlsearch\|:call g:TestFunc()<cr>
Если ваша цель просто выделить определенные шаблоны, и вам не нужно hlsearch
механизм, вы можете посмотреть на использование match
команда вместо Это делает то же самое более чисто.
Вы не можете установить последний использованный шаблон поиска и выделения внутри функции, см. :help function-search-undo
, Вместо этого переместите :set hlsearch
прямо в ваше отображение.
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