I guess you should use Mass's plugin in his answer.
If you want to know how to do it, you can check this answer.
This is a small task, you can do it with :h popup window
The result looks like this:
| 1 hello bracket {
| 12
| 13
| 14
| 15
| 16
| 17
| 18
| 19
| 20 }
Read comment as explanation:
" show open pair on left top of current window if cursor on (, [ or {.
" close popup window if cursor moved in normal, visual, insert mode.
augroup pair_popup_group | au!
autocmd CursorHold * call s:popup_open_pair()
augroup end
let s:pair_popup_winid = 0
function s:popup_open_pair() abort
" check if already popped up
if s:pair_popup_winid != 0
return
endif
" check if current character is close pair character
let c = matchstr( getline('.'), printf('\%%%dc.', col('.') ) )
if stridx(')]}', c) == -1
return
endif
" check if open pair in current window.
" get matching pair line, add space padded line number to it.
try
let win_top_buf_lnum = line('.') - winline() + 1
let cview = winsaveview()
keepjumps norm! %
if line('.') >= win_top_buf_lnum
return
endif
let content = printf( ' %*d %s', len( line('$') ), line('.'), getline('.') )
finally
call winrestview(cview)
endtry
" show matching pair line on first screen line of current window
let wpos = win_screenpos( winnr() )
let s:pair_popup_winid = popup_create(
\ content, { 'line' : wpos[0], 'col' : wpos[1] })
" close popup if cursor moved
autocmd pair_popup_group CursorMoved,CursorMovedI * ++once
\ call popup_close(s:pair_popup_winid)
\| let s:pair_popup_winid = 0
endfunction