commit 4106cb7bc739a45f35535766b02dfb450e3a0d9c
parent e84dcbfa2574bdce92cb6070929db36326882a69
Author: Rane Brown <rane.brown@gmail.com>
Date: Fri, 26 Apr 2019 21:17:35 -0600
New option g:vimwiki_key_mappings to enable/disable key mappings.
All key mappings have the option of being disabled but the <Plug>
definitions are still available for user customization. Key sequences
are no longer overwritten if a mapping already exists. Fixes #671,
fixes #425.
Diffstat:
5 files changed, 542 insertions(+), 424 deletions(-)
diff --git a/autoload/vimwiki/u.vim b/autoload/vimwiki/u.vim
@@ -70,3 +70,22 @@ else
endfunc
endif
+" a:mode single character indicating the mode as defined by :h maparg
+" a:key the key sequence to map
+" a:plug the plug command the key sequence should be mapped to
+" a:1 optional argument to override the uniqueness checks
+" this can be used to map different keys to the same <Plug> definition
+" This function maps a key sequence to a <Plug> command using the arguments
+" described above. If there is already a mapping to the <Plug> command or
+" the assigned keys are already mapped then nothing is done.
+function vimwiki#u#map_key(mode, key, plug, ...)
+ if a:0 > 0 && a:1 == 1
+ if maparg(a:key, a:mode) ==# ''
+ exe a:mode . 'map ' . a:key . ' ' . a:plug
+ endif
+ else
+ if !hasmapto(a:plug) && maparg(a:key, a:mode) ==# ''
+ exe a:mode . 'map ' . a:key . ' ' . a:plug
+ endif
+ endif
+endfunction
diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim
@@ -166,6 +166,12 @@ function! s:read_global_settings_from_user()
\ 'hl_headers': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'html_header_numbering': {'type': type(0), 'default': 0, 'min': 0, 'max': 6},
\ 'html_header_numbering_sym': {'type': type(''), 'default': ''},
+ \ 'key_mappings': {'type': type({}), 'default':
+ \ {
+ \ 'all_maps': 1, 'global': 1, 'headers': 1, 'text_objs': 1,
+ \ 'table_format': 1, 'table_mappings': 1, 'lists': 1, 'links': 1,
+ \ 'html': 1, 'mouse': 0,
+ \ }},
\ 'list_ignore_newline': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
\ 'text_ignore_newline': {'type': type(0), 'default': 1, 'min': 0, 'max': 1},
\ 'links_header': {'type': type(''), 'default': 'Generated Links', 'min_length': 1},
@@ -250,6 +256,64 @@ function! s:normalize_global_settings()
let g:vimwiki_global_vars.ext2syntax[ext] = 'media'
endif
endfor
+
+ " ensure key_mappings dictionary has all required keys
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'all_maps')
+ let g:vimwiki_global_vars.key_mappings.all_maps = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'global')
+ let g:vimwiki_global_vars.key_mappings.global = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'headers')
+ let g:vimwiki_global_vars.key_mappings.headers = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'text_objs')
+ let g:vimwiki_global_vars.key_mappings.text_objs = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'table_format')
+ let g:vimwiki_global_vars.key_mappings.table_format = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'table_mappings')
+ let g:vimwiki_global_vars.key_mappings.table_mappings = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'lists')
+ let g:vimwiki_global_vars.key_mappings.lists = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'links')
+ let g:vimwiki_global_vars.key_mappings.links = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'html')
+ let g:vimwiki_global_vars.key_mappings.html = 1
+ endif
+ if !has_key(g:vimwiki_global_vars.key_mappings, 'mouse')
+ let g:vimwiki_global_vars.key_mappings.mouse = 0
+ endif
+
+ " disable all key mappings if all_maps == 0
+ if !g:vimwiki_global_vars.key_mappings.all_maps
+ let g:vimwiki_global_vars.key_mappings.global = 0
+ let g:vimwiki_global_vars.key_mappings.headers = 0
+ let g:vimwiki_global_vars.key_mappings.text_objs = 0
+ let g:vimwiki_global_vars.key_mappings.table_format = 0
+ let g:vimwiki_global_vars.key_mappings.table_mappings = 0
+ let g:vimwiki_global_vars.table_mappings = 0 " kept for backwards compatibility
+ let g:vimwiki_global_vars.key_mappings.lists = 0
+ let g:vimwiki_global_vars.key_mappings.links = 0
+ let g:vimwiki_global_vars.key_mappings.html = 0
+ let g:vimwiki_global_vars.key_mappings.mouse = 0
+ let g:vimwiki_global_vars.use_mouse = 0 " kept for backwards compatibility
+ endif
+
+ " TODO remove these checks and the table_mappings and use_mouse variables
+ " backwards compatibility checks
+ " if the old option isn't its default value then overwrite the new option
+ if g:vimwiki_global_vars.table_mappings == 0
+ let g:vimwiki_global_vars.key_mappings.table_mappings = 0 && g:vimwiki_global_vars.key_mappings.table_mappings == 1
+ endif
+ if g:vimwiki_global_vars.use_mouse == 1 && g:vimwiki_global_vars.key_mappings.mouse == 0
+ let g:vimwiki_global_vars.key_mappings.mouse = 1
+ endif
+
endfunction
diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt
@@ -110,6 +110,10 @@ There are global and local mappings in Vimwiki.
------------------------------------------------------------------------------
3.1. Global mappings *vimwiki-global-mappings*
+NOTE: if a user mapping or mapping from another plugin uses the same key
+sequence as one of the following mappings then Vimwiki will not overwrite it.
+
+
[count]<Leader>ww or <Plug>VimwikiIndex
Open index file of the [count]'s wiki.
@@ -247,6 +251,9 @@ don't want that, use >
:nmap <Leader>tt <Plug>VimwikiToggleListItem
:vmap <Leader>tt <Plug>VimwikiToggleListItem
+NOTE: if a user mapping or mapping from another plugin uses the same key
+sequence as one of the following mappings then Vimwiki will not overwrite it.
+
NORMAL MODE *vimwiki-local-mappings*
*vimwiki_<Leader>wh*
@@ -317,12 +324,6 @@ NORMAL MODE *vimwiki-local-mappings*
To remap: >
:nmap <Leader>wp <Plug>VimwikiPrevLink
<
-gnt *vimwiki_gnt*
- Find next unfinished task in the current page.
- Maps to |:VimwikiNextTask|
- To remap: >
- :nmap <Leader>nt <Plug>VimwikiNextTask
-<
*vimwiki_<Leader>wd*
<Leader>wd Delete wiki page you are in.
Maps to |:VimwikiDeleteLink|.
@@ -393,6 +394,12 @@ gnt *vimwiki_gnt*
See |vimwiki-todo-lists|.
To remap: >
:map <Leader>tt <Plug>VimwikiToggleListItem
+
+gnt *vimwiki_gnt*
+ Find next unfinished task in the current page.
+ Maps to |:VimwikiNextTask|
+ To remap: >
+ :nmap <Leader>nt <Plug>VimwikiNextTask
<
*vimwiki_gl<Space>* *vimwiki_gL<Space>*
gl<Space> Remove checkbox from list item.
@@ -517,13 +524,19 @@ glx Toggle checkbox of a list item disabled/off.
gqq Format table. If you made some changes to a table
or without swapping insert/normal modes this command
gww will reformat it.
-
+ To remap: >
+ :nmap <Leader>gq <Plug>VimwikiTableAlignQ
+ :nmap <Leader>gw <Plug>VimwikiTableAlignW
+<
*vimwiki_gq1* *vimwiki_gw1*
gq1 Fast format table. The same as the previous, except
or that only a few lines above the current line are
gw1 tested. If the alignment of the current line differs,
then the whole table gets reformatted.
-
+ To remap: >
+ :nmap <Leader>q1 <Plug>VimwikiTableAlignQ1
+ :nmap <Leader>w1 <Plug>VimwikiTableAlignW1
+<
*vimwiki_<A-Left>*
<A-Left> Move current table column to the left.
See |:VimwikiTableMoveColumnLeft|
@@ -548,8 +561,11 @@ gw1 tested. If the alignment of the current line differs,
To remap: >
:nmap <Leader>j <Plug>VimwikiDiaryNextDay
<
+Mouse mappings *vimwiki_mouse*
+
+These mappings are disabled by default.
+See |g:vimwiki_key_mappings| to enable.
-Works only if |g:vimwiki_use_mouse| is set to 1.
<2-LeftMouse> Follow wiki link (create target wiki page if needed).
<S-2-LeftMouse> Split and follow wiki link (create target wiki page if
@@ -572,7 +588,6 @@ INSERT MODE *vimwiki-table-mappings*
*vimwiki_i_<Tab>_table*
<Tab> Go to the next table cell, create a new row if on the
last cell.
-See |g:vimwiki_table_mappings| to turn them off.
INSERT MODE *vimwiki-list-mappings*
*vimwiki_i_<CR>*
@@ -645,6 +660,29 @@ ic An inner column in a table.
al A list item plus its children.
il A single list item.
+These key mappings can be modified by replacing the default keys: >
+
+ omap ah <Plug>VimwikiTextObjHeader
+ vmap ah <Plug>VimwikiTextObjHeaderV
+ omap ih <Plug>VimwikiTextObjHeaderContent
+ vmap ih <Plug>VimwikiTextObjHeaderContentV
+ omap aH <Plug>VimwikiTextObjHeaderSub
+ vmap aH <Plug>VimwikiTextObjHeaderSubV
+ omap iH <Plug>VimwikiTextObjHeaderSubContent
+ vmap iH <Plug>VimwikiTextObjHeaderSubContentV
+ omap a\ <Plug>VimwikiTextObjTableCell
+ vmap a\ <Plug>VimwikiTextObjTableCellV
+ omap i\ <Plug>VimwikiTextObjTableCellInner
+ vmap i\ <Plug>VimwikiTextObjTableCellInnerV
+ omap ac <Plug>VimwikiTextObjColumn
+ vmap ac <Plug>VimwikiTextObjColumnV
+ omap ic <Plug>VimwikiTextObjColumnInner
+ vmap ic <Plug>VimwikiTextObjColumnInnerV
+ omap al <Plug>VimwikiTextObjListChildren
+ vmap al <Plug>VimwikiTextObjListChildrenV
+ omap il <Plug>VimwikiTextObjListSingle
+ vmap il <Plug>VimwikiTextObjListSingleV
+
==============================================================================
4. Commands *vimwiki-commands*
@@ -1535,9 +1573,13 @@ Note that the mapping <S-CR> is not available in all terminals.
Furthermore, <CR> and <S-CR> behave differently when the cursor is behind an
empty list item. See the table below.
-You can configure the behavior of <CR> and of <S-CR> like this: >
- inoremap <CR> <Esc>:VimwikiReturn 1 5<CR>
- inoremap <S-CR> <Esc>:VimwikiReturn 2 2<CR>
+To remap the default behavior: >
+ :imap <Leader>e <Plug>VimwikiReturn15
+ :imap <Leader>r <Plug>VimwikiReturn22
+
+To customize the behavior: >
+ inoremap <CR> <Esc>:VimwikiReturn 1 1<CR>
+ inoremap <S-CR> <Esc>:VimwikiReturn 3 5<CR>
The first argument of the command :VimwikiReturn is a number that specifies
when to insert a new bullet/number and when not, depending on whether the
@@ -2610,18 +2652,6 @@ You can set it to a more fancy symbol like this:
------------------------------------------------------------------------------
-*g:vimwiki_use_mouse*
-
-Use local mouse mappings from |vimwiki-local-mappings|.
-
-Value Description~
-0 Do not use mouse mappings.
-1 Use mouse mappings.
-
-Default: 0
-
-
-------------------------------------------------------------------------------
*g:vimwiki_folding*
Enable/disable Vimwiki's folding (outline) functionality. Folding in Vimwiki
@@ -2820,18 +2850,6 @@ cannot otherwise convert the link. A customized handler might look like this: >
<
------------------------------------------------------------------------------
-*g:vimwiki_table_mappings*
-
-Enable/disable table mappings for INSERT mode.
-
-Value Description~
-0 Disable table mappings.
-1 Enable table mappings.
-
-Default: 1
-
-
-------------------------------------------------------------------------------
*g:vimwiki_table_auto_fmt*
Enable/disable table auto formatting after leaving INSERT mode.
@@ -3231,6 +3249,77 @@ For example, with `links_space_char` set to `'_'` creating a link from the text
The default is 0.
+------------------------------------------------------------------------------
+*g:vimwiki_key_mappings*
+
+A dictionary that is used to enable/disable various key mapping groups. To
+disable a specific group set the value for the associated key to 0.
+For example: >
+
+ let g:vimwiki_key_mappings =
+ \ {
+ \ 'headers': 0,
+ \ 'text_objs': 0,
+ \ }
+
+To disable ALL Vimwiki key mappings use: >
+
+ let g:vimwiki_key_mappings = { 'all_maps': 0, }
+
+The valid key groups and their associated mappings are shown below.
+
+`all_maps`:
+ Used to disable all Vimwiki key mappings.
+`global`:
+ |vimwiki-global-mappings| that are defined when Vim starts.
+`headers`:
+ Mappings for header navigation and manipulation:
+ |vimwiki_=|, |vimwiki_-|, |vimwiki_[[|, |vimwiki_]]|, |vimwiki_[=|
+ |vimwiki_]=|, |vimwiki_]u| , |vimwiki_[u|
+`text_objs`:
+ |vimwiki-text-objects| mappings.
+`table_format`:
+ Mappings used for table formatting.
+ |vimwiki_gqq|, |vimwiki_gww|, |vimwiki_gq1|, |vimwiki_gw1|
+ |vimwiki_<A-Left>|, |vimwiki_<A-Right>|
+`table_mappings`:
+ Table mappings for insert mode.
+ |vimwiki_<Tab>|, |vimwiki_<S-Tab>|
+`lists`:
+ Mappings for list manipulation.
+ |vimwiki_<C-Space>|, |vimwiki_gl<Space>|, |vimwiki_gL<Space>| |vimwiki_gln|, |vimwiki_glp|
+ |vimwiki_gll|, |vimwiki_gLl|, |vimwiki_glh|, |vimwiki_gLh|, |vimwiki_glr|, |vimwiki_gLr|
+ |vimwiki_glsar|, |vimwiki_gLstar|, |vimwiki_gl#|, |vimwiki_gL#|, |vimwiki_gl-|, |vimwiki_gL-|
+ |vimwiki_gl1|, |vimwiki_gL1|, |vimwiki_gla|, |vimwiki_gLa|, |vimwiki_glA|, |vimwiki_gLA|
+ |vimwiki_gli|, |vimwiki_gLi|, |vimwiki_glI|, |vimwiki_gLI|, |vimwiki_glx|
+`links`:
+ Mappings for link creation and navigation.
+ |vimwiki_<Leader>w<Leader>i|, |vimwiki_<CR>|, |vimwiki_<S-CR>|, |vimwiki_<C-CR>|
+ |vimwiki_<C-S-CR>|, |vimwiki_<D-CR>|, |vimwiki_<Backspace>|, |vimwiki_<Tab>|
+ |vimwiki_<S-Tab>|, |vimwiki_<Leader>wd|, |vimwiki_<Leader>wr|, |vimwiki_<C-Down>|
+ |vimwiki_<C-Up>|, |vimwiki_+|, |vimwiki_<Backspace>|
+`html`:
+ Mappings for HTML generation.
+ |vimwiki_<Leader>wh|, |vimwiki_<Leader>whh|
+`mouse`:
+ Mouse mappings, see |vimwiki_mouse|. This option is disabled by default.
+
+The default is to enable all key mappings except the mouse: >
+ let g:vimwiki_key_mappings =
+ \ {
+ \ 'all_maps': 1,
+ \ 'global': 1,
+ \ 'headers': 1,
+ \ 'text_objs': 1,
+ \ 'table_format': 1,
+ \ 'table_mappings': 1,
+ \ 'lists': 1,
+ \ 'links': 1,
+ \ 'html': 1,
+ \ 'mouse': 0,
+ \ }
+
+
==============================================================================
13. Getting help *vimwiki-help*
@@ -3333,6 +3422,9 @@ New:~
* PR #683: Improve layout and format of key binding documentation in
README and include note about key bindings that may not work.
* PR #681: Prevent sticky type checking errors for old vim versions.
+ * PR #686: New option |g:vimwiki_key_mappings| that allow key mappings to
+ be enabled/disabled by groups. Key mappings are also no longer
+ overwritten if they are already defined.
* PR #675: Add option |vimwiki-option-name| to assign a per wiki name.
* PR #661: Add option |g:vimwiki_auto_header| to automatically generate
a level 1 header for new wiki pages.
@@ -3381,7 +3473,10 @@ New:~
* PR #47: Optimize table formatting for large tables.
Removed:~
- *
+ * Options g:vimwiki_use_mouse and g:vimwiki_table_mappings. These are
+ still present in the code for backwards compatibility but have been
+ removed from the documentation and will be fully removed at a later
+ point.
Fixed:~
* Issue #612: GVim menu displayed duplicate names.
diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim
@@ -129,20 +129,6 @@ setlocal formatoptions+=n
let &formatlistpat = vimwiki#vars#get_syntaxlocal('rxListItem')
-if !empty(&langmap)
- " Valid only if langmap is a comma separated pairs of chars
- let s:l_o = matchstr(&langmap, '\C,\zs.\zeo,')
- if s:l_o
- exe 'nnoremap <silent> <buffer> '.s:l_o.' :call vimwiki#lst#kbd_o()<CR>a'
- endif
-
- let s:l_O = matchstr(&langmap, '\C,\zs.\zeO,')
- if s:l_O
- exe 'nnoremap <silent> <buffer> '.s:l_O.' :call vimwiki#lst#kbd_O()<CR>a'
- endif
-endif
-
-
" ------------------------------------------------
" Folding stuff
@@ -330,7 +316,8 @@ command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p'))
" Keybindings
" ------------------------------------------------
-if vimwiki#vars#get_global('use_mouse')
+" mouse mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').mouse)
nmap <buffer> <S-LeftMouse> <NOP>
nmap <buffer> <C-LeftMouse> <NOP>
nnoremap <silent><buffer> <2-LeftMouse>
@@ -340,224 +327,193 @@ if vimwiki#vars#get_global('use_mouse')
nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR>
endif
-
-if !hasmapto('<Plug>Vimwiki2HTML')
- exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'h <Plug>Vimwiki2HTML'
-endif
+" <Plug> HTML definitions
nnoremap <script><buffer> <Plug>Vimwiki2HTML :Vimwiki2HTML<CR>
-
-if !hasmapto('<Plug>Vimwiki2HTMLBrowse')
- exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'hh <Plug>Vimwiki2HTMLBrowse'
-endif
nnoremap <script><buffer> <Plug>Vimwiki2HTMLBrowse :Vimwiki2HTMLBrowse<CR>
-if !hasmapto('<Plug>VimwikiFollowLink')
- nmap <silent><buffer> <CR> <Plug>VimwikiFollowLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiFollowLink :VimwikiFollowLink<CR>
-
-if !hasmapto('<Plug>VimwikiSplitLink')
- nmap <silent><buffer> <S-CR> <Plug>VimwikiSplitLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiSplitLink :VimwikiSplitLink<CR>
-
-if !hasmapto('<Plug>VimwikiVSplitLink')
- nmap <silent><buffer> <C-CR> <Plug>VimwikiVSplitLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR>
-
-if !hasmapto('<Plug>VimwikiNormalizeLink')
- nmap <silent><buffer> + <Plug>VimwikiNormalizeLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLink :VimwikiNormalizeLink 0<CR>
-
-if !hasmapto('<Plug>VimwikiNormalizeLinkVisual')
- vmap <silent><buffer> + <Plug>VimwikiNormalizeLinkVisual
-endif
-vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisual :<C-U>VimwikiNormalizeLink 1<CR>
-
-if !hasmapto('<Plug>VimwikiNormalizeLinkVisualCR')
- vmap <silent><buffer> <CR> <Plug>VimwikiNormalizeLinkVisualCR
-endif
-vnoremap <silent><script><buffer>
- \ <Plug>VimwikiNormalizeLinkVisualCR :<C-U>VimwikiNormalizeLink 1<CR>
-
-if !hasmapto('<Plug>VimwikiNextTask')
- nmap <silent><buffer> gnt <Plug>VimwikiNextTask
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiNextTask :VimwikiNextTask<CR>
-
-if !hasmapto('<Plug>VimwikiTabnewLink')
- nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink
- nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink :VimwikiTabnewLink<CR>
-
-if !hasmapto('<Plug>VimwikiGoBackLink')
- nmap <silent><buffer> <BS> <Plug>VimwikiGoBackLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink :VimwikiGoBackLink<CR>
-
-if !hasmapto('<Plug>VimwikiNextLink')
- nmap <silent><buffer> <TAB> <Plug>VimwikiNextLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiNextLink :VimwikiNextLink<CR>
-
-if !hasmapto('<Plug>VimwikiPrevLink')
- nmap <silent><buffer> <S-TAB> <Plug>VimwikiPrevLink
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiPrevLink :VimwikiPrevLink<CR>
-
-if !hasmapto('<Plug>VimwikiDeleteLink')
- exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'d <Plug>VimwikiDeleteLink'
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiDeleteLink :VimwikiDeleteLink<CR>
-
-if !hasmapto('<Plug>VimwikiRenameLink')
- exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'r <Plug>VimwikiRenameLink'
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiRenameLink :VimwikiRenameLink<CR>
-
-if !hasmapto('<Plug>VimwikiDiaryNextDay')
- nmap <silent><buffer> <C-Down> <Plug>VimwikiDiaryNextDay
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay :VimwikiDiaryNextDay<CR>
-
-if !hasmapto('<Plug>VimwikiDiaryPrevDay')
- nmap <silent><buffer> <C-Up> <Plug>VimwikiDiaryPrevDay
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay :VimwikiDiaryPrevDay<CR>
-
-" List mappings
-if !hasmapto('<Plug>VimwikiToggleListItem')
- nmap <silent><buffer> <C-Space> <Plug>VimwikiToggleListItem
- vmap <silent><buffer> <C-Space> <Plug>VimwikiToggleListItem
- if has("unix")
- nmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem
- vmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem
- endif
-endif
-if !hasmapto('<Plug>VimwikiToggleRejectedListItem')
- nmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem
- vmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR>
-vnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR>
-nnoremap <silent><script><buffer>
- \ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR>
-vnoremap <silent><script><buffer>
- \ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR>
-
-if !hasmapto('<Plug>VimwikiIncrementListItem')
- nmap <silent><buffer> gln <Plug>VimwikiIncrementListItem
- vmap <silent><buffer> gln <Plug>VimwikiIncrementListItem
-endif
-if !hasmapto('<Plug>VimwikiDecrementListItem')
- nmap <silent><buffer> glp <Plug>VimwikiDecrementListItem
- vmap <silent><buffer> glp <Plug>VimwikiDecrementListItem
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR>
-vnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR>
-nnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR>
-vnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR>
-
-if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem', 'i')
- imap <silent><buffer> <C-D> <Plug>VimwikiDecreaseLvlSingleItem
-endif
+" default HTML key mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').html)
+ call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'h', '<Plug>Vimwiki2HTML')
+ call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'hh', '<Plug>Vimwiki2HTMLBrowse')
+endif
+
+" <Plug> links definitions
+nnoremap <silent><script><buffer> <Plug>VimwikiFollowLink
+ \ :VimwikiFollowLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiSplitLink
+ \ :VimwikiSplitLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiVSplitLink
+ \ :VimwikiVSplitLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLink
+ \ :VimwikiNormalizeLink 0<CR>
+vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisual
+ \ :<C-U>VimwikiNormalizeLink 1<CR>
+vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisualCR
+ \ :<C-U>VimwikiNormalizeLink 1<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink
+ \ :VimwikiTabnewLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink
+ \ :VimwikiGoBackLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiNextLink
+ \ :VimwikiNextLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiPrevLink
+ \ :VimwikiPrevLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiDeleteLink
+ \ :VimwikiDeleteLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiRenameLink
+ \ :VimwikiRenameLink<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay
+ \ :VimwikiDiaryNextDay<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay
+ \ :VimwikiDiaryPrevDay<CR>
+
+" default links key mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').links)
+ call vimwiki#u#map_key('n', '<CR>', '<Plug>VimwikiFollowLink')
+ call vimwiki#u#map_key('n', '<S-CR>', '<Plug>VimwikiSplitLink')
+ call vimwiki#u#map_key('n', '<C-CR>', '<Plug>VimwikiVSplitLink')
+ 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', '<BS>', '<Plug>VimwikiGoBackLink')
+ call vimwiki#u#map_key('n', '<TAB>', '<Plug>VimwikiNextLink')
+ call vimwiki#u#map_key('n', '<S-TAB>', '<Plug>VimwikiPrevLink')
+ call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'d', '<Plug>VimwikiDeleteLink')
+ call vimwiki#u#map_key('n', vimwiki#vars#get_global('map_prefix').'r', '<Plug>VimwikiRenameLink')
+ call vimwiki#u#map_key('n', '<C-Down>', '<Plug>VimwikiDiaryNextDay')
+ call vimwiki#u#map_key('n', '<C-Up>', '<Plug>VimwikiDiaryPrevDay')
+endif
+
+" <Plug> lists definitions
+nnoremap <silent><script><buffer> <Plug>VimwikiNextTask
+ \ :VimwikiNextTask<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem
+ \ :VimwikiToggleListItem<CR>
+vnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem
+ \ :VimwikiToggleListItem<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiToggleRejectedListItem
+ \ :VimwikiToggleRejectedListItem<CR>
+vnoremap <silent><script><buffer> <Plug>VimwikiToggleRejectedListItem
+ \ :VimwikiToggleRejectedListItem<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem
+ \ :VimwikiIncrementListItem<CR>
+vnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem
+ \ :VimwikiIncrementListItem<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem
+ \ :VimwikiDecrementListItem<CR>
+vnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem
+ \ :VimwikiDecrementListItem<CR>
inoremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem
\ <C-O>:VimwikiListChangeLvl decrease 0<CR>
-
-if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem', 'i')
- imap <silent><buffer> <C-T> <Plug>VimwikiIncreaseLvlSingleItem
-endif
inoremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem
\ <C-O>:VimwikiListChangeLvl increase 0<CR>
-
-if !hasmapto('<Plug>VimwikiListNextSymbol', 'i')
- imap <silent><buffer> <C-L><C-J> <Plug>VimwikiListNextSymbol
-endif
inoremap <silent><script><buffer> <Plug>VimwikiListNextSymbol
- \ <C-O>:VimwikiListChangeSymbolI next<CR>
-
-if !hasmapto('<Plug>VimwikiListPrevSymbol', 'i')
- imap <silent><buffer> <C-L><C-K> <Plug>VimwikiListPrevSymbol
-endif
+ \ <C-O>:VimwikiListChangeSymbolI next<CR>
inoremap <silent><script><buffer> <Plug>VimwikiListPrevSymbol
- \ <C-O>:VimwikiListChangeSymbolI prev<CR>
-
-if !hasmapto('<Plug>VimwikiListToggle', 'i')
- imap <silent><buffer> <C-L><C-M> <Plug>VimwikiListToggle
-endif
-inoremap <silent><script><buffer> <Plug>VimwikiListToggle <Esc>:VimwikiListToggle<CR>
-
-nnoremap <silent> <buffer> o :<C-U>call vimwiki#lst#kbd_o()<CR>
-nnoremap <silent> <buffer> O :<C-U>call vimwiki#lst#kbd_O()<CR>
-
-if !hasmapto('<Plug>VimwikiRenumberList')
- nmap <silent><buffer> glr <Plug>VimwikiRenumberList
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiRenumberList :VimwikiRenumberList<CR>
-
-if !hasmapto('<Plug>VimwikiRenumberAllLists')
- nmap <silent><buffer> gLr <Plug>VimwikiRenumberAllLists
- nmap <silent><buffer> gLR <Plug>VimwikiRenumberAllLists
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiRenumberAllLists :VimwikiRenumberAllLists<CR>
-
-if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem')
- map <silent><buffer> glh <Plug>VimwikiDecreaseLvlSingleItem
-endif
-noremap <silent><script><buffer>
- \ <Plug>VimwikiDecreaseLvlSingleItem :VimwikiListChangeLvl decrease 0<CR>
-
-if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem')
- map <silent><buffer> gll <Plug>VimwikiIncreaseLvlSingleItem
-endif
-noremap <silent><script><buffer>
- \ <Plug>VimwikiIncreaseLvlSingleItem :VimwikiListChangeLvl increase 0<CR>
-
-if !hasmapto('<Plug>VimwikiDecreaseLvlWholeItem')
- map <silent><buffer> gLh <Plug>VimwikiDecreaseLvlWholeItem
- map <silent><buffer> gLH <Plug>VimwikiDecreaseLvlWholeItem
-endif
-noremap <silent><script><buffer>
- \ <Plug>VimwikiDecreaseLvlWholeItem :VimwikiListChangeLvl decrease 1<CR>
-
-if !hasmapto('<Plug>VimwikiIncreaseLvlWholeItem')
- map <silent><buffer> gLl <Plug>VimwikiIncreaseLvlWholeItem
- map <silent><buffer> gLL <Plug>VimwikiIncreaseLvlWholeItem
-endif
-noremap <silent><script><buffer>
- \ <Plug>VimwikiIncreaseLvlWholeItem :VimwikiListChangeLvl increase 1<CR>
-
-if !hasmapto('<Plug>VimwikiRemoveSingleCB')
- map <silent><buffer> gl<Space> <Plug>VimwikiRemoveSingleCB
-endif
-noremap <silent><script><buffer> <Plug>VimwikiRemoveSingleCB :VimwikiRemoveSingleCB<CR>
-
-if !hasmapto('<Plug>VimwikiRemoveCBInList')
- map <silent><buffer> gL<Space> <Plug>VimwikiRemoveCBInList
-endif
-noremap <silent><script><buffer> <Plug>VimwikiRemoveCBInList :VimwikiRemoveCBInList<CR>
-
-for s:char in vimwiki#vars#get_syntaxlocal('bullet_types')
- if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>')
- exe 'noremap <silent><buffer> gl'.s:char.' :VimwikiChangeSymbolTo '.s:char.'<CR>'
+ \ <C-O>:VimwikiListChangeSymbolI prev<CR>
+inoremap <silent><script><buffer> <Plug>VimwikiListToggle
+ \ <Esc>:VimwikiListToggle<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiRenumberList
+ \ :VimwikiRenumberList<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiRenumberAllLists
+ \ :VimwikiRenumberAllLists<CR>
+noremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem
+ \ :VimwikiListChangeLvl decrease 0<CR>
+noremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem
+ \ :VimwikiListChangeLvl increase 0<CR>
+noremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlWholeItem
+ \ :VimwikiListChangeLvl decrease 1<CR>
+noremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlWholeItem
+ \ :VimwikiListChangeLvl increase 1<CR>
+noremap <silent><script><buffer> <Plug>VimwikiRemoveSingleCB
+ \ :VimwikiRemoveSingleCB<CR>
+noremap <silent><script><buffer> <Plug>VimwikiRemoveCBInList
+ \ :VimwikiRemoveCBInList<CR>
+nnoremap <silent><buffer> <Plug>VimwikiListo
+ \ :<C-U>call vimwiki#lst#kbd_o()<CR>
+nnoremap <silent><buffer> <Plug>VimwikiListO
+ \ :<C-U>call vimwiki#lst#kbd_O()<CR>
+inoremap <silent><buffer> <Plug>VimwikiReturn15
+ \ <Esc>:VimwikiReturn 1 5<CR>
+inoremap <silent><buffer> <Plug>VimwikiReturn22
+ \ <Esc>:VimwikiReturn 2 2<CR>
+
+" default lists key mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').lists)
+ call vimwiki#u#map_key('n', 'gnt', '<Plug>VimwikiNextTask')
+ call vimwiki#u#map_key('n', '<C-Space>', '<Plug>VimwikiToggleListItem')
+ call vimwiki#u#map_key('v', '<C-Space>', '<Plug>VimwikiToggleListItem', 1)
+ if has('unix')
+ call vimwiki#u#map_key('n', '<C-@>', '<Plug>VimwikiToggleListItem', 1)
+ call vimwiki#u#map_key('v', '<C-@>', '<Plug>VimwikiToggleListItem', 1)
endif
- if !hasmapto(':VimwikiChangeSymbolInListTo '.s:char.'<CR>')
- exe 'noremap <silent><buffer> gL'.s:char.' :VimwikiChangeSymbolInListTo '.s:char.'<CR>'
- endif
-endfor
+ call vimwiki#u#map_key('n', 'glx', '<Plug>VimwikiToggleRejectedListItem')
+ call vimwiki#u#map_key('v', 'glx', '<Plug>VimwikiToggleRejectedListItem', 1)
+ call vimwiki#u#map_key('n', 'gln', '<Plug>VimwikiIncrementListItem')
+ call vimwiki#u#map_key('v', 'gln', '<Plug>VimwikiIncrementListItem', 1)
+ call vimwiki#u#map_key('n', 'glp', '<Plug>VimwikiDecrementListItem')
+ call vimwiki#u#map_key('v', 'glp', '<Plug>VimwikiDecrementListItem', 1)
+ call vimwiki#u#map_key('i', '<C-D>', '<Plug>VimwikiDecreaseLvlSingleItem')
+ call vimwiki#u#map_key('i', '<C-T>', '<Plug>VimwikiIncreaseLvlSingleItem')
+ call vimwiki#u#map_key('n', 'glh', '<Plug>VimwikiDecreaseLvlSingleItem', 1)
+ call vimwiki#u#map_key('n', 'gll', '<Plug>VimwikiIncreaseLvlSingleItem', 1)
+ call vimwiki#u#map_key('n', 'gLh', '<Plug>VimwikiDecreaseLvlWholeItem')
+ call vimwiki#u#map_key('n', 'gLH', '<Plug>VimwikiDecreaseLvlWholeItem', 1)
+ call vimwiki#u#map_key('n', 'gLl', '<Plug>VimwikiIncreaseLvlWholeItem')
+ call vimwiki#u#map_key('n', 'gLL', '<Plug>VimwikiIncreaseLvlWholeItem', 1)
+ call vimwiki#u#map_key('i', '<C-L><C-J>', '<Plug>VimwikiListNextSymbol')
+ call vimwiki#u#map_key('i', '<C-L><C-K>', '<Plug>VimwikiListPrevSymbol')
+ call vimwiki#u#map_key('i', '<C-L><C-M>', '<Plug>VimwikiListToggle')
+ call vimwiki#u#map_key('n', 'glr', '<Plug>VimwikiRenumberList')
+ call vimwiki#u#map_key('n', 'gLr', '<Plug>VimwikiRenumberAllLists')
+ call vimwiki#u#map_key('n', 'gLR', '<Plug>VimwikiRenumberAllLists', 1)
+ call vimwiki#u#map_key('n', 'gl', '<Plug>VimwikiRemoveSingleCB')
+ call vimwiki#u#map_key('n', 'gL', '<Plug>VimwikiRemoveCBInList')
+ call vimwiki#u#map_key('n', 'o', '<Plug>VimwikiListo')
+ call vimwiki#u#map_key('n', 'O', '<Plug>VimwikiListO')
+ call vimwiki#u#map_key('i', '<CR>', '<Plug>VimwikiReturn15')
+ call vimwiki#u#map_key('i', '<S-CR>', '<Plug>VimwikiReturn22')
+
+ " change symbol for bulleted lists
+ for s:char in vimwiki#vars#get_syntaxlocal('bullet_types')
+ if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>') && maparg('gl'.s:char, 'n') ==# ''
+ exe 'noremap <silent><buffer> gl'.s:char.' :VimwikiChangeSymbolTo '.s:char.'<CR>'
+ endif
+ if !hasmapto(':VimwikiChangeSymbolInListTo '.s:char.'<CR>') && maparg('gL'.s:char, 'n') ==# ''
+ exe 'noremap <silent><buffer> gL'.s:char.' :VimwikiChangeSymbolInListTo '.s:char.'<CR>'
+ endif
+ endfor
-for s:typ in vimwiki#vars#get_syntaxlocal('number_types')
- if !hasmapto(':VimwikiChangeSymbolTo '.s:typ.'<CR>')
- exe 'noremap <silent><buffer> gl'.s:typ[0].' :VimwikiChangeSymbolTo '.s:typ.'<CR>'
- endif
- if !hasmapto(':VimwikiChangeSymbolInListTo '.s:typ.'<CR>')
- exe 'noremap <silent><buffer> gL'.s:typ[0].' :VimwikiChangeSymbolInListTo '.s:typ.'<CR>'
- endif
-endfor
+ " change symbol for numbered lists
+ for s:typ in vimwiki#vars#get_syntaxlocal('number_types')
+ if !hasmapto(':VimwikiChangeSymbolTo '.s:typ.'<CR>') && maparg('gl'.s:typ, 'n') ==# ''
+ exe 'noremap <silent><buffer> gl'.s:typ[0].' :VimwikiChangeSymbolTo '.s:typ.'<CR>'
+ endif
+ if !hasmapto(':VimwikiChangeSymbolInListTo '.s:typ.'<CR>') && maparg('gL'.s:typ, 'n') ==# ''
+ exe 'noremap <silent><buffer> gL'.s:typ[0].' :VimwikiChangeSymbolInListTo '.s:typ.'<CR>'
+ endif
+ endfor
+
+ " insert items in a list using langmap characters (see :h langmap)
+ if !empty(&langmap)
+ " Valid only if langmap is a comma separated pairs of chars
+ let s:l_o = matchstr(&langmap, '\C,\zs.\zeo,')
+ if s:l_o
+ if maparg(s:l_o, 'n') ==# ''
+ exe 'nnoremap <silent><buffer> '.s:l_o.' :call vimwiki#lst#kbd_o()<CR>a'
+ endif
+ endif
+ let s:l_O = matchstr(&langmap, '\C,\zs.\zeO,')
+ if s:l_O
+ if maparg(s:l_O, 'n') ==# ''
+ exe 'nnoremap <silent><buffer> '.s:l_O.' :call vimwiki#lst#kbd_O()<CR>a'
+ endif
+ endif
+ endif
+endif
function! s:CR(normal, just_mrkr)
if vimwiki#vars#get_global('table_mappings')
@@ -571,130 +527,133 @@ function! s:CR(normal, just_mrkr)
call vimwiki#lst#kbd_cr(a:normal, a:just_mrkr)
endfunction
-if !hasmapto('VimwikiReturn', 'i')
- if maparg('<CR>', 'i') !~? '<Esc>:VimwikiReturn'
- inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 1 5<CR>
+" insert mode table mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').table_mappings)
+ if maparg('<Tab>', 'i') ==# ''
+ inoremap <expr><buffer> <Tab> vimwiki#tbl#kbd_tab()
endif
- if maparg('<S-CR>', 'i') !~? '<Esc>:VimwikiReturn'
- inoremap <silent><buffer> <S-CR> <Esc>:VimwikiReturn 2 2<CR>
+ if maparg('<S-Tab>', 'i') ==# ''
+ inoremap <expr><buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
endif
endif
-
-"Table mappings
- if vimwiki#vars#get_global('table_mappings')
- inoremap <expr> <buffer> <Tab> vimwiki#tbl#kbd_tab()
- inoremap <expr> <buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
- endif
-
-
-" table formatting mappings
-if !hasmapto('<Plug>VimwikiTableAlignQ', 'n') && maparg('gqq', 'n') == ""
- nmap <silent><buffer> gqq <Plug>VimwikiTableAlignQ
-endif
-nnoremap <silent><buffer> <Plug>VimwikiTableAlignQ :VimwikiTableAlignQ<CR>
-if !hasmapto('<Plug>VimwikiTableAlignQ1', 'n') && maparg('gq1', 'n') == ""
- nmap <silent><buffer> gq1 <Plug>VimwikiTableAlignQ1
-endif
-nnoremap <silent><buffer> <Plug>VimwikiTableAlignQ1 :VimwikiTableAlignQ 2<CR>
-
-if !hasmapto('<Plug>VimwikiTableAlignW', 'n') && maparg('gww', 'n') == ""
- nmap <silent><buffer> gww <Plug>VimwikiTableAlignW
-endif
-nnoremap <silent><buffer> <Plug>VimwikiTableAlignW :VimwikiTableAlignW<CR>
-if !hasmapto('<Plug>VimwikiTableAlignW1', 'n') && maparg('gw1', 'n') == ""
- nmap <silent><buffer> gw1 <Plug>VimwikiTableAlignW1
-endif
-nnoremap <silent><buffer> <Plug>VimwikiTableAlignW1 :VimwikiTableAlignW 2<CR>
-
-if !hasmapto('<Plug>VimwikiTableMoveColumnLeft')
- nmap <silent><buffer> <A-Left> <Plug>VimwikiTableMoveColumnLeft
-endif
-nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnLeft :VimwikiTableMoveColumnLeft<CR>
-if !hasmapto('<Plug>VimwikiTableMoveColumnRight')
- nmap <silent><buffer> <A-Right> <Plug>VimwikiTableMoveColumnRight
+" <Plug> table formatting definitions
+nnoremap <silent><buffer> <Plug>VimwikiTableAlignQ
+ \ :VimwikiTableAlignQ<CR>
+nnoremap <silent><buffer> <Plug>VimwikiTableAlignQ1
+ \ :VimwikiTableAlignQ 2<CR>
+nnoremap <silent><buffer> <Plug>VimwikiTableAlignW
+ \ :VimwikiTableAlignW<CR>
+nnoremap <silent><buffer> <Plug>VimwikiTableAlignW1
+ \ :VimwikiTableAlignW 2<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnLeft
+ \ :VimwikiTableMoveColumnLeft<CR>
+nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnRight
+ \ :VimwikiTableMoveColumnRight<CR>
+
+" default table formatting key mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').table_format)
+ call vimwiki#u#map_key('n', 'gqq', '<Plug>VimwikiTableAlignQ')
+ call vimwiki#u#map_key('n', 'gq1', '<Plug>VimwikiTableAlignQ1')
+ call vimwiki#u#map_key('n', 'gww', '<Plug>VimwikiTableAlignW')
+ call vimwiki#u#map_key('n', 'gw1', '<Plug>VimwikiTableAlignW1')
+ call vimwiki#u#map_key('n', '<A-Left>', '<Plug>VimwikiTableMoveColumnLeft')
+ call vimwiki#u#map_key('n', '<A-Right>', '<Plug>VimwikiTableMoveColumnRight')
+endif
+
+" <Plug> text object definitions
+onoremap <silent><buffer> <Plug>VimwikiTextObjHeader
+ \ :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderV
+ \ :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjHeaderContent
+ \ :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderContentV
+ \ :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSub
+ \ :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSubV
+ \ :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSubContent
+ \ :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjHeaderSubContentV
+ \ :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjTableCell
+ \ :<C-U>call vimwiki#base#TO_table_cell(0, 0)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjTableCellV
+ \ :<C-U>call vimwiki#base#TO_table_cell(0, 1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjTableCellInner
+ \ :<C-U>call vimwiki#base#TO_table_cell(1, 0)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjTableCellInnerV
+ \ :<C-U>call vimwiki#base#TO_table_cell(1, 1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjColumn
+ \ :<C-U>call vimwiki#base#TO_table_col(0, 0)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjColumnV
+ \ :<C-U>call vimwiki#base#TO_table_col(0, 1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjColumnInner
+ \ :<C-U>call vimwiki#base#TO_table_col(1, 0)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjColumnInnerV
+ \ :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjListChildren
+ \ :<C-U>call vimwiki#lst#TO_list_item(0, 0)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjListChildrenV
+ \ :<C-U>call vimwiki#lst#TO_list_item(0, 1)<CR>
+onoremap <silent><buffer> <Plug>VimwikiTextObjListSingle
+ \ :<C-U>call vimwiki#lst#TO_list_item(1, 0)<CR>
+vnoremap <silent><buffer> <Plug>VimwikiTextObjListSingleV
+ \ :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR>
+
+" default text object key mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').text_objs)
+ call vimwiki#u#map_key('o', 'ah', '<Plug>VimwikiTextObjHeader')
+ call vimwiki#u#map_key('v', 'ah', '<Plug>VimwikiTextObjHeaderV')
+ call vimwiki#u#map_key('o', 'ih', '<Plug>VimwikiTextObjHeaderContent')
+ call vimwiki#u#map_key('v', 'ih', '<Plug>VimwikiTextObjHeaderContentV')
+ call vimwiki#u#map_key('o', 'aH', '<Plug>VimwikiTextObjHeaderSub')
+ call vimwiki#u#map_key('v', 'aH', '<Plug>VimwikiTextObjHeaderSubV')
+ call vimwiki#u#map_key('o', 'iH', '<Plug>VimwikiTextObjHeaderSubContent')
+ call vimwiki#u#map_key('v', 'iH', '<Plug>VimwikiTextObjHeaderSubContentV')
+ call vimwiki#u#map_key('o', 'a\', '<Plug>VimwikiTextObjTableCell')
+ call vimwiki#u#map_key('v', 'a\', '<Plug>VimwikiTextObjTableCellV')
+ call vimwiki#u#map_key('o', 'i\', '<Plug>VimwikiTextObjTableCellInner')
+ call vimwiki#u#map_key('v', 'i\', '<Plug>VimwikiTextObjTableCellInnerV')
+ call vimwiki#u#map_key('o', 'ac', '<Plug>VimwikiTextObjColumn')
+ call vimwiki#u#map_key('v', 'ac', '<Plug>VimwikiTextObjColumnV')
+ call vimwiki#u#map_key('o', 'ic', '<Plug>VimwikiTextObjColumnInner')
+ call vimwiki#u#map_key('v', 'ic', '<Plug>VimwikiTextObjColumnInnerV')
+ call vimwiki#u#map_key('o', 'al', '<Plug>VimwikiTextObjListChildren')
+ call vimwiki#u#map_key('v', 'al', '<Plug>VimwikiTextObjListChildrenV')
+ call vimwiki#u#map_key('o', 'il', '<Plug>VimwikiTextObjListSingle')
+ call vimwiki#u#map_key('v', 'il', '<Plug>VimwikiTextObjListSingleV')
+endif
+
+" <Plug> header definitions
+nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel
+ \ :<C-U>call vimwiki#base#AddHeaderLevel(v:count)<CR>
+nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel
+ \ :<C-U>call vimwiki#base#RemoveHeaderLevel(v:count)<CR>
+nnoremap <silent><buffer> <Plug>VimwikiGoToParentHeader
+ \ :<C-u>call vimwiki#base#goto_parent_header()<CR>
+nnoremap <silent><buffer> <Plug>VimwikiGoToNextHeader
+ \ :<C-u>call vimwiki#base#goto_next_header()<CR>
+nnoremap <silent><buffer> <Plug>VimwikiGoToPrevHeader
+ \ :<C-u>call vimwiki#base#goto_prev_header()<CR>
+nnoremap <silent><buffer> <Plug>VimwikiGoToNextSiblingHeader
+ \ :<C-u>call vimwiki#base#goto_sibling(+1)<CR>
+nnoremap <silent><buffer> <Plug>VimwikiGoToPrevSiblingHeader
+ \ :<C-u>call vimwiki#base#goto_sibling(-1)<CR>
+
+" default header key mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').headers)
+ call vimwiki#u#map_key('n', '=', '<Plug>VimwikiAddHeaderLevel')
+ call vimwiki#u#map_key('n', '-', '<Plug>VimwikiRemoveHeaderLevel')
+ call vimwiki#u#map_key('n', ']u', '<Plug>VimwikiGoToParentHeader')
+ call vimwiki#u#map_key('n', '[u', '<Plug>VimwikiGoToParentHeader', 1)
+ call vimwiki#u#map_key('n', ']]', '<Plug>VimwikiGoToNextHeader')
+ call vimwiki#u#map_key('n', '[[', '<Plug>VimwikiGoToPrevHeader')
+ call vimwiki#u#map_key('n', ']=', '<Plug>VimwikiGoToNextSiblingHeader')
+ call vimwiki#u#map_key('n', '[=', '<Plug>VimwikiGoToPrevSiblingHeader')
endif
-nnoremap <silent><script><buffer>
- \ <Plug>VimwikiTableMoveColumnRight :VimwikiTableMoveColumnRight<CR>
-
-
-" ------------------------------------------------
-" Text objects
-" ------------------------------------------------
-
-onoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
-vnoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
-
-onoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
-vnoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
-
-onoremap <silent><buffer> aH :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
-vnoremap <silent><buffer> aH :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
-
-onoremap <silent><buffer> iH :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
-vnoremap <silent><buffer> iH :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
-
-onoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 0)<CR>
-vnoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 1)<CR>
-
-onoremap <silent><buffer> i\ :<C-U>call vimwiki#base#TO_table_cell(1, 0)<CR>
-vnoremap <silent><buffer> i\ :<C-U>call vimwiki#base#TO_table_cell(1, 1)<CR>
-
-onoremap <silent><buffer> ac :<C-U>call vimwiki#base#TO_table_col(0, 0)<CR>
-vnoremap <silent><buffer> ac :<C-U>call vimwiki#base#TO_table_col(0, 1)<CR>
-
-onoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 0)<CR>
-vnoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR>
-
-onoremap <silent><buffer> al :<C-U>call vimwiki#lst#TO_list_item(0, 0)<CR>
-vnoremap <silent><buffer> al :<C-U>call vimwiki#lst#TO_list_item(0, 1)<CR>
-
-onoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 0)<CR>
-vnoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR>
-
-if !hasmapto('<Plug>VimwikiAddHeaderLevel')
- nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel
-endif
-nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel :
- \<C-U>call vimwiki#base#AddHeaderLevel(v:count)<CR>
-
-if !hasmapto('<Plug>VimwikiRemoveHeaderLevel')
- nmap <silent><buffer> - <Plug>VimwikiRemoveHeaderLevel
-endif
-nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel :
- \<C-U>call vimwiki#base#RemoveHeaderLevel(v:count)<CR>
-
-if !hasmapto('<Plug>VimwikiGoToParentHeader')
- nmap <silent><buffer> ]u <Plug>VimwikiGoToParentHeader
- nmap <silent><buffer> [u <Plug>VimwikiGoToParentHeader
-endif
-nnoremap <silent><buffer> <Plug>VimwikiGoToParentHeader :
- \<C-u>call vimwiki#base#goto_parent_header()<CR>
-
-if !hasmapto('<Plug>VimwikiGoToNextHeader')
- nmap <silent><buffer> ]] <Plug>VimwikiGoToNextHeader
-endif
-nnoremap <silent><buffer> <Plug>VimwikiGoToNextHeader :
- \<C-u>call vimwiki#base#goto_next_header()<CR>
-
-if !hasmapto('<Plug>VimwikiGoToPrevHeader')
- nmap <silent><buffer> [[ <Plug>VimwikiGoToPrevHeader
-endif
-nnoremap <silent><buffer> <Plug>VimwikiGoToPrevHeader :
- \<C-u>call vimwiki#base#goto_prev_header()<CR>
-
-if !hasmapto('<Plug>VimwikiGoToNextSiblingHeader')
- nmap <silent><buffer> ]= <Plug>VimwikiGoToNextSiblingHeader
-endif
-nnoremap <silent><buffer> <Plug>VimwikiGoToNextSiblingHeader :
- \<C-u>call vimwiki#base#goto_sibling(+1)<CR>
-
-if !hasmapto('<Plug>VimwikiGoToPrevSiblingHeader')
- nmap <silent><buffer> [= <Plug>VimwikiGoToPrevSiblingHeader
-endif
-nnoremap <silent><buffer> <Plug>VimwikiGoToPrevSiblingHeader :
- \<C-u>call vimwiki#base#goto_sibling(-1)<CR>
-
if vimwiki#vars#get_wikilocal('auto_export')
diff --git a/plugin/vimwiki.vim b/plugin/vimwiki.vim
@@ -338,7 +338,6 @@ augroup vimwiki
augroup END
-
command! VimwikiUISelect call vimwiki#base#ui_select()
" these commands take a count e.g. :VimwikiIndex 2
@@ -372,62 +371,44 @@ command! VimwikiDiaryGenerateLinks
command! VimwikiShowVersion call s:get_version()
-let s:map_prefix = vimwiki#vars#get_global('map_prefix')
-if !hasmapto('<Plug>VimwikiIndex') && maparg(s:map_prefix.'w', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'w <Plug>VimwikiIndex'
-endif
-nnoremap <unique><script> <Plug>VimwikiIndex
+" <Plug> global definitions
+nnoremap <silent><script> <Plug>VimwikiIndex
\ :<C-U>call vimwiki#base#goto_index(v:count1)<CR>
-
-if !hasmapto('<Plug>VimwikiTabIndex') && maparg(s:map_prefix.'t', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'t <Plug>VimwikiTabIndex'
-endif
-nnoremap <unique><script> <Plug>VimwikiTabIndex
+nnoremap <silent><script> <Plug>VimwikiTabIndex
\ :<C-U>call vimwiki#base#goto_index(v:count1, 1)<CR>
-
-if !hasmapto('<Plug>VimwikiUISelect') && maparg(s:map_prefix.'s', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'s <Plug>VimwikiUISelect'
-endif
-nnoremap <unique><script> <Plug>VimwikiUISelect :VimwikiUISelect<CR>
-
-if !hasmapto('<Plug>VimwikiDiaryIndex') && maparg(s:map_prefix.'i', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'i <Plug>VimwikiDiaryIndex'
-endif
-nnoremap <unique><script> <Plug>VimwikiDiaryIndex
+nnoremap <silent><script> <Plug>VimwikiUISelect
+ \ :VimwikiUISelect<CR>
+nnoremap <silent><script> <Plug>VimwikiDiaryIndex
\ :<C-U>call vimwiki#diary#goto_diary_index(v:count)<CR>
-
-if !hasmapto('<Plug>VimwikiDiaryGenerateLinks') && maparg(s:map_prefix.'<Leader>i', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>i <Plug>VimwikiDiaryGenerateLinks'
-endif
-nnoremap <unique><script> <Plug>VimwikiDiaryGenerateLinks :VimwikiDiaryGenerateLinks<CR>
-
-if !hasmapto('<Plug>VimwikiMakeDiaryNote') && maparg(s:map_prefix.'<Leader>w', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>w <Plug>VimwikiMakeDiaryNote'
-endif
-nnoremap <unique><script> <Plug>VimwikiMakeDiaryNote
+nnoremap <silent><script> <Plug>VimwikiDiaryGenerateLinks
+ \ :VimwikiDiaryGenerateLinks<CR>
+nnoremap <silent><script> <Plug>VimwikiMakeDiaryNote
\ :<C-U>call vimwiki#diary#make_note(v:count)<CR>
-
-if !hasmapto('<Plug>VimwikiTabMakeDiaryNote') && maparg(s:map_prefix.'<Leader>t', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>t <Plug>VimwikiTabMakeDiaryNote'
-endif
-nnoremap <unique><script> <Plug>VimwikiTabMakeDiaryNote
+nnoremap <silent><script> <Plug>VimwikiTabMakeDiaryNote
\ :<C-U>call vimwiki#diary#make_note(v:count, 1)<CR>
-
-if !hasmapto('<Plug>VimwikiMakeYesterdayDiaryNote') && maparg(s:map_prefix.'<Leader>y', 'n') == ""
- exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>y <Plug>VimwikiMakeYesterdayDiaryNote'
-endif
-nnoremap <unique><script> <Plug>VimwikiMakeYesterdayDiaryNote
+nnoremap <silent><script> <Plug>VimwikiMakeYesterdayDiaryNote
\ :<C-U>call vimwiki#diary#make_note(v:count, 0,
\ vimwiki#diary#diary_date_link(localtime() - 60*60*24))<CR>
-
-if !hasmapto('<Plug>VimwikiMakeTomorrowDiaryNote')
- exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>m <Plug>VimwikiMakeTomorrowDiaryNote'
-endif
-nnoremap <unique><script> <Plug>VimwikiMakeTomorrowDiaryNote
+nnoremap <silent><script> <Plug>VimwikiMakeTomorrowDiaryNote
\ :<C-U>call vimwiki#diary#make_note(v:count, 0,
\ vimwiki#diary#diary_date_link(localtime() + 60*60*24))<CR>
+" get the user defined prefix (default <leader>w)
+let s:map_prefix = vimwiki#vars#get_global('map_prefix')
+
+" default global key mappings
+if str2nr(vimwiki#vars#get_global('key_mappings').global)
+ call vimwiki#u#map_key('n', s:map_prefix . 'w', '<Plug>VimwikiIndex')
+ call vimwiki#u#map_key('n', s:map_prefix . 't', '<Plug>VimwikiTabIndex')
+ call vimwiki#u#map_key('n', s:map_prefix . 's', '<Plug>VimwikiUISelect')
+ call vimwiki#u#map_key('n', s:map_prefix . 'i', '<Plug>VimwikiDiaryIndex')
+ call vimwiki#u#map_key('n', s:map_prefix . '<Leader>i', '<Plug>VimwikiDiaryGenerateLinks')
+ call vimwiki#u#map_key('n', s:map_prefix . '<Leader>w', '<Plug>VimwikiMakeDiaryNote')
+ call vimwiki#u#map_key('n', s:map_prefix . '<Leader>t', '<Plug>VimwikiTabMakeDiaryNote')
+ call vimwiki#u#map_key('n', s:map_prefix . '<Leader>y', '<Plug>VimwikiMakeYesterdayDiaryNote')
+ call vimwiki#u#map_key('n', s:map_prefix . '<Leader>m', '<Plug>VimwikiMakeTomorrowDiaryNote')
+endif
function! s:build_menu(topmenu)