" Finish if already loaded {{{1 if exists('g:loaded_table_mode') finish endif let g:loaded_table_mode = 1 " Avoiding side effects {{{1 let s:save_cpo = &cpo set cpo&vim function! s:SetGlobalOptDefault(opt, val) "{{{1 if !exists('g:' . a:opt) let g:{a:opt} = a:val endif endfunction " Set Global Defaults {{{1 call s:SetGlobalOptDefault('table_mode_corner', '+') call s:SetGlobalOptDefault('table_mode_verbose', 1) call s:SetGlobalOptDefault('table_mode_separator', '|') " '|' is a special character, we need to map instead " the character to map from let g:table_mode_separator_map = get(g:, 'table_mode_separator_map', g:table_mode_separator) if g:table_mode_separator_map ==# '|' | let g:table_mode_separator_map = '' | endif " the character to map to (when inserting the separator) let g:table_mode_separator_map_target = g:table_mode_separator if g:table_mode_separator_map_target ==# '|' | let g:table_mode_separator_map_target = '' | endif call s:SetGlobalOptDefault('table_mode_escaped_separator_regex', '\V\C\\\@1t') call s:SetGlobalOptDefault('table_mode_toggle_map', 'm') call s:SetGlobalOptDefault('table_mode_always_active', 0) call s:SetGlobalOptDefault('table_mode_delimiter', ',') call s:SetGlobalOptDefault('table_mode_corner_corner', '|') call s:SetGlobalOptDefault('table_mode_align_char', ':') call s:SetGlobalOptDefault('table_mode_disable_mappings', 0) call s:SetGlobalOptDefault('table_mode_disable_tableize_mappings', 0) call s:SetGlobalOptDefault('table_mode_motion_up_map', '{') call s:SetGlobalOptDefault('table_mode_motion_down_map', '}') call s:SetGlobalOptDefault('table_mode_motion_left_map', '[') call s:SetGlobalOptDefault('table_mode_motion_right_map', ']') call s:SetGlobalOptDefault('table_mode_cell_text_object_a_map', 'a') call s:SetGlobalOptDefault('table_mode_cell_text_object_i_map', 'i') call s:SetGlobalOptDefault('table_mode_realign_map', g:table_mode_map_prefix.'r') call s:SetGlobalOptDefault('table_mode_delete_row_map', g:table_mode_map_prefix.'dd') call s:SetGlobalOptDefault('table_mode_delete_column_map', g:table_mode_map_prefix.'dc') call s:SetGlobalOptDefault('table_mode_insert_column_before_map', g:table_mode_map_prefix.'iC') call s:SetGlobalOptDefault('table_mode_insert_column_after_map', g:table_mode_map_prefix.'ic') call s:SetGlobalOptDefault('table_mode_add_formula_map', g:table_mode_map_prefix.'fa') call s:SetGlobalOptDefault('table_mode_eval_formula_map', g:table_mode_map_prefix.'fe') call s:SetGlobalOptDefault('table_mode_echo_cell_map', g:table_mode_map_prefix.'?') call s:SetGlobalOptDefault('table_mode_sort_map', g:table_mode_map_prefix.'s') call s:SetGlobalOptDefault('table_mode_tableize_map', g:table_mode_map_prefix.'t') call s:SetGlobalOptDefault('table_mode_tableize_d_map', 'T') call s:SetGlobalOptDefault('table_mode_syntax', 1) call s:SetGlobalOptDefault('table_mode_auto_align', 1) call s:SetGlobalOptDefault('table_mode_update_time', 500) call s:SetGlobalOptDefault('table_mode_tableize_auto_border', 0) call s:SetGlobalOptDefault('table_mode_ignore_align', 0) if !g:table_mode_always_active "{{{2 exec "nnoremap " g:table_mode_map_prefix . g:table_mode_toggle_map ":call tablemode#Toggle()" command! -nargs=0 TableModeToggle call tablemode#Toggle() command! -nargs=0 TableModeEnable call tablemode#Enable() command! -nargs=0 TableModeDisable call tablemode#Disable() else execute "inoremap " . g:table_mode_separator_map . ' ' . \ g:table_mode_separator_map_target . ":call tablemode#TableizeInsertMode()a" endif " }}}2 command! -nargs=? -range Tableize ,call tablemode#TableizeRange() command! -nargs=? -bang -range TableSort ,call tablemode#spreadsheet#Sort(0, ) command! TableAddFormula call tablemode#spreadsheet#formula#Add() command! TableModeRealign call tablemode#table#Realign('.') command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine() execute 'inoremap (table-mode-tableize)' g:table_mode_separator_map . ':call tablemode#TableizeInsertMode()a' nnoremap (table-mode-tableize) :Tableize xnoremap (table-mode-tableize) :Tableize xnoremap (table-mode-tableize-delimiter) :call tablemode#TableizeByDelimiter() nnoremap (table-mode-realign) :call tablemode#table#Realign('.') nnoremap (table-mode-motion-up) :call tablemode#spreadsheet#cell#Motion('k') nnoremap (table-mode-motion-down) :call tablemode#spreadsheet#cell#Motion('j') nnoremap (table-mode-motion-left) :call tablemode#spreadsheet#cell#Motion('h') nnoremap (table-mode-motion-right) :call tablemode#spreadsheet#cell#Motion('l') onoremap (table-mode-cell-text-object-a) :call tablemode#spreadsheet#cell#TextObject(0) onoremap (table-mode-cell-text-object-i) :call tablemode#spreadsheet#cell#TextObject(1) xnoremap (table-mode-cell-text-object-a) :call tablemode#spreadsheet#cell#TextObject(0) xnoremap (table-mode-cell-text-object-i) :call tablemode#spreadsheet#cell#TextObject(1) nnoremap (table-mode-delete-row) :call tablemode#spreadsheet#DeleteRow() nnoremap (table-mode-delete-column) :call tablemode#spreadsheet#DeleteColumn() nnoremap (table-mode-insert-column-before) :call tablemode#spreadsheet#InsertColumn(0) nnoremap (table-mode-insert-column-after) :call tablemode#spreadsheet#InsertColumn(1) nnoremap (table-mode-add-formula) :call tablemode#spreadsheet#formula#Add() nnoremap (table-mode-eval-formula) :call tablemode#spreadsheet#formula#EvaluateFormulaLine() nnoremap (table-mode-echo-cell) :call tablemode#spreadsheet#EchoCell() nnoremap (table-mode-sort) :call tablemode#spreadsheet#Sort('') if !g:table_mode_disable_tableize_mappings if !hasmapto('(table-mode-tableize)') exec "nmap" g:table_mode_tableize_map "(table-mode-tableize)" exec "xmap" g:table_mode_tableize_map "(table-mode-tableize)" endif if !hasmapto('(table-mode-tableize-delimiter)') exec "xmap" g:table_mode_tableize_d_map "(table-mode-tableize-delimiter)" endif endif augroup TableMode "{{{1 au! autocmd User TableModeEnabled call tablemode#logger#log('Table Mode Enabled') autocmd User TableModeDisabled call tablemode#logger#log('Table Mode Disabled') augroup END " Avoiding side effects {{{1 let &cpo = s:save_cpo " ModeLine {{{ " vim: sw=2 sts=2 fdl=0 fdm=marker