diff --git a/autoload/tablemode.vim b/autoload/tablemode.vim index f6a028a..9f44808 100644 --- a/autoload/tablemode.vim +++ b/autoload/tablemode.vim @@ -43,6 +43,7 @@ function! s:ToggleMapping() "{{{2 call s:Map('(table-mode-add-formula)', 'tfa', 'n') call s:Map('(table-mode-eval-formula)', 'tfe', 'n') call s:Map('(table-mode-echo-cell)', 't?', 'n') + call s:Map('(table-mode-sort)', 'ts', 'n') else call s:UnMap(separator_map, 'i') call s:UnMap('{', 'n') @@ -56,6 +57,7 @@ function! s:ToggleMapping() "{{{2 call s:UnMap('tfa', 'n') call s:UnMap('tfe', 'n') call s:UnMap('t?', 'n') + call s:UnMap('ts', 'n') endif endif endfunction diff --git a/autoload/tablemode/spreadsheet.vim b/autoload/tablemode/spreadsheet.vim index 750bda2..c34fbef 100644 --- a/autoload/tablemode/spreadsheet.vim +++ b/autoload/tablemode/spreadsheet.vim @@ -179,3 +179,11 @@ function! tablemode#spreadsheet#Average(range, ...) abort "{{{2 call insert(args, a:range) return s:Average(call('tablemode#spreadsheet#cell#GetCellRange', args)) endfunction + +function! tablemode#spreadsheet#Sort(bang, ...) "{{{2 + let opts = a:0 ? a:1 : '' + let bang = a:bang ? '!' : '' + let [firstRow, lastRow] = [tablemode#spreadsheet#GetFirstRow('.'), tablemode#spreadsheet#GetLastRow('.')] + call tablemode#spreadsheet#MoveToStartOfCell() + exec ':'.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col('.').'v/' +endfunction diff --git a/plugin/table-mode.vim b/plugin/table-mode.vim index 92694d1..f21fd3a 100644 --- a/plugin/table-mode.vim +++ b/plugin/table-mode.vim @@ -57,6 +57,7 @@ endif " }}}2 command! -nargs=? -range Tableize ,call tablemode#TableizeRange() +command! -nargs=? -bang 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() @@ -89,6 +90,8 @@ nnoremap (table-mode-eval-formula) :call tablemode#spreadsheet#fo nnoremap (table-mode-echo-cell) :call TableEchoCell() +nnoremap (table-mode-sort) :call tablemode#spreadsheet#Sort() + if !hasmapto('(table-mode-tableize)') nmap tt (table-mode-tableize) xmap tt (table-mode-tableize)