references.vim 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. " vim: set fdm=marker et ts=4 sw=4 sts=4:
  2. function! pandoc#keyboard#references#Init() abort "{{{1
  3. " Defaults: {{{2
  4. " We use a mark for some functions, the user can change it
  5. " so it doesn't interfere with his settings
  6. if !exists('g:pandoc#keyboard#references#mark')
  7. let g:pandoc#keyboard#references#mark = 'r'
  8. endif
  9. "}}}2
  10. " Add new reference link (or footnote link) after current paragraph.
  11. noremap <buffer> <silent> <Plug>(pandoc-keyboard-ref-insert) :call pandoc#keyboard#references#Insert_Ref()<cr>a
  12. " Go to link or footnote definition for label under the cursor.
  13. noremap <buffer> <silent> <Plug>(pandoc-keyboard-ref-goto) :call pandoc#keyboard#references#GOTO_Ref()<CR>
  14. " Go back to last point in the text we jumped to a reference from.
  15. noremap <buffer> <silent> <Plug>(pandoc-keyboard-ref-backfrom) :call pandoc#keyboard#references#BACKFROM_Ref()<CR>
  16. if g:pandoc#keyboard#use_default_mappings == 1 && index(g:pandoc#keyboard#blacklist_submodule_mappings, 'references') == -1
  17. nmap <buffer> <localleader>nr <Plug>(pandoc-keyboard-ref-insert)
  18. nmap <buffer> <localleader>rg <Plug>(pandoc-keyboard-ref-goto)
  19. nmap <buffer> <localleader>rb <Plug>(pandoc-keyboard-ref-backfrom)
  20. endif
  21. endfunction
  22. " Functions: {{{1
  23. " handling: {{{2
  24. function! pandoc#keyboard#references#Insert_Ref() abort
  25. execute 'normal m'.g:pandoc#keyboard#references#mark
  26. let reg_save = getreg('*')
  27. normal! "*ya[
  28. call search('\n\(\n\|\_$\)\@=')
  29. execute 'normal! o\<cr>\<esc>0"*P$a: '
  30. call setreg('*', reg_save)
  31. endfunction
  32. " }}}2
  33. " navigation: {{{2
  34. function! pandoc#keyboard#references#GOTO_Ref() abort
  35. let reg_save = getreg('*')
  36. execute 'normal! m'.g:pandoc#keyboard#references#mark
  37. execute 'silent normal! ?[\<cr>vf]"*y'
  38. call setreg('*', substitute(getreg('*'), '\[', '\\\[', 'g'))
  39. call setreg('*', substitute(getreg('*'), '\]', '\\\]', 'g'))
  40. execute 'silent normal! /'.getreg('*').':\<cr>'
  41. call setreg('*', reg_save)
  42. endfunction
  43. function! pandoc#keyboard#references#BACKFROM_Ref() abort
  44. try
  45. execute 'normal! `'.g:pandoc#keyboard#references#mark
  46. " clean up
  47. execute 'delmark '.g:pandoc#keyboard#references#mark
  48. catch /E20/ "no mark set, we must search backwards.
  49. let reg_save = getreg('*')
  50. "move right, because otherwise it would fail if the cursor is at the
  51. "beggining of the line
  52. execute 'silent normal! 0l?[\<cr>vf]"*y'
  53. call setreg('*', substitute(getreg('*'), '\]', '\\\]', 'g'))
  54. execute 'silent normal! ?'.getreg('*').'\<cr>'
  55. call setreg('*', reg_save)
  56. endtry
  57. endfunction
  58. function! pandoc#keyboard#references#NextRefDefinition() abort
  59. endfunction
  60. function! pandoc#keyboard#references#PrevRefDefinition() abort
  61. endfunction
  62. " }}}2
  63. " }}}1