updated for version 7.2a
diff --git a/runtime/ftplugin/pdf.vim b/runtime/ftplugin/pdf.vim
new file mode 100644
index 0000000..1ed9911
--- /dev/null
+++ b/runtime/ftplugin/pdf.vim
@@ -0,0 +1,89 @@
+" Vim filetype plugin file
+" Language:	PDF
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
+" Last Change:	2007 Dec 16
+
+if exists("b:did_ftplugin")
+    finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=%%s
+setlocal comments=:%
+let b:undo_ftplugin = "setlocal cms< com< | unlet! b:match_words"
+
+if exists("g:loaded_matchit")
+    let b:match_words = '\<\%(\d\+\s\+\d\+\s\+\)obj\>:\<endobj\>,\<stream$:\<endstream\>,\<xref\>:\<trailer\>,<<:>>'
+endif
+
+if exists("g:no_plugin_maps") || exists("g:no_pdf_maps") || v:version < 700
+    finish
+endif
+
+if !exists("b:pdf_tagstack")
+    let b:pdf_tagstack = []
+endif
+
+let b:undo_ftplugin .= " | silent! nunmap <buffer> <C-]> | silent! nunmap <buffer> <C-T>"
+nnoremap <silent><buffer> <C-]> :call <SID>Tag()<CR>
+" Inline, so the error from an empty tag stack will be simple.
+nnoremap <silent><buffer> <C-T> :if len(b:pdf_tagstack) > 0 <Bar> call setpos('.',remove(b:pdf_tagstack, -1)) <Bar> else <Bar> exe "norm! \<Lt>C-T>" <Bar> endif<CR>
+
+function! s:Tag()
+    call add(b:pdf_tagstack,getpos('.'))
+    if getline('.') =~ '^\d\+$' && getline(line('.')-1) == 'startxref'
+	return s:dodigits(getline('.'))
+    elseif getline('.') =~ '/Prev\s\+\d\+\>\%(\s\+\d\)\@!' && expand("<cword>") =~ '^\d\+$'
+	return s:dodigits(expand("<cword>"))
+    elseif getline('.') =~ '^\d\{10\} \d\{5\} '
+	return s:dodigits(matchstr(getline('.'),'^\d\+'))
+    else
+	let line = getline(".")
+	let lastend = 0
+	let pat = '\<\d\+\s\+\d\+\s\+R\>'
+	while lastend >= 0
+	    let beg = match(line,'\C'.pat,lastend)
+	    let end = matchend(line,'\C'.pat,lastend)
+	    if beg < col(".") && end >= col(".")
+		return s:doobject(matchstr(line,'\C'.pat,lastend))
+	    endif
+	    let lastend = end
+	endwhile
+	return s:notag()
+    endif
+endfunction
+
+function! s:doobject(string)
+    let first = matchstr(a:string,'^\s*\zs\d\+')
+    let second = matchstr(a:string,'^\s*\d\+\s\+\zs\d\+')
+    norm! m'
+    if first != '' && second != ''
+	let oldline = line('.')
+	let oldcol = col('.')
+	1
+	if !search('^\s*'.first.'\s\+'.second.'\s\+obj\>')
+	    exe oldline
+	    exe 'norm! '.oldcol.'|'
+	    return s:notag()
+	endif
+    endif
+endfunction
+
+function! s:dodigits(digits)
+    let digits = 0 + substitute(a:digits,'^0*','','')
+    norm! m'
+    if digits <= 0
+	norm! 1go
+    else
+	" Go one character before the destination and advance.  This method
+	" lands us after a newline rather than before, if that is our target.
+	exe "goto ".(digits)."|norm! 1 "
+    endif
+endfunction
+
+function! s:notag()
+    silent! call remove(b:pdf_tagstack,-1)
+    echohl ErrorMsg
+    echo "E426: tag not found"
+    echohl NONE
+endfunction