Vim поиск и выделение управления из скрипта - PullRequest
6 голосов
/ 22 сентября 2010

Я пишу скрипт, в котором хочу программно управлять поиском и выделять его.Результаты функции search () не подсвечиваются (я думаю), поэтому использование этой функции мне бесполезно.

То, что я хочу сделать, это использовать команду «normal /» для поиска переменной,но это не кажется простым.Я могу написать команду:

    execute 'normal /' . my_variable . '\<CR>'

(или другие варианты, как указано в подсказке vim здесь: http://vim.wikia.com/wiki/Using_normal_command_in_a_script_for_searching)

, но она ничего не делает.Я могу видеть правильный поисковый термин в командной строке после выполнения строки сценария, но фокус находится в документе, регистр поиска не был изменен, и курсор не выполнил никакого поиска.(Кажется, что не вводится, хотя ошибки не выдается - и да, я тоже пытался использовать литерал ^ M.)

Я могу по крайней мере контролировать регистр поискавыполнив это:

execute 'let @/ ="' . a:term .'"'

, а затем, очевидно, можно сделать следующее:

    normal n

Но этот 'обычный n' ничего не сделает, если я его запущусценарий.Установка регистра поиска работает, если я вручную нажимаю «n» после того, как скрипт завершает поиск, происходит поиск (и появляется подсветка, так как hlsearch включен).Меня даже не волнует, установлен ли курсор, я просто хочу, чтобы шаблон регистра был подсвечен.Но различные комбинации 'set hlsearch' в скрипте также не работают.

Я знаю, что могу использовать 'match ()', но я хочу, чтобы он работал с обычной подсветкой поиска, и мне интересно, чтоЯ делаю не такЭто должно быть что-то простое, но я этого не вижу.Спасибо за любую помощь.

Ответы [ 3 ]

3 голосов
/ 30 декабря 2012

пробег:

let @ / = a: searchStr

изнутри вашей функции, затем запустите

нормальный n

извне вашей функции (внутри она ничего не делает) например.

command -nargs = * Hs call MySearch () | нормальный n

или вы можете использовать:

set hlsearch

вместо обычного n, если вы не хотите, чтобы курсор двигался

(я не могу найти другой способ сделать это, не имея чего-то вне функции.)

3 голосов
/ 22 сентября 2010

Если ваш скрипт использует функции, то эта цитата из :help function-search-undo актуальна:

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

Vim обычно пытается сбросить шаблон поиска (и некоторые другие вещи), когда функция заканчивается, часто вы можете обойтидля этого добавьте n (следующий поиск) в конец сопоставления или используйте :map <expr> и попросите вашу функцию вернуть последовательность клавиш для выполнения.

1 голос
/ 22 сентября 2010

При ближайшем рассмотрении кажется, что \<CR> не заключено в одинарные кавычки.Попробуйте использовать это вместо:

execute 'normal /' . my_variable . "\<CR>"
...