Как включить подсветку поиска из скрипта vim?

Если я сделаю одно из следующих двух:

call search("searchString")

exec "/ searchString"

Затем из скрипта vim выполняет поиск, но не выделяет результаты, хотя hlsearch. Выполнение тех же поисков вне скрипта выделяет результаты.


vim
person crelbor    schedule 26.11.2009    source источник
comment
Я только что нашел ответ сам .. всегда так. Вот он: вызов search(l:searchString) вызов matchadd('Search', l:searchString)   -  person crelbor    schedule 26.11.2009
comment
Пожалуйста, добавьте свой ответ как реальный ответ здесь. Трудно найти комментарий, когда вы действительно ищете ответ.   -  person innaM    schedule 26.11.2009


Ответы (7)


Только что нашел ответ сам:

call search(l:searchString)
call matchadd('Search', l:searchString)
person crelbor    schedule 26.11.2009
comment
Позволяет ли это нормально использовать n/N для следующего/предыдущего совпадения? - person alesplin; 12.02.2010
comment
Это действительно помогает! - person Life; 27.06.2016
comment
@alesplin: Это ответ ниже говорит, что нет. Я разместил решение. - person Aaron Thoma; 11.12.2017

То

feedkeys()

функция является ключом (каламбур):

call feedkeys("/pattern\<CR>")

или чище:

" highlights – or doesn’t – according to 'hlsearch' option
function SearcH(pattern)
    let @/ = a:pattern
    call feedkeys("/\<CR>")
endfunction 
person Aaron Thoma    schedule 11.12.2017
comment
Это сработало для меня. Это похоже на использование кнопки n после поиска. Но у меня очень-очень длинная строка поиска. Можно ли выделить совпадения, не видя строку поиска ниже? - person Reman; 11.02.2019

Я знаю, что это поздно. Однако, когда я искал ответ на эту проблему, появилась эта страница. Поэтому я чувствую себя обязанным помочь исправить это.

вызвать поиск(l:searchString)

вызов matchadd('Поиск', l:searchString)

Не работает для меня. (при запуске из функции) Он выделял слова, которые я хотел найти, но n/N не переключался между ними. Также, когда я выполнил новый поиск, шаблон l:serachStirng все еще оставался выделенным. Этот ответ по этой ссылке работал намного лучше

Управление поиском и подсветкой в ​​Vim из скрипта

Что дало мне:

пусть @/ = l:строка поиска

затем беги

нормальный н

вне функции (поэтому выделение выполняется сразу, без необходимости пользователю нажимать n)

person Pev Hall    schedule 30.12.2012

Чтобы включить, нажмите ESC введите :set hls

Чтобы выключить, нажмите ESC введите :set nohls

person prakash j    schedule 19.03.2013

Ответ найден здесь: http://vim.1045645.n5.nabble.com/highlighting-search-results-from-within-a-function-tt5709191.html#a5709193

```

Одним из решений было бы

function! XXXX() 
    execute '/this' 
    return @/ 
endfunction 

и использовать следующее вместо ":call XXXX()".

:let @/ = XXXX() 

```

person vrybas    schedule 07.03.2014

Я считаю, что это работает изнутри функции (чтобы просто включить подсветку и ничего больше):

call feedkeys(":\<C-u>set hlsearch \<enter>")

person J. Doe    schedule 17.03.2019

Вам нужно поместить это в свой файл .vimrc

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch
endif

Файл .vimrc обычно находится в вашем домашнем каталоге, или вы можете найти его с помощью «locate .vimrc»

person Martin Andersson    schedule 26.11.2009
comment
Речь идет о написании скриптов в vim, а не о включении подсветки поиска и подсветки синтаксиса вообще. - person crelbor; 26.11.2009