diff --git a/autoload/vimtex/options.vim b/autoload/vimtex/options.vim index cf03c8eee9..5502286eaf 100644 --- a/autoload/vimtex/options.vim +++ b/autoload/vimtex/options.vim @@ -378,6 +378,7 @@ function! vimtex#options#init() abort " {{{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) + call s:init_option('vimtex_view_reverse_search_edit_cmd', 'edit') " OS dependent defaults let l:os = vimtex#util#get_os() diff --git a/autoload/vimtex/view.vim b/autoload/vimtex/view.vim index 34966884ce..4f5acc23c0 100644 --- a/autoload/vimtex/view.vim +++ b/autoload/vimtex/view.vim @@ -72,10 +72,10 @@ function! vimtex#view#reverse_goto(line, filename) abort " {{{1 let l:file = resolve(a:filename) " Open file if necessary - if !bufexists(l:file) + if !bufloaded(l:file) if filereadable(l:file) try - execute 'edit' l:file + execute g:vimtex_view_reverse_search_edit_cmd l:file catch call vimtex#log#warning("Reverse goto failed") return @@ -87,11 +87,18 @@ function! vimtex#view#reverse_goto(line, filename) abort " {{{1 endif " Go to correct buffer and line + + " Get buffer number let l:bufnr = bufnr(l:file) - let l:winnr = bufwinnr(l:file) - execute l:winnr >= 0 - \ ? l:winnr . 'wincmd w' - \ : 'buffer ' . l:bufnr + " Get window and tab numbers + try + let [l:winid] = win_findbuf(l:bufnr) + let [l:tabnr, l:winnr] = win_id2tabwin(l:winid) + execute l:tabnr . 'tabnext' + execute l:winnr . 'wincmd w' + catch + execute g:vimtex_view_reverse_search_edit_cmd l:file + endtry execute 'normal!' a:line . 'G' redraw diff --git a/autoload/vimtex/view/zathura.vim b/autoload/vimtex/view/zathura.vim index 95235783b5..78fc8d85c2 100644 --- a/autoload/vimtex/view/zathura.vim +++ b/autoload/vimtex/view/zathura.vim @@ -80,7 +80,7 @@ function! s:zathura.latexmk_append_argument() dict abort " {{{1 if self.has_synctex let zathura .= ' -x \"' . g:vimtex_compiler_progname \ . ' --servername ' . v:servername - \ . ' --remote +\%{line} \%{input}\" \%S' + \ . ' --remote-expr \"\\\"\"vimtex#view#reverse_goto(\%{line}, ''"''"''\%{input}''"''"'')\"\\\"\"\" \%S' endif let cmd = vimtex#compiler#latexmk#wrap_option('new_viewer_always', '0') diff --git a/doc/vimtex.txt b/doc/vimtex.txt index 3519d87aec..bfea40dc4f 100644 --- a/doc/vimtex.txt +++ b/doc/vimtex.txt @@ -2743,6 +2743,18 @@ OPTIONS *vimtex-options* Default value: 1 +*g:vimtex_view_reverse_search_edit_cmd* + When working in a multi-file project, initiating backward search + |vimtex-synctex-backward-search| may require opening a file that is not + currently open in a window. This option controls the command that is used to + open files as a result of a backward search. + + Examples: `edit` (open buffer in current window); `tabedit` (open buffer in + new tab page, similar to the Vim command-line option `--remote-tab`); + `split` (split current window to open buffer, similar to `--remote`) + + Default value: `edit` + *g:vimtex_view_method* Set the viewer method.