1
0

quickfix.vim 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. " =============================================================================
  2. " File: autoload/ctrlp/quickfix.vim
  3. " Description: Quickfix extension
  4. " Author: Kien Nguyen <github.com/kien>
  5. " =============================================================================
  6. " Init {{{1
  7. if exists('g:loaded_ctrlp_quickfix') && g:loaded_ctrlp_quickfix
  8. fini
  9. en
  10. let g:loaded_ctrlp_quickfix = 1
  11. cal add(g:ctrlp_ext_vars, {
  12. \ 'init': 'ctrlp#quickfix#init()',
  13. \ 'accept': 'ctrlp#quickfix#accept',
  14. \ 'lname': 'quickfix',
  15. \ 'sname': 'qfx',
  16. \ 'type': 'line',
  17. \ 'sort': 0,
  18. \ 'nolim': 1,
  19. \ })
  20. let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
  21. fu! s:lineout(dict)
  22. retu printf('%s|%d:%d| %s', bufname(a:dict['bufnr']), a:dict['lnum'],
  23. \ a:dict['col'], matchstr(a:dict['text'], '\s*\zs.*\S'))
  24. endf
  25. " Utilities {{{1
  26. fu! s:syntax()
  27. if !ctrlp#nosy()
  28. cal ctrlp#hicheck('CtrlPqfLineCol', 'Search')
  29. sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
  30. en
  31. endf
  32. " Public {{{1
  33. fu! ctrlp#quickfix#init()
  34. cal s:syntax()
  35. retu map(getqflist(), 's:lineout(v:val)')
  36. endf
  37. fu! ctrlp#quickfix#accept(mode, str)
  38. let vals = matchlist(a:str, '^\([^|]\+\ze\)|\(\d\+\):\(\d\+\)|')
  39. if vals == [] || vals[1] == '' | retu | en
  40. cal ctrlp#acceptfile(a:mode, vals[1])
  41. let cur_pos = getpos('.')[1:2]
  42. if cur_pos != [1, 1] && cur_pos != map(vals[2:3], 'str2nr(v:val)')
  43. mark '
  44. en
  45. cal cursor(vals[2], vals[3])
  46. sil! norm! zvzz
  47. endf
  48. fu! ctrlp#quickfix#id()
  49. retu s:id
  50. endf
  51. "}}}
  52. " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2