tex_zathurasyntex.vim 1.47 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
" See LICENSE file for license and copyright information 

" avoid re-execution
if exists("b:did_zathura_synctex_plugin")
  finish
endif
let b:did_zathura_synctex_plugin = 1

" set up global variables
if !exists("g:zathura_synctex_latex_suite")
  let g:zathura_synctex_latex_suite = 1
endif

function! Zathura_SyncTexForward()
  let source = expand("%:p")
  let input = shellescape(line(".").":".col(".").":".source)
  let output = "<none>"
  if exists("*Tex_GetMainFileName") && g:zathura_synctex_latex_suite == 1
    " use Tex_GetMainFileName from latex-suite if it is available
    let output = Tex_GetMainFileName(":p:r").".pdf"
  else
    " try to find synctex files and use them to determine the output file
    let synctex_files = split(glob("%:p:h/*.synctex.gz"), "\n")
    if len(synctex_files) == 0
      echo "No synctex file found"
      return
    endif

    let found = 0
    for synctex in synctex_files
      let pdffile = substitute(synctex, "synctex.gz", "pdf", "")
      let out = system("synctex view -i ".input." -o ".shellescape(pdffile))
      if match(out, "No tag for ".source) >= 0
        continue
      endif

      let found = 1
      let output = pdffile
      break
    endfor

    if found == 0
      echo "No synctex file containing reference to source file found"
      return
    endif
  endif

  let execstr = "silent !zathura --synctex-forward=".input." ".shellescape(output)
  exec execstr
endfunction

nmap <buffer> <Leader>f :call Zathura_SyncTexForward()<Enter><Enter>