Подсветка по шаблону
Здесь есть функция, чтобы выделить (и еще одну, чтобы очистить) все строки, которые содержат данный шаблон, с выделением акцента на самом шаблоне.Регистр "последнего поиска" @/
также установлен на запрошенный шаблон, поэтому n
/ N
в обычном режиме переходит вперед / назад по соответствующим линиям.<Leader>l
(эквивалентно \l
в большинстве установок) - это ярлык для выделения строк, которые содержат WORD
под вашим курсором.
highlight def link xHiLine Special
highlight def link xHiPatt String
function! ClearHighlight()
syn clear xHiLine
syn clear xHiPatt
let @/ = ''
endfunction
function! HighlightPattern(patt)
call ClearHighlight()
if a:patt != ''
echo "Highlighting pattern: ".a:patt
exec "syn match xHiPatt \"".a:patt."\" contained"
exec "syn match xHiLine \".*".a:patt.".*\" contains=xHiPatt"
let @/ = a:patt
endif
endfunction
map <Leader>l :call HighlightPattern(expand("<cWORD>"))<CR>
map <Leader>c :call ClearHighlight()<CR>
Складывание по шаблону
Пример свертывания на основе рисунков можно найти в подключаемом модуле Show-Hide Vim .Он предоставляет две команды, SHOW
и HIDE
, и несколько быстрых карт.Например, :SHOW thread=1234
свернет все строки, кроме тех, которые содержат thread=1234
, в то время как zs
в обычном режиме покажет строки, содержащие word
под вашим курсором.[Возможно, вы захотите создать альтернативную карту, например zS
, для использования <cWORD>
вместо <cword>
.]
Шаблоны зданий
Если ни <cword>
, ни <cWORD>
не извлекают достаточно уникальный шаблон фильтра (или чтобы избежать перемещения курсора в соответствующее поле), создайте другую функцию, подобную приведенной ниже, и вызовите ее с карты.
function! GetField(num)
let toks = split(getline('.'))
if len(toks) >= a:num
return toks[a:num-1]
endif
return ''
endfunction
map <Leader>hl :call HighlightPattern(GetField(3))<CR>
map <Leader>fl :exec "SHOW ".GetField(3)<CR>