""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" File: visual-multi.vim
" Description: multiple selections in vim
" Mantainer: Gianmaria Bajo <mg1979.git@gmail.com>
" Url: https://github.com/mg979/vim-visual-multi
" Licence: The MIT License (MIT)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Guard {{{
if v:version < 800
echomsg '[vim-visual-multi] Vim version 8 is required'
finish
endif
if exists("g:loaded_visual_multi")
finish
endif
let g:loaded_visual_multi = 1
let s:save_cpo = &cpo
set cpo&vim
"}}}
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
com! -nargs=? -complete=customlist,vm#themes#complete VMTheme call vm#themes#load(<q-args>)
com! -bar VMDebug call vm#special#commands#debug()
com! -bar VMClear call vm#hard_reset()
com! -bar VMLive call vm#special#commands#live()
com! -bang -nargs=? VMRegisters call vm#special#commands#show_registers(<bang>0, <q-args>)
com! -range -bang -nargs=? VMSearch call vm#special#commands#search(<bang>0, <line1>, <line2>, <q-args>)
" Deprecated commands {{{1
com! -bang VMFromSearch call vm#special#commands#deprecated('VMFromSearch')
"}}}
hi default link VM_Mono ErrorMsg
hi default link VM_Cursor Visual
hi default link VM_Extend PmenuSel
hi default link VM_Insert DiffChange
hi link MultiCursor VM_Cursor
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:Vm = { 'hi' : {},
\ 'buffer' : 0,
\ 'extend_mode' : 0,
\ 'finding' : 0,
\ 'mappings_enabled' : 0,
\ 'last_ex' : '',
\ 'last_normal' : '',
\ 'last_visual' : '',
\ 'registers' : {'"': [], '-': []},
\ 'oldupdate' : exists("##TextYankPost") ? 0 : &updatetime,
\}
let g:VM_highlight_matches = get(g:, 'VM_highlight_matches', 'underline')
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Global mappings
call vm#plugs#permanent()
call vm#maps#default()
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Registers
let g:VM_persistent_registers = get(g:, 'VM_persistent_registers', 0)
fun! s:vm_registers()
if exists('g:VM_PERSIST') && !g:VM_persistent_registers
unlet g:VM_PERSIST
elseif exists('g:VM_PERSIST')
let g:Vm.registers = deepcopy(g:VM_PERSIST)
endif
endfun
fun! s:vm_persist()
if exists('g:VM_PERSIST') && !g:VM_persistent_registers
unlet g:VM_PERSIST
elseif g:VM_persistent_registers
let g:VM_PERSIST = deepcopy(g:Vm.registers)
endif
endfun
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Autocommands
augroup VM_start
au!
au VimEnter * call s:vm_registers()
au VimLeavePre * call s:vm_persist()
augroup END
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
fun! VMInfos() abort
if !exists('b:VM_Selection') || empty(b:VM_Selection)
return {}
endif
let infos = {}
let VM = b:VM_Selection
let m = g:Vm.mappings_enabled ? 'M' : 'm'
let s = VM.Vars.single_region ? 'S' : 's'
let l = VM.Vars.multiline ? 'V' : 'v'
let infos.current = VM.Vars.index + 1
let infos.total = len(VM.Regions)
let infos.ratio = infos.current . ' / ' . infos.total
let infos.patterns = VM.Vars.search
let infos.status = m.s.l
return infos
endfun
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: ft=vim et sw=2 ts=2 sts=2 fdm=marker