table-mode.vim 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. " Finish if already loaded {{{1
  2. if exists('g:loaded_table_mode')
  3. finish
  4. endif
  5. let g:loaded_table_mode = 1
  6. " Avoiding side effects {{{1
  7. let s:save_cpo = &cpo
  8. set cpo&vim
  9. function! s:SetGlobalOptDefault(opt, val) "{{{1
  10. if !exists('g:' . a:opt)
  11. let g:{a:opt} = a:val
  12. endif
  13. endfunction
  14. " Set Global Defaults {{{1
  15. call s:SetGlobalOptDefault('table_mode_corner', '+')
  16. call s:SetGlobalOptDefault('table_mode_verbose', 1)
  17. call s:SetGlobalOptDefault('table_mode_separator', '|')
  18. " '|' is a special character, we need to map <Bar> instead
  19. " the character to map from
  20. let g:table_mode_separator_map = get(g:, 'table_mode_separator_map', g:table_mode_separator)
  21. if g:table_mode_separator_map ==# '|' | let g:table_mode_separator_map = '<Bar>' | endif
  22. " the character to map to (when inserting the separator)
  23. let g:table_mode_separator_map_target = g:table_mode_separator
  24. if g:table_mode_separator_map_target ==# '|' | let g:table_mode_separator_map_target = '<Bar>' | endif
  25. call s:SetGlobalOptDefault('table_mode_escaped_separator_regex', '\V\C\\\@1<!'.escape(g:table_mode_separator, '\'))
  26. call s:SetGlobalOptDefault('table_mode_fillchar', '-')
  27. call s:SetGlobalOptDefault('table_mode_header_fillchar', '-')
  28. call s:SetGlobalOptDefault('table_mode_map_prefix', '<Leader>t')
  29. call s:SetGlobalOptDefault('table_mode_toggle_map', 'm')
  30. call s:SetGlobalOptDefault('table_mode_always_active', 0)
  31. call s:SetGlobalOptDefault('table_mode_delimiter', ',')
  32. call s:SetGlobalOptDefault('table_mode_corner_corner', '|')
  33. call s:SetGlobalOptDefault('table_mode_align_char', ':')
  34. call s:SetGlobalOptDefault('table_mode_disable_mappings', 0)
  35. call s:SetGlobalOptDefault('table_mode_disable_tableize_mappings', 0)
  36. call s:SetGlobalOptDefault('table_mode_motion_up_map', '{<Bar>')
  37. call s:SetGlobalOptDefault('table_mode_motion_down_map', '}<Bar>')
  38. call s:SetGlobalOptDefault('table_mode_motion_left_map', '[<Bar>')
  39. call s:SetGlobalOptDefault('table_mode_motion_right_map', ']<Bar>')
  40. call s:SetGlobalOptDefault('table_mode_cell_text_object_a_map', 'a<Bar>')
  41. call s:SetGlobalOptDefault('table_mode_cell_text_object_i_map', 'i<Bar>')
  42. call s:SetGlobalOptDefault('table_mode_realign_map', g:table_mode_map_prefix.'r')
  43. call s:SetGlobalOptDefault('table_mode_delete_row_map', g:table_mode_map_prefix.'dd')
  44. call s:SetGlobalOptDefault('table_mode_delete_column_map', g:table_mode_map_prefix.'dc')
  45. call s:SetGlobalOptDefault('table_mode_insert_column_before_map', g:table_mode_map_prefix.'iC')
  46. call s:SetGlobalOptDefault('table_mode_insert_column_after_map', g:table_mode_map_prefix.'ic')
  47. call s:SetGlobalOptDefault('table_mode_add_formula_map', g:table_mode_map_prefix.'fa')
  48. call s:SetGlobalOptDefault('table_mode_eval_formula_map', g:table_mode_map_prefix.'fe')
  49. call s:SetGlobalOptDefault('table_mode_echo_cell_map', g:table_mode_map_prefix.'?')
  50. call s:SetGlobalOptDefault('table_mode_sort_map', g:table_mode_map_prefix.'s')
  51. call s:SetGlobalOptDefault('table_mode_tableize_map', g:table_mode_map_prefix.'t')
  52. call s:SetGlobalOptDefault('table_mode_tableize_d_map', '<Leader>T')
  53. call s:SetGlobalOptDefault('table_mode_syntax', 1)
  54. call s:SetGlobalOptDefault('table_mode_auto_align', 1)
  55. call s:SetGlobalOptDefault('table_mode_update_time', 500)
  56. call s:SetGlobalOptDefault('table_mode_tableize_auto_border', 0)
  57. call s:SetGlobalOptDefault('table_mode_ignore_align', 0)
  58. if !g:table_mode_always_active "{{{2
  59. exec "nnoremap <silent>" g:table_mode_map_prefix . g:table_mode_toggle_map ":<C-U>call tablemode#Toggle()<CR>"
  60. command! -nargs=0 TableModeToggle call tablemode#Toggle()
  61. command! -nargs=0 TableModeEnable call tablemode#Enable()
  62. command! -nargs=0 TableModeDisable call tablemode#Disable()
  63. else
  64. execute "inoremap <silent> " . g:table_mode_separator_map . ' ' .
  65. \ g:table_mode_separator_map_target . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
  66. endif
  67. " }}}2
  68. command! -nargs=? -range Tableize <line1>,<line2>call tablemode#TableizeRange(<q-args>)
  69. command! -nargs=? -bang -range TableSort <line1>,<line2>call tablemode#spreadsheet#Sort(<bang>0, <q-args>)
  70. command! TableAddFormula call tablemode#spreadsheet#formula#Add()
  71. command! TableModeRealign call tablemode#table#Realign('.')
  72. command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine()
  73. execute 'inoremap <silent> <Plug>(table-mode-tableize)' g:table_mode_separator_map . '<Esc>:call tablemode#TableizeInsertMode()<CR>a'
  74. nnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
  75. xnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
  76. xnoremap <silent> <Plug>(table-mode-tableize-delimiter) :<C-U>call tablemode#TableizeByDelimiter()<CR>
  77. nnoremap <silent> <Plug>(table-mode-realign) :call tablemode#table#Realign('.')<CR>
  78. nnoremap <silent> <Plug>(table-mode-motion-up) :<C-U>call tablemode#spreadsheet#cell#Motion('k')<CR>
  79. nnoremap <silent> <Plug>(table-mode-motion-down) :<C-U>call tablemode#spreadsheet#cell#Motion('j')<CR>
  80. nnoremap <silent> <Plug>(table-mode-motion-left) :<C-U>call tablemode#spreadsheet#cell#Motion('h')<CR>
  81. nnoremap <silent> <Plug>(table-mode-motion-right) :<C-U>call tablemode#spreadsheet#cell#Motion('l')<CR>
  82. onoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
  83. onoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
  84. xnoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
  85. xnoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
  86. nnoremap <silent> <Plug>(table-mode-delete-row) :<C-U>call tablemode#spreadsheet#DeleteRow()<CR>
  87. nnoremap <silent> <Plug>(table-mode-delete-column) :<C-U>call tablemode#spreadsheet#DeleteColumn()<CR>
  88. nnoremap <silent> <Plug>(table-mode-insert-column-before) :<C-U>call tablemode#spreadsheet#InsertColumn(0)<CR>
  89. nnoremap <silent> <Plug>(table-mode-insert-column-after) :<C-U>call tablemode#spreadsheet#InsertColumn(1)<CR>
  90. nnoremap <silent> <Plug>(table-mode-add-formula) :call tablemode#spreadsheet#formula#Add()<CR>
  91. nnoremap <silent> <Plug>(table-mode-eval-formula) :call tablemode#spreadsheet#formula#EvaluateFormulaLine()<CR>
  92. nnoremap <silent> <Plug>(table-mode-echo-cell) :call tablemode#spreadsheet#EchoCell()<CR>
  93. nnoremap <silent> <Plug>(table-mode-sort) :call tablemode#spreadsheet#Sort('')<CR>
  94. if !g:table_mode_disable_tableize_mappings
  95. if !hasmapto('<Plug>(table-mode-tableize)')
  96. exec "nmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)"
  97. exec "xmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)"
  98. endif
  99. if !hasmapto('<Plug>(table-mode-tableize-delimiter)')
  100. exec "xmap" g:table_mode_tableize_d_map "<Plug>(table-mode-tableize-delimiter)"
  101. endif
  102. endif
  103. augroup TableMode "{{{1
  104. au!
  105. autocmd User TableModeEnabled call tablemode#logger#log('Table Mode Enabled')
  106. autocmd User TableModeDisabled call tablemode#logger#log('Table Mode Disabled')
  107. augroup END
  108. " Avoiding side effects {{{1
  109. let &cpo = s:save_cpo
  110. " ModeLine {{{
  111. " vim: sw=2 sts=2 fdl=0 fdm=marker