Подсветка найти следующую в vim - PullRequest
2 голосов
/ 10 ноября 2011

Я часто использую возможности поиска vim / и буду использовать n для перехода к следующему совпадению. Однако, когда курсор переходит к следующему совпадению и экран перерисовывается, часто совершенно не очевидно, где находится курсор на экране (и, следовательно, где находится следующее совпадение). Раньше мне приходилось танцевать jk, чтобы курсор двигался, чтобы я мог его найти. Мой курсор по умолчанию не мигает (я нахожу это раздражающим), но мне бы хотелось, чтобы это было так: когда курсор переходит к следующему совпадению, он должен изменить цвет или кратковременно мигнуть, чтобы привлечь внимание к его расположению на экране, затем переключиться вернуться к поведению курсора по умолчанию. Как я могу создать это поведение в моем файле .vimrc? Мой гугл-фу подвел меня до сих пор.

Примечание: я знаю, что есть настройка для выделения всех поисковых запросов (hlsearch), но я предпочитаю держать мой взгляд в чистоте. Хорошо бы временно выделить текущее совпадение, но я хочу привлечь внимание только к текущему совпадению, а не ко всем совпадениям.

Ответы [ 3 ]

7 голосов
/ 10 ноября 2011

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

" Center the display line after searches. (This makes it *much* easier to see
" the matched line.)
"
" More info: http://www.vim.org/tips/tip.php?tip_id=528
"
nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap g* g*zz
nnoremap g# g#zz
3 голосов
/ 10 ноября 2011

Стив Лош сделал нечто похожее - при переходе в другое место (клавиша n) курсор мигает! Вот как это работает * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

0 голосов
/ 10 ноября 2011

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

function! s:NextMatch()
    let param = getreg('/')
    let pos = getpos('.')
    let next_match = matchadd('Search', '\%'.pos[1].'l\%'.pos[2].'v'.param)
    redraw
    sleep 250ms
    silent! call matchdelete(next_match)
endfunction

function! s:DoNextMatch()
    let cmd_type = getcmdtype()
    if cmd_type == '/' || cmd_type == '?'
        return "\<cr>:call " . s:SID() . "NextMatch()\<cr>"
    endif
    return "\<cr>"
endfunction

function s:SID()
  return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID$')
endfun

nnoremap <silent> n n:call <sid>NextMatch()<cr>
nnoremap <silent> N N:call <sid>NextMatch()<cr>
cnoremap <silent> <expr> <cr> <sid>DoNextMatch()

Протестировано с: vim -u test.vim -N file.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...