if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 " vimtex - LaTeX plugin for Vim " " Maintainer: Karl Yngve LervÄg " Email: karl.yngve@gmail.com " function! vimtex#init() abort " {{{1 call vimtex#init_options() call s:init_highlights() call s:init_state() call s:init_buffer() call s:init_default_mappings() if exists('#User#VimtexEventInitPost') doautocmd User VimtexEventInitPost endif augroup vimtex_main autocmd! autocmd VimLeave * call s:quit() augroup END endfunction " }}}1 function! vimtex#init_options() abort " {{{1 call s:init_option('vimtex_compiler_enabled', 1) call s:init_option('vimtex_compiler_method', 'latexmk') call s:init_option('vimtex_compiler_progname', \ has('nvim') && executable('nvr') \ ? 'nvr' \ : get(v:, 'progpath', get(v:, 'progname', ''))) call s:init_option('vimtex_compiler_callback_hooks', []) call s:init_option('vimtex_compiler_latexmk_engines', {}) call s:init_option('vimtex_compiler_latexrun_engines', {}) call s:init_option('vimtex_complete_enabled', 1) call s:init_option('vimtex_complete_close_braces', 0) call s:init_option('vimtex_complete_ignore_case', &ignorecase) call s:init_option('vimtex_complete_smart_case', &smartcase) call s:init_option('vimtex_complete_bib', { \ 'simple': 0, \ 'menu_fmt': '[@type] @author_short (@year), "@title"', \ 'abbr_fmt': '', \ 'custom_patterns': [], \}) call s:init_option('vimtex_complete_ref', { \ 'custom_patterns': [], \}) call s:init_option('vimtex_delim_timeout', 300) call s:init_option('vimtex_delim_insert_timeout', 60) call s:init_option('vimtex_delim_stopline', 500) call s:init_option('vimtex_include_search_enabled', 1) call s:init_option('vimtex_doc_enabled', 1) call s:init_option('vimtex_doc_handlers', []) call s:init_option('vimtex_echo_verbose_input', 1) call s:init_option('vimtex_env_change_autofill', 0) if &diff let g:vimtex_fold_enabled = 0 else call s:init_option('vimtex_fold_enabled', 0) endif call s:init_option('vimtex_fold_manual', 0) call s:init_option('vimtex_fold_levelmarker', '*') call s:init_option('vimtex_fold_types', {}) call s:init_option('vimtex_fold_types_defaults', { \ 'preamble' : {}, \ 'comments' : { 'enabled' : 0 }, \ 'envs' : { \ 'blacklist' : [], \ 'whitelist' : [], \ }, \ 'env_options' : {}, \ 'markers' : {}, \ 'sections' : { \ 'parse_levels' : 0, \ 'sections' : [ \ 'part', \ 'chapter', \ 'section', \ 'subsection', \ 'subsubsection', \ ], \ 'parts' : [ \ 'appendix', \ 'frontmatter', \ 'mainmatter', \ 'backmatter', \ ], \ }, \ 'cmd_single' : { \ 'cmds' : [ \ 'hypersetup', \ 'tikzset', \ 'pgfplotstableread', \ 'lstset', \ ], \ }, \ 'cmd_single_opt' : { \ 'cmds' : [ \ 'usepackage', \ 'includepdf', \ ], \ }, \ 'cmd_multi' : { \ 'cmds' : [ \ '%(re)?new%(command|environment)', \ 'providecommand', \ 'presetkeys', \ 'Declare%(Multi|Auto)?CiteCommand', \ 'Declare%(Index)?%(Field|List|Name)%(Format|Alias)', \ ], \ }, \ 'cmd_addplot' : { \ 'cmds' : [ \ 'addplot[+3]?', \ ], \ }, \}) call s:init_option('vimtex_format_enabled', 0) call s:init_option('vimtex_imaps_enabled', 1) call s:init_option('vimtex_imaps_disabled', []) call s:init_option('vimtex_imaps_list', [ \ { 'lhs' : '0', 'rhs' : '\emptyset' }, \ { 'lhs' : '6', 'rhs' : '\partial' }, \ { 'lhs' : '8', 'rhs' : '\infty' }, \ { 'lhs' : '=', 'rhs' : '\equiv' }, \ { 'lhs' : '\', 'rhs' : '\setminus' }, \ { 'lhs' : '.', 'rhs' : '\cdot' }, \ { 'lhs' : '*', 'rhs' : '\times' }, \ { 'lhs' : '<', 'rhs' : '\langle' }, \ { 'lhs' : '>', 'rhs' : '\rangle' }, \ { 'lhs' : 'H', 'rhs' : '\hbar' }, \ { 'lhs' : '+', 'rhs' : '\dagger' }, \ { 'lhs' : '[', 'rhs' : '\subseteq' }, \ { 'lhs' : ']', 'rhs' : '\supseteq' }, \ { 'lhs' : '(', 'rhs' : '\subset' }, \ { 'lhs' : ')', 'rhs' : '\supset' }, \ { 'lhs' : 'A', 'rhs' : '\forall' }, \ { 'lhs' : 'E', 'rhs' : '\exists' }, \ { 'lhs' : 'jj', 'rhs' : '\downarrow' }, \ { 'lhs' : 'jJ', 'rhs' : '\Downarrow' }, \ { 'lhs' : 'jk', 'rhs' : '\uparrow' }, \ { 'lhs' : 'jK', 'rhs' : '\Uparrow' }, \ { 'lhs' : 'jh', 'rhs' : '\leftarrow' }, \ { 'lhs' : 'jH', 'rhs' : '\Leftarrow' }, \ { 'lhs' : 'jl', 'rhs' : '\rightarrow' }, \ { 'lhs' : 'jL', 'rhs' : '\Rightarrow' }, \ { 'lhs' : 'a', 'rhs' : '\alpha' }, \ { 'lhs' : 'b', 'rhs' : '\beta' }, \ { 'lhs' : 'c', 'rhs' : '\chi' }, \ { 'lhs' : 'd', 'rhs' : '\delta' }, \ { 'lhs' : 'e', 'rhs' : '\epsilon' }, \ { 'lhs' : 'f', 'rhs' : '\phi' }, \ { 'lhs' : 'g', 'rhs' : '\gamma' }, \ { 'lhs' : 'h', 'rhs' : '\eta' }, \ { 'lhs' : 'i', 'rhs' : '\iota' }, \ { 'lhs' : 'k', 'rhs' : '\kappa' }, \ { 'lhs' : 'l', 'rhs' : '\lambda' }, \ { 'lhs' : 'm', 'rhs' : '\mu' }, \ { 'lhs' : 'n', 'rhs' : '\nu' }, \ { 'lhs' : 'p', 'rhs' : '\pi' }, \ { 'lhs' : 'q', 'rhs' : '\theta' }, \ { 'lhs' : 'r', 'rhs' : '\rho' }, \ { 'lhs' : 's', 'rhs' : '\sigma' }, \ { 'lhs' : 't', 'rhs' : '\tau' }, \ { 'lhs' : 'y', 'rhs' : '\psi' }, \ { 'lhs' : 'u', 'rhs' : '\upsilon' }, \ { 'lhs' : 'w', 'rhs' : '\omega' }, \ { 'lhs' : 'z', 'rhs' : '\zeta' }, \ { 'lhs' : 'x', 'rhs' : '\xi' }, \ { 'lhs' : 'G', 'rhs' : '\Gamma' }, \ { 'lhs' : 'D', 'rhs' : '\Delta' }, \ { 'lhs' : 'F', 'rhs' : '\Phi' }, \ { 'lhs' : 'G', 'rhs' : '\Gamma' }, \ { 'lhs' : 'L', 'rhs' : '\Lambda' }, \ { 'lhs' : 'P', 'rhs' : '\Pi' }, \ { 'lhs' : 'Q', 'rhs' : '\Theta' }, \ { 'lhs' : 'S', 'rhs' : '\Sigma' }, \ { 'lhs' : 'U', 'rhs' : '\Upsilon' }, \ { 'lhs' : 'W', 'rhs' : '\Omega' }, \ { 'lhs' : 'X', 'rhs' : '\Xi' }, \ { 'lhs' : 'Y', 'rhs' : '\Psi' }, \ { 'lhs' : 've', 'rhs' : '\varepsilon' }, \ { 'lhs' : 'vf', 'rhs' : '\varphi' }, \ { 'lhs' : 'vk', 'rhs' : '\varkappa' }, \ { 'lhs' : 'vq', 'rhs' : '\vartheta' }, \ { 'lhs' : 'vr', 'rhs' : '\varrho' }, \ { 'lhs' : '/', 'rhs' : 'vimtex#imaps#style_math("slashed")', 'expr' : 1, 'leader' : '#'}, \ { 'lhs' : 'b', 'rhs' : 'vimtex#imaps#style_math("mathbf")', 'expr' : 1, 'leader' : '#'}, \ { 'lhs' : 'f', 'rhs' : 'vimtex#imaps#style_math("mathfrak")', 'expr' : 1, 'leader' : '#'}, \ { 'lhs' : 'c', 'rhs' : 'vimtex#imaps#style_math("mathcal")', 'expr' : 1, 'leader' : '#'}, \ { 'lhs' : '-', 'rhs' : 'vimtex#imaps#style_math("overline")', 'expr' : 1, 'leader' : '#'}, \ { 'lhs' : 'B', 'rhs' : 'vimtex#imaps#style_math("mathbb")', 'expr' : 1, 'leader' : '#'}, \]) call s:init_option('vimtex_mappings_enabled', 1) call s:init_option('vimtex_mappings_disable', {}) call s:init_option('vimtex_matchparen_enabled', 1) call s:init_option('vimtex_motion_enabled', 1) call s:init_option('vimtex_labels_enabled', 1) call s:init_option('vimtex_labels_refresh_always', 1) call s:init_option('vimtex_parser_bib_backend', 'bibtex') call s:init_option('vimtex_quickfix_enabled', 1) call s:init_option('vimtex_quickfix_method', 'latexlog') call s:init_option('vimtex_quickfix_autojump', '0') call s:init_option('vimtex_quickfix_ignore_filters', []) call s:init_option('vimtex_quickfix_mode', '2') call s:init_option('vimtex_quickfix_open_on_warning', '1') call s:init_option('vimtex_quickfix_blgparser', {}) call s:init_option('vimtex_quickfix_autoclose_after_keystrokes', '0') call s:init_option('vimtex_syntax_enabled', 1) call s:init_option('vimtex_syntax_nested', { \ 'aliases' : { \ 'C' : 'c', \ 'csharp' : 'cs', \ }, \ 'ignored' : { \ 'cs' : [ \ 'csBraces', \ ], \ 'python' : [ \ 'pythonEscape', \ 'pythonBEscape', \ 'pythonBytesEscape', \ ], \ 'java' : [ \ 'javaError', \ ], \ 'haskell' : [ \ 'hsVarSym', \ ], \ } \}) call s:init_option('vimtex_texcount_custom_arg', '') call s:init_option('vimtex_text_obj_enabled', 1) call s:init_option('vimtex_text_obj_variant', 'auto') call s:init_option('vimtex_text_obj_linewise_operators', ['d', 'y']) call s:init_option('vimtex_toc_enabled', 1) call s:init_option('vimtex_toc_custom_matchers', []) call s:init_option('vimtex_toc_show_preamble', 1) call s:init_option('vimtex_toc_todo_keywords', ['TODO', 'FIXME']) call s:init_option('vimtex_toc_config', { \ 'name' : 'Table of contents (vimtex)', \ 'mode' : 1, \ 'fold_enable' : 0, \ 'fold_level_start' : -1, \ 'hide_line_numbers' : 1, \ 'hotkeys_enabled' : 0, \ 'hotkeys' : 'abcdeilmnopuvxyz', \ 'hotkeys_leader' : ';', \ 'layer_status' : { \ 'content': 1, \ 'label': 1, \ 'todo': 1, \ 'include': 1, \ }, \ 'layer_keys' : { \ 'content': 'C', \ 'label': 'L', \ 'todo': 'T', \ 'include': 'I', \ }, \ 'resize' : 0, \ 'refresh_always' : 1, \ 'show_help' : 1, \ 'show_numbers' : 1, \ 'split_pos' : 'vert leftabove', \ 'split_width' : 30, \ 'tocdepth' : 3, \ 'todo_sorted' : 1, \}) call s:init_option('vimtex_view_enabled', 1) call s:init_option('vimtex_view_automatic', 1) call s:init_option('vimtex_view_method', 'general') call s:init_option('vimtex_view_use_temp_files', 0) call s:init_option('vimtex_view_forward_search_on_start', 1) " OS dependent defaults let l:os = vimtex#util#get_os() if l:os ==# 'win' if executable('SumatraPDF') call s:init_option('vimtex_view_general_viewer', 'SumatraPDF') call s:init_option('vimtex_view_general_options', \ '-reuse-instance -forward-search @tex @line @pdf') call s:init_option('vimtex_view_general_options_latexmk', \ 'reuse-instance') elseif executable('mupdf') call s:init_option('vimtex_view_general_viewer', 'mupdf') else call s:init_option('vimtex_view_general_viewer', '') endif else call s:init_option('vimtex_view_general_viewer', get({ \ 'linux' : 'xdg-open', \ 'mac' : 'open', \ 'win' : 'start', \}, l:os, '')) call s:init_option('vimtex_view_general_options', '@pdf') call s:init_option('vimtex_view_general_options_latexmk', '') endif call s:init_option('vimtex_view_mupdf_options', '') call s:init_option('vimtex_view_mupdf_send_keys', '') call s:init_option('vimtex_view_skim_activate', 0) call s:init_option('vimtex_view_skim_reading_bar', 1) call s:init_option('vimtex_view_zathura_options', '') endfunction " }}}1 function! vimtex#check_plugin_clash() abort " {{{1 let l:scriptnames = vimtex#util#command('scriptnames') let l:latexbox = !empty(filter(copy(l:scriptnames), "v:val =~# 'latex-box'")) if l:latexbox let l:polyglot = !empty(filter(copy(l:scriptnames), "v:val =~# 'polyglot'")) call vimtex#log#warning([ \ 'Conflicting plugin detected: LaTeX-Box', \ 'vimtex does not work as expected when LaTeX-Box is installed!', \ 'Please disable or remove it to use vimtex!', \]) if l:polyglot call vimtex#log#warning([ \ 'LaTeX-Box is included with vim-polyglot and may be disabled with:', \ 'let g:polyglot_disabled = [''latex'']', \]) endif endif endfunction " }}}1 function! s:init_option(option, default) abort " {{{1 let l:option = 'g:' . a:option if !exists(l:option) let {l:option} = a:default elseif type(a:default) == type({}) call vimtex#util#extend_recursive({l:option}, a:default, 'keep') endif endfunction " }}}1 function! s:init_highlights() abort " {{{1 for [l:name, l:target] in [ \ ['VimtexImapsArrow', 'Comment'], \ ['VimtexImapsLhs', 'ModeMsg'], \ ['VimtexImapsRhs', 'ModeMsg'], \ ['VimtexImapsWrapper', 'Type'], \ ['VimtexInfo', 'Question'], \ ['VimtexInfoTitle', 'PreProc'], \ ['VimtexInfoKey', 'PreProc'], \ ['VimtexInfoValue', 'Statement'], \ ['VimtexInfoOther', 'Normal'], \ ['VimtexMsg', 'ModeMsg'], \ ['VimtexSuccess', 'Statement'], \ ['VimtexTocHelp', 'helpVim'], \ ['VimtexTocHelpKey', 'ModeMsg'], \ ['VimtexTocHelpLayerOn', 'Statement'], \ ['VimtexTocHelpLayerOff', 'Comment'], \ ['VimtexTocTodo', 'Todo'], \ ['VimtexTocNum', 'Number'], \ ['VimtexTocSec0', 'Title'], \ ['VimtexTocSec1', 'Normal'], \ ['VimtexTocSec2', 'helpVim'], \ ['VimtexTocSec3', 'NonText'], \ ['VimtexTocSec4', 'Comment'], \ ['VimtexTocHotkey', 'Comment'], \ ['VimtexTocLabelsSecs', 'Statement'], \ ['VimtexTocLabelsEq', 'PreProc'], \ ['VimtexTocLabelsFig', 'Identifier'], \ ['VimtexTocLabelsTab', 'String'], \ ['VimtexTocIncl', 'Number'], \ ['VimtexTocInclPath', 'Normal'], \ ['VimtexWarning', 'WarningMsg'], \ ['VimtexError', 'ErrorMsg'], \] if !hlexists(l:name) silent execute 'highlight default link' l:name l:target endif endfor endfunction " }}}1 function! s:init_state() abort " {{{1 call vimtex#state#init() call vimtex#state#init_local() endfunction " }}}1 function! s:init_buffer() abort " {{{1 " Set Vim options for l:suf in [ \ '.sty', \ '.cls', \ '.log', \ '.aux', \ '.bbl', \ '.out', \ '.blg', \ '.brf', \ '.cb', \ '.dvi', \ '.fdb_latexmk', \ '.fls', \ '.idx', \ '.ilg', \ '.ind', \ '.inx', \ '.pdf', \ '.synctex.gz', \ '.toc', \ ] execute 'set suffixes+=' . l:suf endfor setlocal suffixesadd=.sty,.tex,.cls setlocal comments=sO:%\ -,mO:%\ \ ,eO:%%,:% setlocal commentstring=%%s setlocal iskeyword+=: setlocal includeexpr=vimtex#include#expr() let &l:include = g:vimtex#re#tex_include let &l:define = '\\\([egx]\|char\|mathchar\|count\|dimen\|muskip\|skip' let &l:define .= '\|toks\)\=def\|\\font\|\\\(future\)\=let' let &l:define .= '\|\\new\(count\|dimen\|skip' let &l:define .= '\|muskip\|box\|toks\|read\|write\|fam\|insert\)' let &l:define .= '\|\\\(re\)\=new\(boolean\|command\|counter\|environment' let &l:define .= '\|font\|if\|length\|savebox' let &l:define .= '\|theorem\(style\)\=\)\s*\*\=\s*{\=' let &l:define .= '\|DeclareMathOperator\s*{\=\s*' " Define autocommands augroup vimtex_buffers autocmd! * autocmd BufFilePre call s:filename_changed_pre() autocmd BufFilePost call s:filename_changed_post() autocmd BufUnload call s:buffer_deleted('unload') autocmd BufWipeout call s:buffer_deleted('wipe') augroup END " Initialize buffer settings for sub modules for l:mod in s:modules if index(get(b:vimtex, 'disabled_modules', []), l:mod) >= 0 | continue | endif try call vimtex#{l:mod}#init_buffer() catch /E117.*#init_/ catch /E127.*vimtex#profile#/ endtry endfor endfunction " }}}1 function! s:init_default_mappings() abort " {{{1 if !g:vimtex_mappings_enabled | return | endif function! s:map(mode, lhs, rhs, ...) abort if !hasmapto(a:rhs, a:mode) \ && index(get(g:vimtex_mappings_disable, a:mode, []), a:lhs) < 0 \ && (empty(maparg(a:lhs, a:mode)) || a:0 > 0) silent execute a:mode . 'map ' a:lhs a:rhs endif endfunction call s:map('n', 'li', '(vimtex-info)') call s:map('n', 'lI', '(vimtex-info-full)') call s:map('n', 'lx', '(vimtex-reload)') call s:map('n', 'lX', '(vimtex-reload-state)') call s:map('n', 'ls', '(vimtex-toggle-main)') call s:map('n', 'lq', '(vimtex-log)') call s:map('n', 'ds$', '(vimtex-env-delete-math)') call s:map('n', 'cs$', '(vimtex-env-change-math)') call s:map('n', 'dse', '(vimtex-env-delete)') call s:map('n', 'cse', '(vimtex-env-change)') call s:map('n', 'tse', '(vimtex-env-toggle-star)') call s:map('n', 'dsc', '(vimtex-cmd-delete)') call s:map('n', 'csc', '(vimtex-cmd-change)') call s:map('n', 'tsc', '(vimtex-cmd-toggle-star)') call s:map('n', 'tsf', '(vimtex-cmd-toggle-frac)') call s:map('x', 'tsf', '(vimtex-cmd-toggle-frac)') call s:map('i', '', '(vimtex-cmd-create)') call s:map('n', '', '(vimtex-cmd-create)') call s:map('x', '', '(vimtex-cmd-create)') call s:map('n', 'dsd', '(vimtex-delim-delete)') call s:map('n', 'csd', '(vimtex-delim-change-math)') call s:map('n', 'tsd', '(vimtex-delim-toggle-modifier)') call s:map('x', 'tsd', '(vimtex-delim-toggle-modifier)') call s:map('n', 'tsD', '(vimtex-delim-toggle-modifier-reverse)') call s:map('x', 'tsD', '(vimtex-delim-toggle-modifier-reverse)') call s:map('i', ']]', '(vimtex-delim-close)') if g:vimtex_compiler_enabled call s:map('n', 'll', '(vimtex-compile)') call s:map('n', 'lo', '(vimtex-compile-output)') call s:map('n', 'lL', '(vimtex-compile-selected)') call s:map('x', 'lL', '(vimtex-compile-selected)') call s:map('n', 'lk', '(vimtex-stop)') call s:map('n', 'lK', '(vimtex-stop-all)') call s:map('n', 'le', '(vimtex-errors)') call s:map('n', 'lc', '(vimtex-clean)') call s:map('n', 'lC', '(vimtex-clean-full)') call s:map('n', 'lg', '(vimtex-status)') call s:map('n', 'lG', '(vimtex-status-all)') endif if g:vimtex_motion_enabled " These are forced in order to overwrite matchit mappings call s:map('n', '%', '(vimtex-%)', 1) call s:map('x', '%', '(vimtex-%)', 1) call s:map('o', '%', '(vimtex-%)', 1) call s:map('n', ']]', '(vimtex-]])') call s:map('n', '][', '(vimtex-][)') call s:map('n', '[]', '(vimtex-[])') call s:map('n', '[[', '(vimtex-[[)') call s:map('x', ']]', '(vimtex-]])') call s:map('x', '][', '(vimtex-][)') call s:map('x', '[]', '(vimtex-[])') call s:map('x', '[[', '(vimtex-[[)') call s:map('o', ']]', '(vimtex-]])') call s:map('o', '][', '(vimtex-][)') call s:map('o', '[]', '(vimtex-[])') call s:map('o', '[[', '(vimtex-[[)') call s:map('n', ']M', '(vimtex-]M)') call s:map('n', ']m', '(vimtex-]m)') call s:map('n', '[M', '(vimtex-[M)') call s:map('n', '[m', '(vimtex-[m)') call s:map('x', ']M', '(vimtex-]M)') call s:map('x', ']m', '(vimtex-]m)') call s:map('x', '[M', '(vimtex-[M)') call s:map('x', '[m', '(vimtex-[m)') call s:map('o', ']M', '(vimtex-]M)') call s:map('o', ']m', '(vimtex-]m)') call s:map('o', '[M', '(vimtex-[M)') call s:map('o', '[m', '(vimtex-[m)') call s:map('n', ']/', '(vimtex-]/)') call s:map('n', ']*', '(vimtex-]*)') call s:map('n', '[/', '(vimtex-[/)') call s:map('n', '[*', '(vimtex-[*)') call s:map('x', ']/', '(vimtex-]/)') call s:map('x', ']*', '(vimtex-]*)') call s:map('x', '[/', '(vimtex-[/)') call s:map('x', '[*', '(vimtex-[*)') call s:map('o', ']/', '(vimtex-]/)') call s:map('o', ']*', '(vimtex-]*)') call s:map('o', '[/', '(vimtex-[/)') call s:map('o', '[*', '(vimtex-[*)') endif if g:vimtex_text_obj_enabled call s:map('x', 'id', '(vimtex-id)') call s:map('x', 'ad', '(vimtex-ad)') call s:map('o', 'id', '(vimtex-id)') call s:map('o', 'ad', '(vimtex-ad)') call s:map('x', 'i$', '(vimtex-i$)') call s:map('x', 'a$', '(vimtex-a$)') call s:map('o', 'i$', '(vimtex-i$)') call s:map('o', 'a$', '(vimtex-a$)') call s:map('x', 'iP', '(vimtex-iP)') call s:map('x', 'aP', '(vimtex-aP)') call s:map('o', 'iP', '(vimtex-iP)') call s:map('o', 'aP', '(vimtex-aP)') call s:map('x', 'im', '(vimtex-im)') call s:map('x', 'am', '(vimtex-am)') call s:map('o', 'im', '(vimtex-im)') call s:map('o', 'am', '(vimtex-am)') if vimtex#text_obj#targets#enabled() call vimtex#text_obj#targets#init() " These are handled explicitly to avoid conflict with gitgutter call s:map('x', 'ic', '(vimtex-targets-i)c') call s:map('x', 'ac', '(vimtex-targets-a)c') call s:map('o', 'ic', '(vimtex-targets-i)c') call s:map('o', 'ac', '(vimtex-targets-a)c') else if g:vimtex_text_obj_variant ==# 'targets' call vimtex#log#warning( \ "Ignoring g:vimtex_text_obj_variant = 'targets'" \ . " because 'g:loaded_targets' does not exist or is 0.") endif let g:vimtex_text_obj_variant = 'vimtex' call s:map('x', 'ie', '(vimtex-ie)') call s:map('x', 'ae', '(vimtex-ae)') call s:map('o', 'ie', '(vimtex-ie)') call s:map('o', 'ae', '(vimtex-ae)') call s:map('x', 'ic', '(vimtex-ic)') call s:map('x', 'ac', '(vimtex-ac)') call s:map('o', 'ic', '(vimtex-ic)') call s:map('o', 'ac', '(vimtex-ac)') endif endif if g:vimtex_toc_enabled call s:map('n', 'lt', '(vimtex-toc-open)') call s:map('n', 'lT', '(vimtex-toc-toggle)') endif if has_key(b:vimtex, 'viewer') call s:map('n', 'lv', '(vimtex-view)') if has_key(b:vimtex.viewer, 'reverse_search') call s:map('n', 'lr', '(vimtex-reverse-search)') endif endif if g:vimtex_imaps_enabled call s:map('n', 'lm', '(vimtex-imaps-list)') endif if g:vimtex_doc_enabled call s:map('n', 'K', '(vimtex-doc-package)') endif endfunction " }}}1 function! s:filename_changed_pre() abort " {{{1 let s:filename_changed = expand('%:p') ==# b:vimtex.tex endfunction " }}}1 function! s:filename_changed_post() abort " {{{1 if s:filename_changed let l:base_old = b:vimtex.base 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') call vimtex#log#warning('Filename change detected') call vimtex#log#info('Old filename: ' . l:base_old) call vimtex#log#info('New filename: ' . b:vimtex.base) if has_key(b:vimtex, 'compiler') if b:vimtex.compiler.is_running() call vimtex#log#warning('Compilation stopped!') call vimtex#compiler#stop() endif let b:vimtex.compiler.target = b:vimtex.base let b:vimtex.compiler.target_path = b:vimtex.tex endif endif endfunction " }}}1 function! s:buffer_deleted(reason) abort " {{{1 " " We need a simple cache of buffer ids because a buffer unload might clear " buffer variables, so that a subsequent buffer wipe will not trigger a full " cleanup. By caching the buffer id, we should avoid this issue. " let s:buffer_cache = get(s:, 'buffer_cache', {}) let l:file = expand('') if !has_key(s:buffer_cache, l:file) let s:buffer_cache[l:file] = getbufvar(l:file, 'vimtex_id', -1) endif if a:reason ==# 'wipe' call vimtex#state#cleanup(s:buffer_cache[l:file]) call remove(s:buffer_cache, l:file) endif endfunction " }}}1 function! s:quit() abort " {{{1 for l:state in vimtex#state#list_all() call l:state.cleanup() endfor call vimtex#cache#write_all() endfunction " }}}1 " {{{1 Initialize module let s:modules = map( \ glob(fnamemodify(expand(''), ':r') . '/*.vim', 0, 1), \ 'fnamemodify(v:val, '':t:r'')') " }}}1 endif