を使用readfile()
して行番号を読み取り、それらをそれらの行番号に一致する正規表現に変換できます(例\%42l
)。:match
強調表示は、、またはを介して実行できますmatchadd()
。
:MatchLinesFromFile
これがすべてカスタムコマンドに凝縮されています。
":MatchLinesFromFile {file}
" Read line numbers from {file} and highlight all those
" lines in the current window.
":MatchLinesFromFile Remove the highlighting of line numbers.
"
function! s:MatchLinesFromFile( filespec )
if exists('w:matchLinesId')
silent! call matchdelete(w:matchLinesId)
unlet w:matchLinesId
endif
if empty(a:filespec)
return
endif
try
let l:lnums =
\ filter(
\ map(
\ readfile(a:filespec),
\ 'matchstr(v:val, "\\d\\+")'
\ ),
\ '! empty(v:val)'
\)
let l:pattern = join(
\ map(l:lnums, '"\\%" . v:val . "l"'),
\ '\|')
let w:matchLinesId = matchadd('MatchLines', l:pattern)
catch /^Vim\%((\a\+)\)\=:E/
" v:exception contains what is normally in v:errmsg, but with extra
" exception source info prepended, which we cut away.
let v:errmsg = substitute(v:exception, '^Vim\%((\a\+)\)\=:', '', '')
echohl ErrorMsg
echomsg v:errmsg
echohl None
endtry
endfunction
command! -bar -nargs=? -complete=file MatchLinesFromFile call <SID>MatchLinesFromFile(<q-args>)
highlight def link MatchLines Search