vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 8e4202847f5c10d400b5a66574db194999395c9c
parent 3ac8e1ae14bbdfaf4bc9dd9a76e84faef7625792
Author: Brennen Bearnes <code@p1k3.com>
Date:   Sat, 21 May 2022 17:56:14 -0600

follow_link: reuse existing tabs with tab drop (closes #238)

Replaces :e in `vimwiki#base#follow_link()` with :drop, making this the
default behavior for pressing <CR> on a link.  Checks for the existence
of :drop first, since this isn't available in some builds.

Adds a new :VimwikiTabDropLink and makes this a default for the keybindings
formerly occupied by :VimwikiTabnewLink; leaving :VimwikiTabnewLink
available for backwards compatibility and anyone who still wants the old
behavior.

Doesn't touch the split window reuse functionality, or the
:VimwikiGoBackLink behavior, although I can see an argument for adding
:drop to the latter.

I've wanted this for a while and happened to notice @davidlmontgomery's
patch from 2016 in #238.  Code has moved around a little since, but I
think this is correct.

Diffstat:
Mautoload/vimwiki/base.vim | 10+++++++++-
Mdoc/vimwiki.txt | 12++++++++++--
Mftplugin/vimwiki.vim | 8++++++--
3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim @@ -1670,8 +1670,17 @@ function! vimwiki#base#follow_link(split, ...) abort let cmd = ':badd ' elseif a:split ==# 'tab' let cmd = ':tabnew ' + elseif a:split ==# 'tabdrop' + " Use tab drop if we've already got the file open in an existing tab + let cmd = ':tab drop ' else + " Same as above - doing this by default reduces incidence of multiple + " tabs with the same file. We default to :e just in case :drop doesn't + " exist in the current build. let cmd = ':e ' + if exists(':drop') + let cmd = ':drop ' + endif endif " if we want to and can reuse a split window, jump to that window and open @@ -1684,7 +1693,6 @@ function! vimwiki#base#follow_link(split, ...) abort endif endif - if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' let processed_by_markdown_reflink = vimwiki#markdown_base#open_reflink(lnk) if processed_by_markdown_reflink diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt @@ -370,8 +370,10 @@ MAP MODE <C-S-CR>, <D-CR> n Follow wiki link (create target wiki page if needed), opening in a new tab. May not work in some terminals. Remapping could help. - Maps to |:VimwikiTabnewLink|. - Remap command: `<Plug>VimwikiTabnewLink` + Maps to |:VimwikiTabDropLink|. + Remap command: `<Plug>VimwikiTabDropLink` + See |:VimwikiTabnewLink| for old behavior which + always opens a new tab. *vimwiki_<Backspace>* <Backspace> n Go back to previously visited wiki page. @@ -810,6 +812,11 @@ Vimwiki file. *:VimwikiTabnewLink* Follow wiki link in a new tab (create target wiki page if needed). +*:VimwikiTabDropLink* + Follow wiki link with tab drop, reusing any existing tabs with the page. + Creates a new tab if the page isn't already open (create target wiki page + if needed). + *:VimwikiNextLink* Find next link on the current page. @@ -3985,6 +3992,7 @@ http://code.google.com/p/vimwiki/issues/list. They may be accessible from https://github.com/vimwiki-backup/vimwiki/issues. New:~ + * Feature: #238: Reuse existing tabs with tab drop * Issue #621: Feature request: Highlight code listings in HTML * Issue #290: Calendar plugin, do not sign if no wiki * Issue #281: Permit `\|` in tables diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim @@ -312,6 +312,8 @@ command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link( command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tab', 0, 1) +command! -buffer VimwikiTabDropLink call vimwiki#base#follow_link('tabdrop', 0, 1) + command! -buffer -nargs=? VimwikiGenerateLinks call vimwiki#base#generate_links(1, <f-args>) command! -buffer -nargs=0 VimwikiBacklinks call vimwiki#base#backlinks() @@ -418,6 +420,8 @@ vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisualCR \ :<C-U>VimwikiNormalizeLink 1<CR> nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink \ :VimwikiTabnewLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiTabDropLink + \ :VimwikiTabDropLink<CR> nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink \ :VimwikiGoBackLink<CR> nnoremap <silent><script><buffer> <Plug>VimwikiNextLink @@ -448,8 +452,8 @@ if str2nr(vimwiki#vars#get_global('key_mappings').links) call vimwiki#u#map_key('n', '+', '<Plug>VimwikiNormalizeLink') call vimwiki#u#map_key('v', '+', '<Plug>VimwikiNormalizeLinkVisual') call vimwiki#u#map_key('v', '<CR>', '<Plug>VimwikiNormalizeLinkVisualCR') - call vimwiki#u#map_key('n', '<D-CR>', '<Plug>VimwikiTabnewLink') - call vimwiki#u#map_key('n', '<C-S-CR>', '<Plug>VimwikiTabnewLink', 1) + call vimwiki#u#map_key('n', '<D-CR>', '<Plug>VimwikiTabDropLink') + call vimwiki#u#map_key('n', '<C-S-CR>', '<Plug>VimwikiTabDropLink', 1) call vimwiki#u#map_key('n', '<BS>', '<Plug>VimwikiGoBackLink') call vimwiki#u#map_key('n', '<TAB>', '<Plug>VimwikiNextLink') call vimwiki#u#map_key('n', '<S-TAB>', '<Plug>VimwikiPrevLink')