Merge branch 'master' into math-mappings
This commit is contained in:
commit
b9c438d6ee
@ -38,26 +38,77 @@ syntax region texRefRangeEnd
|
|||||||
highlight link texRefRangeStart texRefZone
|
highlight link texRefRangeStart texRefZone
|
||||||
highlight link texRefRangeEnd texRefZone
|
highlight link texRefRangeEnd texRefZone
|
||||||
|
|
||||||
" Support for listings package
|
" {{{1 Support for listings package
|
||||||
syntax region texZone
|
syntax region texZone
|
||||||
\ start="\\begin{lstlisting}"
|
\ start="\\begin{lstlisting}"rs=s
|
||||||
\ end="\\end{lstlisting}\|%stopzone\>"
|
\ end="\\end{lstlisting}\|%stopzone\>"re=e
|
||||||
|
\ keepend
|
||||||
|
\ contains=texBeginEnd
|
||||||
syntax match texInputFile
|
syntax match texInputFile
|
||||||
\ "\\lstinputlisting\s*\(\[.*\]\)\={.\{-}}"
|
\ "\\lstinputlisting\s*\(\[.*\]\)\={.\{-}}"
|
||||||
\ contains=texStatement,texInputCurlies,texInputFileOpt
|
\ contains=texStatement,texInputCurlies,texInputFileOpt
|
||||||
syntax match texZone "\\lstinline\s*\(\[.*\]\)\={.\{-}}"
|
syntax match texZone "\\lstinline\s*\(\[.*\]\)\={.\{-}}"
|
||||||
|
|
||||||
" Nested syntax highlighting for dot
|
" }}}1
|
||||||
|
" {{{1 Nested syntax highlighting for dot
|
||||||
unlet b:current_syntax
|
unlet b:current_syntax
|
||||||
syntax include @DOT syntax/dot.vim
|
syntax include @DOT syntax/dot.vim
|
||||||
syntax region texZone
|
syntax region texZone
|
||||||
\ matchgroup=texRefZone
|
\ start="\\begin{dot2tex}"rs=s
|
||||||
\ start="\\begin{dot2tex}"
|
\ end="\\end{dot2tex}"re=e
|
||||||
\ matchgroup=texRefZone
|
|
||||||
\ end="\\end{dot2tex}"
|
|
||||||
\ keepend
|
\ keepend
|
||||||
\ transparent
|
\ transparent
|
||||||
\ contains=@DOT
|
\ contains=texBeginEnd,@DOT
|
||||||
let b:current_syntax = 'tex'
|
let b:current_syntax = 'tex'
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
" {{{1 Nested syntax highlighting for minted
|
||||||
|
let s:minted = get(g:, 'vimtex_syntax_minted', [
|
||||||
|
\ {
|
||||||
|
\ 'lang' : 'c',
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lang' : 'csharp',
|
||||||
|
\ 'syntax' : 'cs'
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lang' : 'python',
|
||||||
|
\ 'ignore' : [
|
||||||
|
\ 'pythonEscape',
|
||||||
|
\ 'pythonBEscape',
|
||||||
|
\ ],
|
||||||
|
\ }
|
||||||
|
\])
|
||||||
|
|
||||||
|
for entry in s:minted
|
||||||
|
let lang = entry.lang
|
||||||
|
let syntax = get(entry, 'syntax', lang)
|
||||||
|
|
||||||
|
unlet b:current_syntax
|
||||||
|
execute 'syntax include @' . toupper(lang) 'syntax/' . syntax . '.vim'
|
||||||
|
|
||||||
|
if has_key(entry, 'ignore')
|
||||||
|
execute 'syntax cluster' toupper(lang)
|
||||||
|
\ 'remove=' . join(entry.ignore, ',')
|
||||||
|
endif
|
||||||
|
|
||||||
|
execute 'syntax region texZone'
|
||||||
|
\ 'start="\\begin{minted}\_[^}]\{-}{' . lang . '}"rs=s'
|
||||||
|
\ 'end="\\end{minted}"re=e'
|
||||||
|
\ 'keepend'
|
||||||
|
\ 'transparent'
|
||||||
|
\ 'contains=texMinted,@' . toupper(lang)
|
||||||
|
endfor
|
||||||
|
let b:current_syntax = 'tex'
|
||||||
|
|
||||||
|
syntax match texMinted "\\begin{minted}\_[^}]\{-}{\w\+}"
|
||||||
|
\ contains=texBeginEnd,texMintedName
|
||||||
|
syntax match texMinted "\\end{minted}"
|
||||||
|
\ contains=texBeginEnd
|
||||||
|
syntax match texMintedName "{\w\+}"
|
||||||
|
|
||||||
|
highlight link texMintedName texBeginEndName
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
|
||||||
" vim: fdm=marker sw=2
|
" vim: fdm=marker sw=2
|
||||||
|
@ -154,7 +154,7 @@ function! s:init_buffer() " {{{1
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
"
|
"
|
||||||
" Finally we define commands and mappings
|
" Define commands and mappings
|
||||||
"
|
"
|
||||||
|
|
||||||
" Define commands
|
" Define commands
|
||||||
@ -163,6 +163,16 @@ function! s:init_buffer() " {{{1
|
|||||||
|
|
||||||
" Define mappings
|
" Define mappings
|
||||||
nnoremap <buffer> <plug>(vimtex-info) :call vimtex#info(0)<cr>
|
nnoremap <buffer> <plug>(vimtex-info) :call vimtex#info(0)<cr>
|
||||||
|
|
||||||
|
"
|
||||||
|
" Attach autocommands
|
||||||
|
"
|
||||||
|
|
||||||
|
augroup vimtex
|
||||||
|
au!
|
||||||
|
au BufFilePre <buffer> call s:filename_changed_pre()
|
||||||
|
au BufFilePost <buffer> call s:filename_changed_post()
|
||||||
|
augroup END
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
@ -243,6 +253,7 @@ function! s:get_main() " {{{1
|
|||||||
return expand('%:p')
|
return expand('%:p')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
function! s:get_main_recurse(file) " {{{1
|
function! s:get_main_recurse(file) " {{{1
|
||||||
"
|
"
|
||||||
" Check if file is readable
|
" Check if file is readable
|
||||||
@ -314,6 +325,39 @@ endfunction
|
|||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
|
"
|
||||||
|
" Detect file name changes
|
||||||
|
"
|
||||||
|
function! s:filename_changed_pre() " {{{1
|
||||||
|
let thisfile = fnamemodify(expand('%'), ':p')
|
||||||
|
let s:filename_changed = thisfile ==# b:vimtex.tex
|
||||||
|
let s:filename_old = b:vimtex.base
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
function! s:filename_changed_post() " {{{1
|
||||||
|
if s:filename_changed
|
||||||
|
let b:vimtex.tex = fnamemodify(expand('%'), ':p')
|
||||||
|
let b:vimtex.base = fnamemodify(b:vimtex.tex, ':t')
|
||||||
|
let b:vimtex.name = fnamemodify(b:vimtex.tex, ':t:r')
|
||||||
|
let message = ['vimtex: ',
|
||||||
|
\ ['VimtexWarning', 'Filename change detected!'],
|
||||||
|
\ "\n Old filename: ", ['VimtexInfo', s:filename_old],
|
||||||
|
\ "\n New filename: ", ['VimtexInfo', b:vimtex.base]]
|
||||||
|
|
||||||
|
if b:vimtex.pid
|
||||||
|
let message += ["\n latexmk process: ",
|
||||||
|
\ ['VimtexInfo', b:vimtex.pid],
|
||||||
|
\ ['VimtexWarning', ' killed!']]
|
||||||
|
call vimtex#latexmk#stop()
|
||||||
|
endif
|
||||||
|
|
||||||
|
call vimtex#echo#status(message)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
|
||||||
"
|
"
|
||||||
" Simple utility features
|
" Simple utility features
|
||||||
"
|
"
|
||||||
|
@ -65,6 +65,71 @@ function! vimtex#complete#init_script() " {{{1
|
|||||||
" s:extract_inputs.
|
" s:extract_inputs.
|
||||||
"
|
"
|
||||||
let s:label_cache = {}
|
let s:label_cache = {}
|
||||||
|
|
||||||
|
"
|
||||||
|
" Define list for converting stuff like '\IeC{\"u}' to corresponding unicode
|
||||||
|
" symbols (with s:tex2unicode()).
|
||||||
|
"
|
||||||
|
let s:tex2unicode_list = map([
|
||||||
|
\ ['\\''A}' , 'Á'],
|
||||||
|
\ ['\\`A}' , 'À'],
|
||||||
|
\ ['\\^A}' , 'À'],
|
||||||
|
\ ['\\¨A}' , 'Ä'],
|
||||||
|
\ ['\\"A}' , 'Ä'],
|
||||||
|
\ ['\\''a}' , 'á'],
|
||||||
|
\ ['\\`a}' , 'à'],
|
||||||
|
\ ['\\^a}' , 'à'],
|
||||||
|
\ ['\\¨a}' , 'ä'],
|
||||||
|
\ ['\\"a}' , 'ä'],
|
||||||
|
\ ['\\\~a}' , 'ã'],
|
||||||
|
\ ['\\''E}' , 'É'],
|
||||||
|
\ ['\\`E}' , 'È'],
|
||||||
|
\ ['\\^E}' , 'Ê'],
|
||||||
|
\ ['\\¨E}' , 'Ë'],
|
||||||
|
\ ['\\"E}' , 'Ë'],
|
||||||
|
\ ['\\''e}' , 'é'],
|
||||||
|
\ ['\\`e}' , 'è'],
|
||||||
|
\ ['\\^e}' , 'ê'],
|
||||||
|
\ ['\\¨e}' , 'ë'],
|
||||||
|
\ ['\\"e}' , 'ë'],
|
||||||
|
\ ['\\''I}' , 'Í'],
|
||||||
|
\ ['\\`I}' , 'Î'],
|
||||||
|
\ ['\\^I}' , 'Ì'],
|
||||||
|
\ ['\\¨I}' , 'Ï'],
|
||||||
|
\ ['\\"I}' , 'Ï'],
|
||||||
|
\ ['\\''i}' , 'í'],
|
||||||
|
\ ['\\`i}' , 'î'],
|
||||||
|
\ ['\\^i}' , 'ì'],
|
||||||
|
\ ['\\¨i}' , 'ï'],
|
||||||
|
\ ['\\"i}' , 'ï'],
|
||||||
|
\ ['\\''{\?\\i }' , 'í'],
|
||||||
|
\ ['\\''O}' , 'Ó'],
|
||||||
|
\ ['\\`O}' , 'Ò'],
|
||||||
|
\ ['\\^O}' , 'Ô'],
|
||||||
|
\ ['\\¨O}' , 'Ö'],
|
||||||
|
\ ['\\"O}' , 'Ö'],
|
||||||
|
\ ['\\''o}' , 'ó'],
|
||||||
|
\ ['\\`o}' , 'ò'],
|
||||||
|
\ ['\\^o}' , 'ô'],
|
||||||
|
\ ['\\¨o}' , 'ö'],
|
||||||
|
\ ['\\"o}' , 'ö'],
|
||||||
|
\ ['\\o }' , 'ø'],
|
||||||
|
\ ['\\''U}' , 'Ú'],
|
||||||
|
\ ['\\`U}' , 'Ù'],
|
||||||
|
\ ['\\^U}' , 'Û'],
|
||||||
|
\ ['\\¨U}' , 'Ü'],
|
||||||
|
\ ['\\"U}' , 'Ü'],
|
||||||
|
\ ['\\''u}' , 'ú'],
|
||||||
|
\ ['\\`u}' , 'ù'],
|
||||||
|
\ ['\\^u}' , 'û'],
|
||||||
|
\ ['\\¨u}' , 'ü'],
|
||||||
|
\ ['\\"u}' , 'ü'],
|
||||||
|
\ ['\\`N}' , 'Ǹ'],
|
||||||
|
\ ['\\\~N}' , 'Ñ'],
|
||||||
|
\ ['\\''n}' , 'ń'],
|
||||||
|
\ ['\\`n}' , 'ǹ'],
|
||||||
|
\ ['\\\~n}' , 'ñ'],
|
||||||
|
\], '[''\C\(\\IeC\s*{\)\?'' . v:val[0], v:val[1]]')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" The variable s:bstfile must be defined in script level in order to expand
|
" The variable s:bstfile must be defined in script level in order to expand
|
||||||
@ -357,22 +422,26 @@ function! s:labels_extract(file) " {{{1
|
|||||||
"
|
"
|
||||||
" \newlabel{name}{{number}{page}.*}.*
|
" \newlabel{name}{{number}{page}.*}.*
|
||||||
"
|
"
|
||||||
|
" or
|
||||||
|
"
|
||||||
|
" \newlabel{name}{{text {number}}{page}.*}.*
|
||||||
|
"
|
||||||
" and returns a list of [name, number, page] tuples.
|
" and returns a list of [name, number, page] tuples.
|
||||||
"
|
"
|
||||||
let matches = []
|
let matches = []
|
||||||
let lines = readfile(a:file)
|
let lines = readfile(a:file)
|
||||||
let lines = filter(lines, 'v:val =~# ''\\newlabel{''')
|
let lines = filter(lines, 'v:val =~# ''\\newlabel{''')
|
||||||
let lines = filter(lines, 'v:val !~# ''@cref''')
|
let lines = filter(lines, 'v:val !~# ''@cref''')
|
||||||
let lines = map(lines, 'vimtex#util#convert_back(v:val)')
|
let lines = map(lines, 's:tex2unicode(v:val)')
|
||||||
for line in lines
|
for line in lines
|
||||||
let tree = s:tex2tree(line)
|
let tree = s:tex2tree(line)[1:]
|
||||||
if type(tree[2][0]) == type([])
|
let name = remove(tree, 0)[0]
|
||||||
\ && !empty(tree[2][0])
|
if type(tree[0]) == type([]) && !empty(tree[0])
|
||||||
call add(matches, [
|
let number = len(tree[0][0]) > 1
|
||||||
\ s:tree2tex(tree[1][0]),
|
\ ? tree[0][0][1][0]
|
||||||
\ s:tree2tex(tree[2][0][0]),
|
\ : tree[0][0][0]
|
||||||
\ s:tree2tex(tree[2][1][0]),
|
let page = tree[0][1][0]
|
||||||
\ ])
|
call add(matches, [name, number, page])
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return matches
|
return matches
|
||||||
@ -433,12 +502,20 @@ function! s:tex2tree(str) " {{{1
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
function! s:tree2tex(tree) " {{{1
|
function! s:tex2unicode(line) " {{{1
|
||||||
if type(a:tree) == type('')
|
"
|
||||||
return a:tree
|
" Substitute stuff like '\IeC{\"u}' to corresponding unicode symbols
|
||||||
else
|
"
|
||||||
return '{' . join(map(a:tree, 's:tree2tex(v:val)'), '') . '}'
|
let line = a:line
|
||||||
endif
|
for [pat, symbol] in s:tex2unicode_list
|
||||||
|
let line = substitute(line, pat, symbol, 'g')
|
||||||
|
endfor
|
||||||
|
|
||||||
|
"
|
||||||
|
" There might be some missing conversions, which might be fixed by the last
|
||||||
|
" substitution
|
||||||
|
"
|
||||||
|
return substitute(line, '\C\(\\IeC\s*{\)\?\\.\(.\)}', '\1', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
@ -12,6 +12,7 @@ function! vimtex#echo#init_script() " {{{1
|
|||||||
highlight link VimtexMsg ModeMsg
|
highlight link VimtexMsg ModeMsg
|
||||||
highlight link VimtexSuccess Statement
|
highlight link VimtexSuccess Statement
|
||||||
highlight link VimtexWarning WarningMsg
|
highlight link VimtexWarning WarningMsg
|
||||||
|
highlight link VimtexInfo Question
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
@ -35,19 +35,6 @@ function! vimtex#fold#init_script() " {{{1
|
|||||||
" Define some script variables
|
" Define some script variables
|
||||||
let s:parts = '\v^\s*(\\|\% Fake)(' . join(g:vimtex_fold_parts, '|') . ')>'
|
let s:parts = '\v^\s*(\\|\% Fake)(' . join(g:vimtex_fold_parts, '|') . ')>'
|
||||||
let s:secs = '\v^\s*(\\|\% Fake)(' . join(g:vimtex_fold_sections, '|') . ')>'
|
let s:secs = '\v^\s*(\\|\% Fake)(' . join(g:vimtex_fold_sections, '|') . ')>'
|
||||||
|
|
||||||
" For automatic folding with foldmethod=expr:
|
|
||||||
" The foldexpr function returns "=" for most lines, which means it can
|
|
||||||
" become slow for large files. The following is a hack that is based on
|
|
||||||
" this reply to a discussion on the Vim Developer list:
|
|
||||||
" http://permalink.gmane.org/gmane.editors.vim.devel/14100
|
|
||||||
if g:vimtex_fold_automatic
|
|
||||||
augroup latex_fold
|
|
||||||
autocmd!
|
|
||||||
autocmd InsertEnter *.tex call FdmSave()
|
|
||||||
autocmd InsertLeave *.tex call FdmRestore()
|
|
||||||
augroup END
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
@ -66,14 +53,27 @@ function! vimtex#fold#init_buffer() " {{{1
|
|||||||
" Define commands
|
" Define commands
|
||||||
command! -buffer VimtexRefreshFolds call vimtex#fold#refresh('zx')
|
command! -buffer VimtexRefreshFolds call vimtex#fold#refresh('zx')
|
||||||
|
|
||||||
" Set options for automatic/manual mode
|
" Set options for automatic/manual folding mode
|
||||||
if g:vimtex_fold_automatic
|
if g:vimtex_fold_automatic
|
||||||
nnoremap <silent><buffer> u :call FdmSave()<cr>u:call FdmRestore()<cr>
|
nnoremap <silent><buffer> u :call FdmSave()<cr>u:call FdmRestore()<cr>
|
||||||
|
|
||||||
|
" For automatic folding with foldmethod=expr:
|
||||||
|
" The foldexpr function returns "=" for most lines, which means it can
|
||||||
|
" become slow for large files. The following is a hack that is based on
|
||||||
|
" this reply to a discussion on the Vim Developer list:
|
||||||
|
" http://permalink.gmane.org/gmane.editors.vim.devel/14100
|
||||||
|
if g:vimtex_fold_automatic
|
||||||
|
augroup vimtex_fold_automatic
|
||||||
|
autocmd!
|
||||||
|
autocmd InsertEnter <buffer> call FdmSave()
|
||||||
|
autocmd InsertLeave <buffer> call FdmRestore()
|
||||||
|
augroup END
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
augroup latex_fold
|
augroup vimtex_fold_manual
|
||||||
autocmd!
|
autocmd!
|
||||||
autocmd CursorMoved *.tex call vimtex#fold#refresh('zx')
|
autocmd CursorMoved <buffer> call vimtex#fold#refresh('zx')
|
||||||
autocmd CursorMoved *.tex autocmd! latex_fold
|
autocmd CursorMoved <buffer> autocmd! vimtex_fold_manual
|
||||||
augroup END
|
augroup END
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -13,6 +13,8 @@ function! vimtex#latexmk#init_options() " {{{1
|
|||||||
call vimtex#util#set_default('g:vimtex_latexmk_callback', 1)
|
call vimtex#util#set_default('g:vimtex_latexmk_callback', 1)
|
||||||
call vimtex#util#set_default('g:vimtex_latexmk_continuous', 1)
|
call vimtex#util#set_default('g:vimtex_latexmk_continuous', 1)
|
||||||
call vimtex#util#set_default('g:vimtex_latexmk_options', '-pdf')
|
call vimtex#util#set_default('g:vimtex_latexmk_options', '-pdf')
|
||||||
|
call vimtex#util#set_default('g:vimtex_latexmk_progname',
|
||||||
|
\ get(v:, 'progpath', get(v:, 'progname')))
|
||||||
call vimtex#util#set_default('g:vimtex_quickfix_autojump', '0')
|
call vimtex#util#set_default('g:vimtex_quickfix_autojump', '0')
|
||||||
call vimtex#util#set_default('g:vimtex_quickfix_ignore_all_warnings', 0)
|
call vimtex#util#set_default('g:vimtex_quickfix_ignore_all_warnings', 0)
|
||||||
call vimtex#util#set_default('g:vimtex_quickfix_ignored_warnings', [])
|
call vimtex#util#set_default('g:vimtex_quickfix_ignored_warnings', [])
|
||||||
@ -28,7 +30,7 @@ function! vimtex#latexmk#init_script() " {{{1
|
|||||||
|
|
||||||
" Ensure that all latexmk processes are stopped when vim exits
|
" Ensure that all latexmk processes are stopped when vim exits
|
||||||
if g:vimtex_latexmk_continuous
|
if g:vimtex_latexmk_continuous
|
||||||
augroup latex_latexmk
|
augroup vimtex_latexmk
|
||||||
autocmd!
|
autocmd!
|
||||||
autocmd VimLeave * call vimtex#latexmk#stop_all()
|
autocmd VimLeave * call vimtex#latexmk#stop_all()
|
||||||
augroup END
|
augroup END
|
||||||
@ -43,7 +45,7 @@ function! vimtex#latexmk#init_buffer() " {{{1
|
|||||||
compiler latexmk
|
compiler latexmk
|
||||||
|
|
||||||
" Initialize system PID
|
" Initialize system PID
|
||||||
let b:vimtex.pid = get(b:vimtex, 'pid', 0)
|
call s:latexmk_init_pid()
|
||||||
|
|
||||||
" Define commands
|
" Define commands
|
||||||
command! -buffer VimtexCompile call vimtex#latexmk#compile()
|
command! -buffer VimtexCompile call vimtex#latexmk#compile()
|
||||||
@ -73,8 +75,9 @@ function! vimtex#latexmk#init_buffer() " {{{1
|
|||||||
|
|
||||||
" Kill running latexmk process if all buffers for a latex project are closed
|
" Kill running latexmk process if all buffers for a latex project are closed
|
||||||
if g:vimtex_latexmk_continuous
|
if g:vimtex_latexmk_continuous
|
||||||
augroup latex_latexmk
|
augroup vimtex_latexmk
|
||||||
autocmd BufUnload <buffer> call s:stop_buffer()
|
autocmd BufLeave <buffer> call s:buffer_left()
|
||||||
|
autocmd BufDelete <buffer> call s:buffer_deleted()
|
||||||
augroup END
|
augroup END
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
@ -206,6 +209,7 @@ endfunction
|
|||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
function! vimtex#latexmk#errors_open(force) " {{{1
|
function! vimtex#latexmk#errors_open(force) " {{{1
|
||||||
|
if !exists('b:vimtex') | return | endif
|
||||||
cclose
|
cclose
|
||||||
|
|
||||||
let log = b:vimtex.log()
|
let log = b:vimtex.log()
|
||||||
@ -268,7 +272,7 @@ function! vimtex#latexmk#output() " {{{1
|
|||||||
silent exe 'split ' . tmp
|
silent exe 'split ' . tmp
|
||||||
|
|
||||||
" Better automatic update
|
" Better automatic update
|
||||||
augroup tmp_update
|
augroup vimtex_tmp_update
|
||||||
autocmd!
|
autocmd!
|
||||||
autocmd BufEnter * silent! checktime
|
autocmd BufEnter * silent! checktime
|
||||||
autocmd CursorHold * silent! checktime
|
autocmd CursorHold * silent! checktime
|
||||||
@ -276,7 +280,7 @@ function! vimtex#latexmk#output() " {{{1
|
|||||||
autocmd CursorMoved * silent! checktime
|
autocmd CursorMoved * silent! checktime
|
||||||
autocmd CursorMovedI * silent! checktime
|
autocmd CursorMovedI * silent! checktime
|
||||||
augroup END
|
augroup END
|
||||||
silent exe 'autocmd! BufDelete ' . tmp . ' augroup! tmp_update'
|
silent exe 'autocmd! BufDelete ' . tmp . ' augroup! vimtex_tmp_update'
|
||||||
|
|
||||||
" Set some mappings
|
" Set some mappings
|
||||||
nnoremap <buffer> <silent> q :bwipeout<cr>
|
nnoremap <buffer> <silent> q :bwipeout<cr>
|
||||||
@ -392,10 +396,10 @@ function! s:latexmk_build_cmd() " {{{1
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if g:vimtex_latexmk_callback && has('clientserver')
|
if g:vimtex_latexmk_callback && has('clientserver')
|
||||||
let success = v:progname
|
let success = g:vimtex_latexmk_progname
|
||||||
let success .= ' --servername ' . v:servername
|
let success .= ' --servername ' . v:servername
|
||||||
let success .= ' --remote-expr \"vimtex\#latexmk\#callback(1)\"'
|
let success .= ' --remote-expr \"vimtex\#latexmk\#callback(1)\"'
|
||||||
let failed = v:progname
|
let failed = g:vimtex_latexmk_progname
|
||||||
let failed .= ' --servername ' . v:servername
|
let failed .= ' --servername ' . v:servername
|
||||||
let failed .= ' --remote-expr \"vimtex\#latexmk\#callback(0)\"'
|
let failed .= ' --remote-expr \"vimtex\#latexmk\#callback(0)\"'
|
||||||
let cmd .= vimtex#latexmk#add_option('success_cmd', success)
|
let cmd .= vimtex#latexmk#add_option('success_cmd', success)
|
||||||
@ -427,13 +431,44 @@ function! s:latexmk_build_cmd() " {{{1
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
function! s:latexmk_init_pid() " {{{1
|
||||||
|
"
|
||||||
|
" First see if the PID is already defined
|
||||||
|
"
|
||||||
|
let b:vimtex.pid = get(b:vimtex, 'pid', 0)
|
||||||
|
|
||||||
|
"
|
||||||
|
" If the PID is 0, then search for existing processes
|
||||||
|
"
|
||||||
|
if b:vimtex.pid ==# 0
|
||||||
|
if has('win32')
|
||||||
|
"
|
||||||
|
" PASS - don't know how to do this on Windows yet.
|
||||||
|
"
|
||||||
|
return
|
||||||
|
else
|
||||||
|
"
|
||||||
|
" Use pgrep combined with /proc/PID/cwd to search for existing process
|
||||||
|
"
|
||||||
|
for l:pid in split(system(
|
||||||
|
\ 'pgrep -f "^perl.*latexmk.*' . b:vimtex.base . '"'), "\n")
|
||||||
|
let path = resolve('/proc/' . l:pid . '/cwd') . '/' . b:vimtex.base
|
||||||
|
if path ==# b:vimtex.tex
|
||||||
|
let b:vimtex.pid = str2nr(l:pid)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:latexmk_set_pid() " {{{1
|
function! s:latexmk_set_pid() " {{{1
|
||||||
if has('win32')
|
if has('win32')
|
||||||
let pidcmd = 'tasklist /fi "imagename eq latexmk.exe"'
|
let pidcmd = 'tasklist /fi "imagename eq latexmk.exe"'
|
||||||
let pidinfo = split(system(pidcmd), '\n')[-1]
|
let pidinfo = split(system(pidcmd), '\n')[-1]
|
||||||
let b:vimtex.pid = split(pidinfo,'\s\+')[1]
|
let b:vimtex.pid = str2nr(split(pidinfo,'\s\+')[1])
|
||||||
else
|
else
|
||||||
let b:vimtex.pid = system('pgrep -nf "^perl.*latexmk"')[:-2]
|
let b:vimtex.pid = str2nr(system('pgrep -nf "^perl.*latexmk"')[:-2])
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -454,6 +489,34 @@ endfunction
|
|||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
|
function! s:buffer_left() " {{{1
|
||||||
|
"
|
||||||
|
" Store buffer variables as script variables so they are available if the
|
||||||
|
" buffer is deleted. This is done in order to be able to kill remaining
|
||||||
|
" latexmk processes.
|
||||||
|
"
|
||||||
|
let s:vimtex = b:vimtex
|
||||||
|
let s:vimtex_id = b:vimtex_id
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:buffer_deleted() " {{{1
|
||||||
|
if s:vimtex.pid == 0 | return | endif
|
||||||
|
|
||||||
|
"
|
||||||
|
" The buffer is deleted, so we must kill the remaining latexmk process if the
|
||||||
|
" current buffer was the last open buffer for the current LaTeX blob/project.
|
||||||
|
"
|
||||||
|
" The buffer variables has already been stored as script variables by
|
||||||
|
" s:buffer_left().
|
||||||
|
"
|
||||||
|
if len(filter(
|
||||||
|
\ map(filter(range(1, bufnr('$')), 'buflisted(v:val)'),
|
||||||
|
\ 'getbufvar(v:val, ''vimtex_id'', -1)'),
|
||||||
|
\ 'v:val == s:vimtex_id')) == 1
|
||||||
|
silent call s:latexmk_kill(s:vimtex)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:log_contains_error(logfile) " {{{1
|
function! s:log_contains_error(logfile) " {{{1
|
||||||
let lines = readfile(a:logfile)
|
let lines = readfile(a:logfile)
|
||||||
let lines = filter(lines, 'v:val =~# ''^.*:\d\+: ''')
|
let lines = filter(lines, 'v:val =~# ''^.*:\d\+: ''')
|
||||||
@ -463,35 +526,6 @@ function! s:log_contains_error(logfile) " {{{1
|
|||||||
return len(lines) > 0
|
return len(lines) > 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:stop_buffer() " {{{1
|
|
||||||
"
|
|
||||||
" Only run if latex variables are set
|
|
||||||
"
|
|
||||||
if !exists('b:vimtex') | return | endif
|
|
||||||
|
|
||||||
"
|
|
||||||
" Only stop if latexmk is running
|
|
||||||
"
|
|
||||||
if b:vimtex.pid !=# 0
|
|
||||||
"
|
|
||||||
" Count the number of buffers that point to current latex blob
|
|
||||||
"
|
|
||||||
let n = 0
|
|
||||||
for b in filter(range(1, bufnr('$')), 'buflisted(v:val)')
|
|
||||||
if b:vimtex_id == getbufvar(b, 'vimtex_id', -1)
|
|
||||||
let n += 1
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
"
|
|
||||||
" Only stop if current buffer is the last for current latex blob
|
|
||||||
"
|
|
||||||
if n == 1
|
|
||||||
silent call vimtex#latexmk#stop()
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:check_system_compatibility() " {{{1
|
function! s:check_system_compatibility() " {{{1
|
||||||
"
|
"
|
||||||
" Check for required executables
|
" Check for required executables
|
||||||
|
@ -17,7 +17,7 @@ function! vimtex#motion#init_script() " {{{1
|
|||||||
|
|
||||||
" Highlight matching parens ($, (), ...)
|
" Highlight matching parens ($, (), ...)
|
||||||
if g:vimtex_motion_matchparen
|
if g:vimtex_motion_matchparen
|
||||||
augroup latex_motion
|
augroup vimtex_motion
|
||||||
autocmd!
|
autocmd!
|
||||||
" Disable matchparen autocommands
|
" Disable matchparen autocommands
|
||||||
autocmd BufEnter *.tex
|
autocmd BufEnter *.tex
|
||||||
|
@ -24,66 +24,6 @@ function! vimtex#util#init_script() " {{{1
|
|||||||
\ '\\\Cright\s*\%([^\\a-zA-Z0-9]\|\\.\|\\\a*\)',
|
\ '\\\Cright\s*\%([^\\a-zA-Z0-9]\|\\.\|\\\a*\)',
|
||||||
\ '\\\cbigg\?\()\|\]\|\\}\)',
|
\ '\\\cbigg\?\()\|\]\|\\}\)',
|
||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
let s:convert_back_list = map([
|
|
||||||
\ ['\\''A}' , 'Á'],
|
|
||||||
\ ['\\`A}' , 'À'],
|
|
||||||
\ ['\\^A}' , 'À'],
|
|
||||||
\ ['\\¨A}' , 'Ä'],
|
|
||||||
\ ['\\"A}' , 'Ä'],
|
|
||||||
\ ['\\''a}' , 'á'],
|
|
||||||
\ ['\\`a}' , 'à'],
|
|
||||||
\ ['\\^a}' , 'à'],
|
|
||||||
\ ['\\¨a}' , 'ä'],
|
|
||||||
\ ['\\"a}' , 'ä'],
|
|
||||||
\ ['\\''E}' , 'É'],
|
|
||||||
\ ['\\`E}' , 'È'],
|
|
||||||
\ ['\\^E}' , 'Ê'],
|
|
||||||
\ ['\\¨E}' , 'Ë'],
|
|
||||||
\ ['\\"E}' , 'Ë'],
|
|
||||||
\ ['\\''e}' , 'é'],
|
|
||||||
\ ['\\`e}' , 'è'],
|
|
||||||
\ ['\\^e}' , 'ê'],
|
|
||||||
\ ['\\¨e}' , 'ë'],
|
|
||||||
\ ['\\"e}' , 'ë'],
|
|
||||||
\ ['\\''I}' , 'Í'],
|
|
||||||
\ ['\\`I}' , 'Î'],
|
|
||||||
\ ['\\^I}' , 'Ì'],
|
|
||||||
\ ['\\¨I}' , 'Ï'],
|
|
||||||
\ ['\\"I}' , 'Ï'],
|
|
||||||
\ ['\\''i}' , 'í'],
|
|
||||||
\ ['\\`i}' , 'î'],
|
|
||||||
\ ['\\^i}' , 'ì'],
|
|
||||||
\ ['\\¨i}' , 'ï'],
|
|
||||||
\ ['\\"i}' , 'ï'],
|
|
||||||
\ ['\\''{\?\\i }' , 'í'],
|
|
||||||
\ ['\\''O}' , 'Ó'],
|
|
||||||
\ ['\\`O}' , 'Ò'],
|
|
||||||
\ ['\\^O}' , 'Ô'],
|
|
||||||
\ ['\\¨O}' , 'Ö'],
|
|
||||||
\ ['\\"O}' , 'Ö'],
|
|
||||||
\ ['\\''o}' , 'ó'],
|
|
||||||
\ ['\\`o}' , 'ò'],
|
|
||||||
\ ['\\^o}' , 'ô'],
|
|
||||||
\ ['\\¨o}' , 'ö'],
|
|
||||||
\ ['\\"o}' , 'ö'],
|
|
||||||
\ ['\\o }' , 'ø'],
|
|
||||||
\ ['\\''U}' , 'Ú'],
|
|
||||||
\ ['\\`U}' , 'Ù'],
|
|
||||||
\ ['\\^U}' , 'Û'],
|
|
||||||
\ ['\\¨U}' , 'Ü'],
|
|
||||||
\ ['\\"U}' , 'Ü'],
|
|
||||||
\ ['\\''u}' , 'ú'],
|
|
||||||
\ ['\\`u}' , 'ù'],
|
|
||||||
\ ['\\^u}' , 'û'],
|
|
||||||
\ ['\\¨u}' , 'ü'],
|
|
||||||
\ ['\\"u}' , 'ü'],
|
|
||||||
\ ['\\`N}' , 'Ǹ'],
|
|
||||||
\ ['\\\~N}' , 'Ñ'],
|
|
||||||
\ ['\\''n}' , 'ń'],
|
|
||||||
\ ['\\`n}' , 'ǹ'],
|
|
||||||
\ ['\\\~n}' , 'ñ'],
|
|
||||||
\], '[''\C\(\\IeC\s*{\)\?'' . v:val[0], v:val[1]]')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
@ -92,23 +32,6 @@ endfunction
|
|||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
function! vimtex#util#convert_back(line) " {{{1
|
|
||||||
"
|
|
||||||
" Substitute stuff like '\IeC{\"u}' to corresponding unicode symbols
|
|
||||||
"
|
|
||||||
let line = a:line
|
|
||||||
for [pat, symbol] in s:convert_back_list
|
|
||||||
let line = substitute(line, pat, symbol, 'g')
|
|
||||||
endfor
|
|
||||||
|
|
||||||
"
|
|
||||||
" There might be some missing conversions, which might be fixed by the last
|
|
||||||
" substitution
|
|
||||||
"
|
|
||||||
return substitute(line, '\C\(\\IeC\s*{\)\?\\.\(.\)}', '\1', 'g')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" }}}1
|
|
||||||
function! vimtex#util#execute(exe) " {{{1
|
function! vimtex#util#execute(exe) " {{{1
|
||||||
" Execute the given command on the current system. Wrapper function to make
|
" Execute the given command on the current system. Wrapper function to make
|
||||||
" it easier to run on both windows and unix.
|
" it easier to run on both windows and unix.
|
||||||
|
@ -9,6 +9,7 @@ let s:viewers = [
|
|||||||
\ 'mupdf',
|
\ 'mupdf',
|
||||||
\ 'okular',
|
\ 'okular',
|
||||||
\ 'qpdfview',
|
\ 'qpdfview',
|
||||||
|
\ 'skim',
|
||||||
\ 'sumatrapdf',
|
\ 'sumatrapdf',
|
||||||
\ 'zathura',
|
\ 'zathura',
|
||||||
\ ]
|
\ ]
|
||||||
@ -20,17 +21,7 @@ function! vimtex#view#init_options() " {{{1
|
|||||||
call vimtex#util#set_default('g:vimtex_view_enabled', 1)
|
call vimtex#util#set_default('g:vimtex_view_enabled', 1)
|
||||||
if !g:vimtex_view_enabled | return | endif
|
if !g:vimtex_view_enabled | return | endif
|
||||||
|
|
||||||
for viewer in s:viewers
|
|
||||||
call vimtex#util#set_default('g:vimtex_view_' . viewer . '_options', '')
|
|
||||||
endfor
|
|
||||||
|
|
||||||
call vimtex#util#set_default_os_specific('g:vimtex_view_general_viewer',
|
|
||||||
\ {
|
|
||||||
\ 'linux' : 'xdg-open',
|
|
||||||
\ 'mac' : 'open',
|
|
||||||
\ })
|
|
||||||
call vimtex#util#set_default('g:vimtex_view_method', 'general')
|
call vimtex#util#set_default('g:vimtex_view_method', 'general')
|
||||||
call vimtex#util#set_default('g:vimtex_view_mupdf_send_keys', '')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
@ -52,6 +43,20 @@ function! vimtex#view#init_buffer() " {{{1
|
|||||||
execute 'let b:vimtex.viewer = ' . viewer
|
execute 'let b:vimtex.viewer = ' . viewer
|
||||||
call b:vimtex.viewer.init()
|
call b:vimtex.viewer.init()
|
||||||
|
|
||||||
|
"
|
||||||
|
" Create view and/or callback hooks (if they exist)
|
||||||
|
"
|
||||||
|
for point in ['view', 'callback']
|
||||||
|
execute 'let hook = ''g:vimtex_view_'
|
||||||
|
\ . g:vimtex_view_method . '_hook_' . point . ''''
|
||||||
|
if exists(hook)
|
||||||
|
execute 'let hookfunc = ''*'' . ' . hook
|
||||||
|
if exists(hookfunc)
|
||||||
|
execute 'let b:vimtex.viewer.hook_' . point . ' = function(' . hook . ')'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
"
|
"
|
||||||
" Define commands
|
" Define commands
|
||||||
"
|
"
|
||||||
@ -80,6 +85,16 @@ endfunction
|
|||||||
"
|
"
|
||||||
" {{{1 General
|
" {{{1 General
|
||||||
function! s:general.init() dict " {{{2
|
function! s:general.init() dict " {{{2
|
||||||
|
"
|
||||||
|
" Set default options
|
||||||
|
"
|
||||||
|
call vimtex#util#set_default_os_specific('g:vimtex_view_general_viewer',
|
||||||
|
\ {
|
||||||
|
\ 'linux' : 'xdg-open',
|
||||||
|
\ 'mac' : 'open',
|
||||||
|
\ })
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_general_options', '')
|
||||||
|
|
||||||
if !executable(g:vimtex_view_general_viewer)
|
if !executable(g:vimtex_view_general_viewer)
|
||||||
echoerr 'vimtex viewer is not executable!'
|
echoerr 'vimtex viewer is not executable!'
|
||||||
echoerr 'g:vimtex_view_general_viewer = '
|
echoerr 'g:vimtex_view_general_viewer = '
|
||||||
@ -98,6 +113,10 @@ function! s:general.view(file) dict " {{{2
|
|||||||
let exe.cmd .= ' ' . vimtex#util#fnameescape(outfile)
|
let exe.cmd .= ' ' . vimtex#util#fnameescape(outfile)
|
||||||
call vimtex#util#execute(exe)
|
call vimtex#util#execute(exe)
|
||||||
let self.cmd_view = exe.cmd
|
let self.cmd_view = exe.cmd
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
@ -117,6 +136,16 @@ function! s:mupdf.init() dict " {{{2
|
|||||||
" Only initialize once
|
" Only initialize once
|
||||||
if has_key(self, 'xwin_id') | return | endif
|
if has_key(self, 'xwin_id') | return | endif
|
||||||
|
|
||||||
|
"
|
||||||
|
" Default MuPDF settings
|
||||||
|
"
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_mupdf_options', '')
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_mupdf_send_keys', '')
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_mupdf_hook_callback',
|
||||||
|
\ 's:focus_vim')
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_mupdf_hook_view',
|
||||||
|
\ 's:focus_viewer')
|
||||||
|
|
||||||
if !executable('mupdf')
|
if !executable('mupdf')
|
||||||
echoerr 'vimtex viewer MuPDF is not executable!'
|
echoerr 'vimtex viewer MuPDF is not executable!'
|
||||||
endif
|
endif
|
||||||
@ -144,6 +173,10 @@ function! s:mupdf.view(file) dict " {{{2
|
|||||||
else
|
else
|
||||||
call self.forward_search(outfile)
|
call self.forward_search(outfile)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
@ -231,12 +264,13 @@ endfunction
|
|||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
function! s:mupdf.latexmk_callback() dict " {{{2
|
function! s:mupdf.latexmk_callback() dict " {{{2
|
||||||
" Try to get xwin ID
|
|
||||||
if !self.xwin_exists()
|
if !self.xwin_exists()
|
||||||
if self.xwin_get_id()
|
if self.xwin_get_id()
|
||||||
call self.xwin_send_keys(g:vimtex_view_mupdf_send_keys)
|
call self.xwin_send_keys(g:vimtex_view_mupdf_send_keys)
|
||||||
call self.forward_search(b:vimtex.out())
|
call self.forward_search(b:vimtex.out())
|
||||||
call self.focus_vim()
|
if has_key(self, 'hook_callback')
|
||||||
|
call self.hook_callback()
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
@ -255,6 +289,8 @@ endfunction
|
|||||||
|
|
||||||
" {{{1 Okular
|
" {{{1 Okular
|
||||||
function! s:okular.init() dict " {{{2
|
function! s:okular.init() dict " {{{2
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_okular_options', '')
|
||||||
|
|
||||||
if !executable('okular')
|
if !executable('okular')
|
||||||
echoerr 'vimtex viewer Okular is not executable!'
|
echoerr 'vimtex viewer Okular is not executable!'
|
||||||
endif
|
endif
|
||||||
@ -271,12 +307,18 @@ function! s:okular.view(file) dict " {{{2
|
|||||||
let exe.cmd .= '\#src:' . line('.') . vimtex#util#fnameescape(expand('%:p'))
|
let exe.cmd .= '\#src:' . line('.') . vimtex#util#fnameescape(expand('%:p'))
|
||||||
call vimtex#util#execute(exe)
|
call vimtex#util#execute(exe)
|
||||||
let self.cmd_view = exe.cmd
|
let self.cmd_view = exe.cmd
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
|
|
||||||
" {{{1 qpdfview
|
" {{{1 qpdfview
|
||||||
function! s:qpdfview.init() dict " {{{2
|
function! s:qpdfview.init() dict " {{{2
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_qpdfview_options', '')
|
||||||
|
|
||||||
if !executable('qpdfview')
|
if !executable('qpdfview')
|
||||||
echoerr 'vimtex viewer qpdfview is not executable!'
|
echoerr 'vimtex viewer qpdfview is not executable!'
|
||||||
endif
|
endif
|
||||||
@ -295,12 +337,48 @@ function! s:qpdfview.view(file) dict " {{{2
|
|||||||
let exe.cmd .= ':' . col('.')
|
let exe.cmd .= ':' . col('.')
|
||||||
call vimtex#util#execute(exe)
|
call vimtex#util#execute(exe)
|
||||||
let self.cmd_view = exe.cmd
|
let self.cmd_view = exe.cmd
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
|
||||||
|
" {{{1 Skim
|
||||||
|
function! s:skim.init() dict " {{{2
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_skim_options', '')
|
||||||
|
|
||||||
|
if !executable('/Applications/Skim.app/Contents/SharedSupport/displayline')
|
||||||
|
echoerr 'vimtex viewer Skim is not executable!'
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
function! s:skim.view(file) dict " {{{2
|
||||||
|
let outfile = a:file !=# '' ? a:file : b:vimtex.out()
|
||||||
|
if s:output_not_readable(outfile) | return | endif
|
||||||
|
|
||||||
|
let exe = {}
|
||||||
|
let exe.cmd = '/Applications/Skim.app/Contents/SharedSupport/displayline'
|
||||||
|
let exe.cmd .= ' ' . g:vimtex_view_skim_options
|
||||||
|
let exe.cmd .= ' ' . line('.')
|
||||||
|
let exe.cmd .= ' ' . vimtex#util#fnameescape(outfile)
|
||||||
|
let exe.cmd .= ' ' . vimtex#util#fnameescape(expand('%:p'))
|
||||||
|
call vimtex#util#execute(exe)
|
||||||
|
let self.cmd_view = exe.cmd
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
|
|
||||||
" {{{1 SumatraPDF
|
" {{{1 SumatraPDF
|
||||||
function! s:sumatrapdf.init() dict " {{{2
|
function! s:sumatrapdf.init() dict " {{{2
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_sumatrapdf_options', '')
|
||||||
|
|
||||||
if !executable('SumatraPDF')
|
if !executable('SumatraPDF')
|
||||||
echoerr 'vimtex viewer SumatraPDF is not executable!'
|
echoerr 'vimtex viewer SumatraPDF is not executable!'
|
||||||
endif
|
endif
|
||||||
@ -318,6 +396,10 @@ function! s:sumatrapdf.view(file) dict " {{{2
|
|||||||
let exe.cmd .= ' ' . vimtex#util#fnameescape(outfile)
|
let exe.cmd .= ' ' . vimtex#util#fnameescape(outfile)
|
||||||
call vimtex#util#execute(exe)
|
call vimtex#util#execute(exe)
|
||||||
let self.cmd_view = exe.cmd
|
let self.cmd_view = exe.cmd
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
@ -327,6 +409,15 @@ function! s:zathura.init() dict " {{{2
|
|||||||
" Only initialize once
|
" Only initialize once
|
||||||
if has_key(self, 'xwin_id') | return | endif
|
if has_key(self, 'xwin_id') | return | endif
|
||||||
|
|
||||||
|
"
|
||||||
|
" Default Zathura settings
|
||||||
|
"
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_zathura_options', '')
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_zathura_hook_callback',
|
||||||
|
\ 's:focus_vim')
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_zathura_hook_view',
|
||||||
|
\ 's:focus_viewer')
|
||||||
|
|
||||||
if !executable('zathura')
|
if !executable('zathura')
|
||||||
echoerr 'vimtex viewer Zathura is not executable!'
|
echoerr 'vimtex viewer Zathura is not executable!'
|
||||||
endif
|
endif
|
||||||
@ -339,7 +430,6 @@ function! s:zathura.init() dict " {{{2
|
|||||||
let self.xwin_id = 0
|
let self.xwin_id = 0
|
||||||
let self.xwin_get_id = function('s:xwin_get_id')
|
let self.xwin_get_id = function('s:xwin_get_id')
|
||||||
let self.xwin_exists = function('s:xwin_exists')
|
let self.xwin_exists = function('s:xwin_exists')
|
||||||
let self.focus_vim = function('s:focus_vim')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
@ -352,6 +442,10 @@ function! s:zathura.view(file) dict " {{{2
|
|||||||
else
|
else
|
||||||
call self.forward_search(outfile)
|
call self.forward_search(outfile)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
@ -386,7 +480,9 @@ function! s:zathura.latexmk_callback() dict " {{{2
|
|||||||
if !self.xwin_exists()
|
if !self.xwin_exists()
|
||||||
if self.xwin_get_id()
|
if self.xwin_get_id()
|
||||||
call self.forward_search(b:vimtex.out())
|
call self.forward_search(b:vimtex.out())
|
||||||
call self.focus_vim()
|
if has_key(self, 'hook_callback')
|
||||||
|
call self.hook_callback()
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
@ -460,17 +556,21 @@ function! s:xwin_send_keys(keys) dict " {{{1
|
|||||||
if a:keys !=# ''
|
if a:keys !=# ''
|
||||||
let cmd = 'xdotool key --window ' . self.xwin_id
|
let cmd = 'xdotool key --window ' . self.xwin_id
|
||||||
let cmd .= ' ' . a:keys
|
let cmd .= ' ' . a:keys
|
||||||
call system(cmd)
|
silent call system(cmd)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
|
"
|
||||||
|
" Hook functions (used as default hooks in some cases)
|
||||||
|
"
|
||||||
function! s:focus_viewer() dict " {{{1
|
function! s:focus_viewer() dict " {{{1
|
||||||
if !executable('xdotool') | return | endif
|
if !executable('xdotool') | return | endif
|
||||||
|
|
||||||
if self.xwin_exists()
|
if self.xwin_id > 0
|
||||||
silent execute '!xdotool windowfocus ' . self.xwin_id
|
silent call system('xdotool windowfocus ' . self.xwin_id . ' --sync')
|
||||||
redraw!
|
silent call system('xdotool windowraise ' . self.xwin_id)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -478,8 +578,8 @@ endfunction
|
|||||||
function! s:focus_vim() dict " {{{1
|
function! s:focus_vim() dict " {{{1
|
||||||
if !executable('xdotool') | return | endif
|
if !executable('xdotool') | return | endif
|
||||||
|
|
||||||
silent execute '!xdotool windowfocus ' . v:windowid
|
silent call system('xdotool windowfocus ' . v:windowid . ' --sync')
|
||||||
redraw!
|
silent call system('xdotool windowraise ' . v:windowid)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
@ -480,6 +480,8 @@ Options~
|
|||||||
Note 1: This feature requires |clientserver|.
|
Note 1: This feature requires |clientserver|.
|
||||||
Note 2: Callbacks are only possible when continuous mode is active, see
|
Note 2: Callbacks are only possible when continuous mode is active, see
|
||||||
|g:vimtex_latexmk_continuous|.
|
|g:vimtex_latexmk_continuous|.
|
||||||
|
Note 3: The callback is run with the vim executable defined by
|
||||||
|
|g:vimtex_latexmk_progname|.
|
||||||
|
|
||||||
Default value: 1
|
Default value: 1
|
||||||
|
|
||||||
@ -507,6 +509,15 @@ Options~
|
|||||||
|
|
||||||
Default value: '-pdf'
|
Default value: '-pdf'
|
||||||
|
|
||||||
|
*g:vimtex_latexmk_progname*
|
||||||
|
Path to vim executable. This is used for the callback functionality, and it
|
||||||
|
must be set correctly in order for the callback function to work. The
|
||||||
|
default value should work correctly in most cases, but in some cases, e.g.
|
||||||
|
for MacVim, one might need to set it manually to get the callbacks to work
|
||||||
|
as expected.
|
||||||
|
|
||||||
|
Default value: |v:progpath| if it exists, else |v:progname|.
|
||||||
|
|
||||||
*g:vimtex_quickfix_autojump*
|
*g:vimtex_quickfix_autojump*
|
||||||
This option controls if vim should automatically jump to the first error
|
This option controls if vim should automatically jump to the first error
|
||||||
whenever the |quickfix| window is opened.
|
whenever the |quickfix| window is opened.
|
||||||
@ -659,6 +670,23 @@ Options~
|
|||||||
|
|
||||||
Default value: ''
|
Default value: ''
|
||||||
|
|
||||||
|
*g:vimtex_syntax_minted*
|
||||||
|
A list that contains dictionaries for each supported language. A language
|
||||||
|
dictionary should be something similar to the following: >
|
||||||
|
|
||||||
|
{
|
||||||
|
'lang' : NAME,
|
||||||
|
'syntax' : SYNTAX-FILE-NAME,
|
||||||
|
'ignored' : IGNORED-GROUPS
|
||||||
|
}
|
||||||
|
<
|
||||||
|
If the `syntax` entry is not present, then the `lang` entry is used as name of
|
||||||
|
the syntax file. The `ignored` entry is also optional, and is used to name
|
||||||
|
syntax groups to ignore in the minted region.
|
||||||
|
|
||||||
|
Default value:
|
||||||
|
Please see `VIMTEX/after/syntax/tex.vim` for the default value.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
Commands~
|
Commands~
|
||||||
*vimtex-commands*
|
*vimtex-commands*
|
||||||
@ -998,8 +1026,9 @@ highlighting. However, |vimtex| does add some minor improvements:
|
|||||||
|
|
||||||
- Support for `biblatex` and `natbib` package
|
- Support for `biblatex` and `natbib` package
|
||||||
- Support for `cleveref` package
|
- Support for `cleveref` package
|
||||||
- Support for `listings` package
|
- Improved highlighting of `listings` package
|
||||||
- Nested syntax highlighting for `dot2tex`
|
- Nested syntax highlighting for `dot2tex`
|
||||||
|
- Nested syntax highlighting for `minted` (see |g:vimtex_syntax_minted|)
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
NAVIGATION *vimtex-navigation*
|
NAVIGATION *vimtex-navigation*
|
||||||
|
57
test/test-syntax/test-syntax.tex
Normal file
57
test/test-syntax/test-syntax.tex
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
\documentclass{article}
|
||||||
|
\usepackage{minted}
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
testing
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
f(x) = 0
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
f(x) = 0
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
test
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
\begin{dot2tex}
|
||||||
|
graph graphname {
|
||||||
|
a -- b;
|
||||||
|
b -- c;
|
||||||
|
b -- d;
|
||||||
|
d -- a;
|
||||||
|
}
|
||||||
|
\end{dot2tex}
|
||||||
|
|
||||||
|
\begin{minted}{python}
|
||||||
|
def function(arg):
|
||||||
|
pass
|
||||||
|
\end{minted}
|
||||||
|
|
||||||
|
\begin{minted}{c}
|
||||||
|
int main() {
|
||||||
|
printf("hello, world");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
\end{minted}
|
||||||
|
|
||||||
|
\begin{minted}[mathescape,
|
||||||
|
linenos,
|
||||||
|
numbersep=5pt,
|
||||||
|
gobble=2,
|
||||||
|
frame=lines,
|
||||||
|
framesep=2mm]{csharp}
|
||||||
|
string title = "This is a Unicode π in the sky"
|
||||||
|
/*
|
||||||
|
Defined as $\pi=\lim_{n\to\infty}\frac{P_n}{d}$ where $P$ is the perimeter
|
||||||
|
of an $n$-sided regular polygon circumscribing a
|
||||||
|
circle of diameter $d$.
|
||||||
|
*/
|
||||||
|
const double pi = 3.1415926535
|
||||||
|
\end{minted}
|
||||||
|
|
||||||
|
\end{document}
|
Loading…
Reference in New Issue
Block a user