Vim: Як виділити шаблон пошуку зі сценарію?


0

Я б не подумав, що це буде важко зробити, але це не працює. Я намагаюся зробити це ввімкнути підсвітку пошуку зі скрипту. Я спробував таке:

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

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

Що не працює. Тобто, потрапляючи на пробіл перед деяким текстом із "тестовим текстом" у ньому, текст не виділяється. Користувачеві все одно належить натиснути «n».

Я також спробував додати exec 'normal! n'до кінця функції, але це також не спрацювало. Навіть feedkeys('n')провалюється.

Відповіді:


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.