Compare commits

...

33 Commits

Author SHA1 Message Date
Dhruva Sagar
816072c0f5 Improved Formula Engine
* Does not try to forcefully cast column content to float
* Silences any errors during formula evaluation, you can look at
  `v:errmsg` to see if there was any error during the evaluation for
  debugging
2022-04-05 22:18:51 +05:30
Dhruva Sagar
698ff3074c Improve handling of g:table_mode_ignore_align 2022-03-01 13:12:54 +05:30
Dhruva Sagar
494d95d2b3 Add config g:table_mode_ignore_align. Fix #145
* Disabled by default, if enabled directs table mode to ignore aligning
  based on alignment characters on the header and always left aligns
2022-03-01 13:07:33 +05:30
Dhruva Sagar
9191af46b6 Updated README
Added information regarding overriding configurations for Markdown
/ ReST filetypes
2022-01-21 23:32:44 +05:30
Dhruva Sagar
c547471c0e Bump version to 4.7.5 2021-12-02 00:30:20 +05:30
Dhruva Sagar
bdcffffe1f Attempt to Fix #173 2021-12-02 00:28:56 +05:30
Dhruva Sagar
01a395df00 Add github sponsors! 2021-10-27 00:02:13 +05:30
Dhruva Sagar
2e95bc6991 Merge pull request #208 from jdorel/feature-cellcolor
(feature) highlight cell color based on cell prefix
2021-10-08 01:25:54 +05:30
Jonas DOREL
0fe6bd87ac feat(highlight): add color prefixes 2021-10-07 18:37:17 +02:00
Jonas DOREL
59900a3fef fix(regex): some words start with no 2021-10-05 20:20:57 +02:00
Dhruva Sagar
eb42c62812 Merge pull request #207 from jdorel/feature-cellcolor
feat(highlight): color cell if contains yes,no,?
2021-10-05 22:43:52 +05:30
Jonas DOREL
e5dc853ee3 fix(highlight): disable highlight when word before 2021-10-05 17:29:47 +02:00
Jonas DOREL
c949912bfa feat(highlight): color cell if contains yes,no,? 2021-10-05 16:06:53 +02:00
Dhruva Sagar
02d28b9323 Move echo cell functionality to autoload. Fixes #206 2021-09-04 23:24:42 +05:30
Dhruva Sagar
35e9fbf64c Improve formula evaluation. Fix #201
A past change added support for html comments for tables, however, this
fails when the formula line happens to match the format of html comments
2021-05-30 03:53:41 +05:30
Dhruva Sagar
5150f1ec06 Merge pull request #200 from bmundt6/master
Handle separator map and map target separately
2021-05-05 23:04:42 +05:30
Dhruva Sagar
d9334c52cc Bump ruby version for travis 2021-05-05 22:27:01 +05:30
Dhruva Sagar
88b9c85af3 Update doc and fixed specs 2021-05-05 22:23:35 +05:30
Dhruva Sagar
26d2390548 Merge branch 'master' into bmundt6-master 2021-05-05 22:23:27 +05:30
Dhruva Sagar
7b17c692e9 Update ruby to 3.0.0 for testing
Bump version to version 4.7.4
2021-05-05 22:12:44 +05:30
Benjamin Mundt
8dcdfad1ee Define separator map in one place as a global; add separator map target for separators other than | 2021-04-29 14:15:48 -04:00
Dhruva Sagar
659ba4f39c Merge pull request #187 from rohieb/doc
doc: correctly document fillchar and header fillchar
2020-10-14 01:06:56 +05:30
Roland Hieber
04b14c345e doc: correctly document fillchar and header fillchar 2020-10-07 23:05:51 +02:00
Dhruva Sagar
3476c4e517 Improve Tableize. Fix #109.
This adds a new option `g:table_mode_tableize_auto_border` that allows
to enable automatic border creation when using Tableize to create tables
2020-08-19 21:59:37 +05:30
Dhruva Sagar
88cb2e44b6 Bump version 2020-08-02 23:28:10 +05:30
Dhruva Sagar
336262d04f Fix #184
Improve formula evaluation, support border rows
2020-08-02 23:26:27 +05:30
Dhruva Sagar
5c489b57e8 Improve documentation. Fix #183
Update the vim help documentation to match the correct mappings
& behavior
2020-07-27 19:51:11 +05:30
Dhruva Sagar
436e7d6c21 Merge pull request #182 from CaninoDev/patch-2
Update README.md
2020-07-25 01:52:55 +05:30
Dhruva Sagar
1ea7960834 Merge pull request #181 from CaninoDev/patch-1
Add instructions for installation via vim-plug
2020-07-25 01:51:52 +05:30
IanGC
ff38f4451b Update README.md
1) `it's` is a contraction of `it is`. `its` is the possessive
2) Made consistent the formatting of `[count]` as used in various locations
3) Made consistent the various `g:` formattings
4) `immidiately` is correctly spelled `immediately`
5) Shortened some sentences for clarity

As an aside, this is an immensely useful plugin. Thanks so much for contributing your code.
2020-07-24 15:48:47 -04:00
IanGC
d5b9ce4d9e Add instructions for installation via vim-plug 2020-07-24 15:26:10 -04:00
Dhruva Sagar
6404009080 Improve documentation of g:table_mode_disable_tableize_mappings 2020-05-06 20:29:11 +05:30
Dhruva Sagar
c9b13e5d30 Add config to disable tableize mappings. Fix 176 2020-05-06 20:20:53 +05:30
14 changed files with 245 additions and 97 deletions

2
.github/FUNDING.yml vendored
View File

@@ -1,6 +1,6 @@
# These are supported funding model platforms # These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] github: dhruvasagar
patreon: # Replace with a single Patreon username patreon: # Replace with a single Patreon username
open_collective: vim-table-mode open_collective: vim-table-mode
ko_fi: # Replace with a single Ko-fi username ko_fi: # Replace with a single Ko-fi username

View File

@@ -1,4 +1,4 @@
language: ruby language: ruby
rvm: rvm:
- 2.5.3 - 3.0.0
script: rake ci script: rake ci

View File

@@ -1,5 +1,41 @@
# Change Log # Change Log
## Version 4.8.0
* Improved formula engine
- Does not cast column values to float
- Silences errors during evaluation, see `v:errmsg` for error information
from last evaluation for debugging issues with formulas
## Version 4.7.6.1
* Improved handling of `g:table_mode_ignore_align` configuration, now allows
per buffer overrides
## Version 4.7.6
* Add configuration `g:table_mode_ignore_align`
## Version 4.7.5
* Improved undo
## Version 4.7.3
* Adding option `g:table_mode_tableize_auto_border` to enable automatic border
creation when using Tableize to create tables
## Version 4.7.2
* Fix formula evaluation to respect border rows and apply formula expressions
correctly
## Version 4.6.8
* Upgrade rake
## Version 4.6.7
* Remove auto align feature for insert mode
## Version 4.6.6
* Add configuration `g:table_mode_update_time`
## Version 4.6.5
* Add support for auto aligning
## Version 4.6.4.1 ## Version 4.6.4.1
* Added a fix for markdown commentstring * Added a fix for markdown commentstring

View File

@@ -1,5 +1,6 @@
source 'https://rubygems.org' source 'https://rubygems.org'
ruby '2.5.3' ruby '3.0.0'
gem 'rake' gem 'rake'
gem 'vim-flavor', '~> 1.1' gem 'vim-flavor', '~> 1.1'

View File

@@ -18,7 +18,7 @@ DEPENDENCIES
vim-flavor (~> 1.1) vim-flavor (~> 1.1)
RUBY VERSION RUBY VERSION
ruby 2.5.3p105 ruby 3.0.0p0
BUNDLED WITH BUNDLED WITH
2.0.1 2.2.3

View File

@@ -1,4 +1,4 @@
# VIM Table Mode v4.7.0 [![Build Status](https://travis-ci.org/dhruvasagar/vim-table-mode.png?branch=master)](https://travis-ci.org/dhruvasagar/vim-table-mode) # VIM Table Mode v4.8.0 [![Build Status](https://travis-ci.org/dhruvasagar/vim-table-mode.png?branch=master)](https://travis-ci.org/dhruvasagar/vim-table-mode)
An awesome automatic table creator & formatter allowing one to create neat An awesome automatic table creator & formatter allowing one to create neat
tables as you type. tables as you type.
@@ -26,14 +26,15 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or ~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or
vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and
restart VIM restart VIM
4. Alternatively, if using <a href="https://github.com/junegunn/vim-plug">vim-plug</a>, then add `Plug 'dhruvasagar/vim-table-mode'` to your ~/.vimrc.
### Creating table on-the-fly ### Creating table on-the-fly
To start using the plugin in the on-the-fly mode use `:TableModeToggle` mapped to <kbd>\<Leader\>tm</kbd> by default (which means <kbd>\\</kbd> <kbd>t</kbd> <kbd>m</kbd> if you didn't override the <Leader> by `:let mapleader = ','` to have <kbd>,</kbd> <kbd>t</kbd> <kbd>m</kbd>). To start using the plugin in the on-the-fly mode use `:TableModeToggle` mapped to <kbd>\<Leader\>tm</kbd> by default (which means <kbd>\\</kbd> <kbd>t</kbd> <kbd>m</kbd> if you didn't override the <Leader> by `:let mapleader = ','` to have <kbd>,</kbd> <kbd>t</kbd> <kbd>m</kbd>).
> Tip : Tip:
> You can use the following to quickly enable / disable table mode in insert You can use the following to quickly enable / disable table mode in insert mode by using `||` or `__`:
> mode by using `||` or `__` :
> ```vim > ```vim
> function! s:isAtStartOfLine(mapping) > function! s:isAtStartOfLine(mapping)
> let text_before_cursor = getline('.')[0 : col('.')-1] > let text_before_cursor = getline('.')[0 : col('.')-1]
@@ -115,34 +116,42 @@ To get ReST-compatible tables use
Markdown and ReST filetypes have automatically configured corners. Markdown and ReST filetypes have automatically configured corners.
You can also define in a table header border how it's content should be > If you wish to override their configurations, it should be done in an after
> plugin, for example :
>
> In a `$VIM/after/ftplugin/markdown/custom.vim` you can add the following :
>
> ```viml
> let b:table_mode_corner='+'
> ```
You can also define in a table header border how its content should be
aligned, whether center, right or left by using a `:` character defined by aligned, whether center, right or left by using a `:` character defined by
`g:table_mode_align_char` option. `g:table_mode_align_char` option.
If you manipulate the table when table mode is disabled or copy paste a table If you manipulate the table when table mode is disabled or copy paste a table
from clipboard from outside and it ends up being misaligned, you can realign from clipboard from outside and it ends up being misaligned, you can realign
it using `:TableModeRealign` or using the default mapping it using `:TableModeRealign` or using the default mapping
<kbd>\<Leader\>tr</kbd> defined by `g:table_mode_relign_map` option. <kbd>\<Leader\>tr</kbd> (defined by the option `g:table_mode_relign_map`).
### Formatting existing content into a table ### Formatting existing content into a table
Table Mode wouldn't justify it's name if it didn't allow formatting Table Mode wouldn't justify its name if it didn't allow formatting
existing content into a table. And it does as promised. Like table creation existing content into a table. And it does as promised. Like table creation typing on the fly,
on the fly as you type, formatting existing content into a table is equally formatting existing content into a table is equally
simple. You can visually select multiple lines and call `:Tableize` on it, simple. You can visually select multiple lines and call `:Tableize` on it.
or alternatively use the mapping <kbd>\<Leader\>tt</kbd> defined by the Alternatively, the mapping <kbd>\<Leader\>tt</kbd> can be used (defined by the
`g:table_mode_tableize_map` option which would convert CSV (Comma Separated option `g:table_mode_tableize_map`). This converts CSV (Comma-separated
Value) data into a table and use `,` defined by `g:table_mode_delimiter` Values) data into a table.
option as the delimiter.
If however you wish to use a different delimiter, you can use the command If however you wish to use a different delimiter, you can use the command
`:Tableize/{pattern}` in a similar fashion as you use tabular (eg. `:Tableize/{pattern}` in a similar fashion as you tabulate (e.g.
`:Tableize/;` uses ';' as the delimiter) or use the mapping <kbd>\<Leader\>T</kbd> `:Tableize/;` uses ';' as the delimiter) or use the mapping <kbd>\<Leader\>T</kbd>
defined by `g:table_mode_tableize_op_map` option which takes input in the (defined by the option `g:table_mode_tableize_op_map`) which takes input in the
cmd-line and uses the `{pattern}` input as the delimiter. cmd-line and uses the `{pattern}` input as the delimiter.
`:Tableize` also accepts a range and so you can also call it by giving `:Tableize` also accepts a range. Call it by giving
lines manually like `:line1,line2Tableize`, but this is not very intuitive. lines manually like `:line1,line2Tableize`. However this may not be intuitive.
You can use the mapping <kbd>\<Leader\>T</kbd> with a `[count]` to apply it to the You can use the mapping <kbd>\<Leader\>T</kbd> with a `[count]` to apply it to the
next `[count]` lines in standard vim style. next `[count]` lines in standard vim style.
@@ -160,33 +169,44 @@ it using `:TableModeRealign` or using the default mapping
Tableize provides a text object for manipulating table cells. Following Tableize provides a text object for manipulating table cells. Following
the vim philosophy the you have <kbd>i|</kbd> & <kbd>a|</kbd> for the the vim philosophy the you have <kbd>i|</kbd> & <kbd>a|</kbd> for the
inner and around (including the immidiate right table separator) the inner and around (including the immediate right table separator) the
table cell. table cell.
- **Delete Row** : - **Delete Row** :
You can use the <kbd>\<Leader\>tdd</kbd> mapping defined by the option You can use the <kbd>\<Leader\>tdd</kbd> mapping (defined by the option
`g:table_mode_delete_row_map` to delete the current table row (provided `g:table_mode_delete_row_map`) to delete the current table row (provided
you are within a table row), this can be preceeded with a [count] to you are within a table row). This can be preceeded with a `[count]` to
delete multiple rows just like you would with 'dd'. delete multiple rows as per Vim command grammar.
- **Delete Column** : - **Delete Column** :
You can use the <kbd>\<Leader\>tdc</kbd> mapping defined by the option You can use the <kbd>\<Leader\>tdc</kbd> mapping (defined by the option
`g:table_mode_delete_column_map` to delete the entire current column `g:table_mode_delete_column_map`) to delete the entire current column
(provided you are within a table row), this can also be preceeded with a (provided you are within a table row), this can also be preceeded with a
[count] to delete multiple columns. `[count]` to delete multiple columns.
- **Insert Column** : - **Insert Column** :
You can use the <kbd>\<Leader\>tic</kbd> mapping defined by the option You can use the <kbd>\<Leader\>tic</kbd> mapping (defined by the option
`g:table_mode_insert_column_after_map` to insert a column after the `g:table_mode_insert_column_after_map`) to insert a column after the
cursor (provided you are within a table row). Of course you can use the cursor (provided you are within a table row). Of course you can use the
<kbd>\<Leader\>tiC</kbd> mapping defined by <kbd>\<Leader\>tiC</kbd> mapping defined by
`g:table_mode_insert_column_before_map` to insert a column before the `g:table_mode_insert_column_before_map` to insert a column before the
cursor. Both can also be preceeded with a [count] to insert multiple cursor. Both can also be preceeded with a [count] to insert multiple
columns. columns.
### Highlight cells based on content
You can highlight cells based on content by setting `let g:table_mode_color_cells` :
- cells starting with `yes` will use the `yesCell` highlight group.
- cells starting with `no` will use the `noCell` highlight group.
- cells starting with `?` will use the `maybeCell` hightlight group.
You can overwrite any highlight group. For exemple use `hi yesCell ctermfg=2` to remove the background color.
## Advanced Usage: Spreadsheet Capabilities ## Advanced Usage: Spreadsheet Capabilities
### Table Formulas ### Table Formulas
@@ -195,7 +215,7 @@ it using `:TableModeRealign` or using the default mapping
of defining formulas : of defining formulas :
- You can add formulas using `:TableAddFormula` or the mapping <kbd>\<Leader\>tfa</kbd> - You can add formulas using `:TableAddFormula` or the mapping <kbd>\<Leader\>tfa</kbd>
defined by the option `g:table_mode_add_formula_map` from within a table (defined by the option `g:table_mode_add_formula_map`) from within a table
cell, which will ask for input on the cmd-line with a `f=` prompt. The cell, which will ask for input on the cmd-line with a `f=` prompt. The
input formula will be appended to the formula line if one exists or a new input formula will be appended to the formula line if one exists or a new
one will be created with the input formula taking the current cell as the one will be created with the input formula taking the current cell as the
@@ -208,7 +228,7 @@ it using `:TableModeRealign` or using the default mapping
formulas on the line separated with a ';' eg) `# tmf: $3=$2*$1;$4=$3/3.14` formulas on the line separated with a ';' eg) `# tmf: $3=$2*$1;$4=$3/3.14`
You can evaluate the formula line using `:TableEvalFormulaLine` or the You can evaluate the formula line using `:TableEvalFormulaLine` or the
mapping <kbd>\<Leader\>tfe</kbd> defined by the option `g:table_mode_eval_expr_map` mapping <kbd>\<Leader\>tfe</kbd> (defined by the option `g:table_mode_eval_expr_map`)
from anywhere inside the table or while on the formula line. from anywhere inside the table or while on the formula line.
NOTE: You can now use the mapping <kbd>\<Leader\>t?</kbd> NOTE: You can now use the mapping <kbd>\<Leader\>t?</kbd>
@@ -233,7 +253,7 @@ it using `:TableModeRealign` or using the default mapping
which are also defined by the same format as that of the target cell. You which are also defined by the same format as that of the target cell. You
can use all native vim functions within the formula. Apart from that table can use all native vim functions within the formula. Apart from that table
mode also provides 2 special functions `Sum` and `Average`. Both these mode also provides 2 special functions `Sum` and `Average`. Both these
functions take a range as input. A range can be of two forms : functions take a range as input. A range can be of two forms:
- `r1:r2`: This represents cells in the current column from row `r1` - `r1:r2`: This represents cells in the current column from row `r1`
through `r2`. If `r2` is negative it represents `r2` rows above the through `r2`. If `r2` is negative it represents `r2` rows above the

View File

@@ -22,13 +22,9 @@ function! s:UnMap(map, mode) "{{{2
endfunction endfunction
function! s:ToggleMapping() "{{{2 function! s:ToggleMapping() "{{{2
let separator_map = g:table_mode_separator
" '|' is a special character, we need to map <Bar> instead
if g:table_mode_separator ==# '|' | let separator_map = '<Bar>' | endif
if !g:table_mode_disable_mappings if !g:table_mode_disable_mappings
if tablemode#IsActive() if tablemode#IsActive()
call s:Map('<Plug>(table-mode-tableize)', separator_map, 'i') call s:Map('<Plug>(table-mode-tableize)', g:table_mode_separator_map, 'i')
call s:Map('<Plug>(table-mode-motion-up)', g:table_mode_motion_up_map, 'n') call s:Map('<Plug>(table-mode-motion-up)', g:table_mode_motion_up_map, 'n')
call s:Map('<Plug>(table-mode-motion-down)', g:table_mode_motion_down_map, 'n') call s:Map('<Plug>(table-mode-motion-down)', g:table_mode_motion_down_map, 'n')
call s:Map('<Plug>(table-mode-motion-left)', g:table_mode_motion_left_map, 'n') call s:Map('<Plug>(table-mode-motion-left)', g:table_mode_motion_left_map, 'n')
@@ -47,7 +43,7 @@ function! s:ToggleMapping() "{{{2
call s:Map('<Plug>(table-mode-echo-cell)', g:table_mode_echo_cell_map, 'n') call s:Map('<Plug>(table-mode-echo-cell)', g:table_mode_echo_cell_map, 'n')
call s:Map('<Plug>(table-mode-sort)', g:table_mode_sort_map, 'n') call s:Map('<Plug>(table-mode-sort)', g:table_mode_sort_map, 'n')
else else
call s:UnMap(separator_map, 'i') call s:UnMap(g:table_mode_separator_map, 'i')
call s:UnMap(g:table_mode_motion_up_map, 'n') call s:UnMap(g:table_mode_motion_up_map, 'n')
call s:UnMap(g:table_mode_motion_down_map, 'n') call s:UnMap(g:table_mode_motion_down_map, 'n')
call s:UnMap(g:table_mode_motion_left_map, 'n') call s:UnMap(g:table_mode_motion_left_map, 'n')
@@ -75,7 +71,8 @@ function! s:ToggleSyntax() "{{{2
if tablemode#IsActive() if tablemode#IsActive()
exec 'syntax match Table' exec 'syntax match Table'
\ '/' . tablemode#table#StartExpr() . '\zs|.\+|\ze' . tablemode#table#EndExpr() . '/' \ '/' . tablemode#table#StartExpr() . '\zs|.\+|\ze' . tablemode#table#EndExpr() . '/'
\ 'contains=TableBorder,TableSeparator,TableColumnAlign containedin=ALL' \ 'contains=TableBorder,TableSeparator,TableColumnAlign,yesCell,noCell,maybeCell,redCell,greenCell,yellowCell,blueCell,whiteCell,darkCell'
\ 'containedin=ALL'
syntax match TableSeparator /|/ contained syntax match TableSeparator /|/ contained
syntax match TableColumnAlign /:/ contained syntax match TableColumnAlign /:/ contained
syntax match TableBorder /[\-+]\+/ contained syntax match TableBorder /[\-+]\+/ contained
@@ -83,6 +80,32 @@ function! s:ToggleSyntax() "{{{2
hi! link TableBorder Delimiter hi! link TableBorder Delimiter
hi! link TableSeparator Delimiter hi! link TableSeparator Delimiter
hi! link TableColumnAlign Type hi! link TableColumnAlign Type
syntax match redCell '|\@<= *r:[^|]*' contained
hi redCell ctermfg=9 ctermbg=1
syntax match greenCell '|\@<= *g:[^|]*' contained
hi greenCell ctermfg=10 ctermbg=2
syntax match yellowCell '|\@<= *y:[^|]*' contained
hi yellowCell ctermfg=11 ctermbg=3
syntax match blueCell '|\@<= *b:[^|]*' contained
hi blueCell ctermfg=12 ctermbg=4
syntax match whiteCell '|\@<= *w:[^|]*' contained
hi whiteCell ctermfg=0 ctermbg=15
syntax match darkCell '|\@<= *d:[^|]*' contained
hi darkCell ctermfg=15 ctermbg=0
if exists("g:table_mode_color_cells") && g:table_mode_color_cells
syntax match yesCell '|\@<= *yes[^|]*' contained
syntax match noCell '|\@<= *no\A[^|]*' contained " \A to exclude words like notes
syntax match maybeCell '|\@<= *?[^|]*' contained
" '|\@<=' : Match previous characters, excluding them from the group
endif
else else
syntax clear Table syntax clear Table
syntax clear TableBorder syntax clear TableBorder
@@ -174,7 +197,7 @@ endfunction
function! tablemode#TableizeInsertMode() "{{{2 function! tablemode#TableizeInsertMode() "{{{2
if tablemode#IsActive() if tablemode#IsActive()
if getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator . tablemode#table#EndExpr()) if getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator . tablemode#table#EndExpr())
call tablemode#table#AddBorder('.') call tablemode#table#AddBorder('.')
normal! A normal! A
elseif getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator) elseif getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator)
@@ -206,9 +229,24 @@ endfunction
function! tablemode#TableizeRange(...) range "{{{2 function! tablemode#TableizeRange(...) range "{{{2
let lnum = a:firstline let lnum = a:firstline
while lnum < (a:firstline + (a:lastline - a:firstline + 1)) let total = (a:lastline - a:firstline + 1)
" echom total
let cntr = 1
while cntr <= total
call s:Tableizeline(lnum, a:1) call s:Tableizeline(lnum, a:1)
undojoin undojoin
if g:table_mode_tableize_auto_border
if cntr == 1
normal! O
call tablemode#table#AddBorder('.')
normal! j
let lnum += 1
endif
normal! o
call tablemode#table#AddBorder('.')
let lnum += 1
endif
let cntr += 1
let lnum += 1 let lnum += 1
endwhile endwhile
@@ -223,3 +261,7 @@ function! tablemode#TableizeByDelimiter() "{{{2
exec line("'<") . ',' . line("'>") . "call tablemode#TableizeRange('/' . delim)" exec line("'<") . ',' . line("'>") . "call tablemode#TableizeRange('/' . delim)"
endif endif
endfunction endfunction
if !hlexists('yesCell') | hi yesCell cterm=bold ctermfg=10 ctermbg=2 | endif |
if !hlexists('noCell') | hi noCell cterm=bold ctermfg=9 ctermbg=1 | endif |
if !hlexists('maybeCell') | hi maybeCell cterm=bold ctermfg=11 ctermbg=3 | endif |

View File

@@ -115,7 +115,11 @@ function! tablemode#align#Align(lines) "{{{2
endfor endfor
endfor endfor
let alignments = tablemode#align#alignments(lines[0].lnum, len(lines[0].text)) if tablemode#utils#get_buffer_or_global_option('table_mode_ignore_align') ==# 1
let alignments = []
else
let alignments = tablemode#align#alignments(lines[0].lnum, len(lines[0].text))
endif
for idx in range(len(lines)) for idx in range(len(lines))
let tlnum = lines[idx].lnum let tlnum = lines[idx].lnum

View File

@@ -420,3 +420,9 @@ function! tablemode#spreadsheet#Sort(bang, ...) range "{{{2
call tablemode#spreadsheet#MoveToStartOfCell() call tablemode#spreadsheet#MoveToStartOfCell()
exec ':undojoin | '.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col.'v/' exec ':undojoin | '.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col.'v/'
endfunction endfunction
function! tablemode#spreadsheet#EchoCell()
if tablemode#table#IsRow('.')
echomsg '$' . tablemode#spreadsheet#RowNr('.') . ',' . tablemode#spreadsheet#ColumnNr('.')
endif
endfunction

View File

@@ -1,12 +1,12 @@
" Private Functions {{{1 " Private Functions {{{1
function! s:IsHTMLComment(line) "{{{2
return getline(a:line) =~# '^\s*<!--'
endfunction
function! s:IsFormulaLine(line) "{{{2 function! s:IsFormulaLine(line) "{{{2
return getline(a:line) =~# 'tmf: ' return getline(a:line) =~# 'tmf: '
endfunction endfunction
function! s:IsHTMLComment(line) "{{{2
return !s:IsFormulaLine(a:line) && getline(a:line) =~# '^\s*<!--'
endfunction
" Public Functions {{{1 " Public Functions {{{1
function! tablemode#spreadsheet#formula#Add(...) "{{{2 function! tablemode#spreadsheet#formula#Add(...) "{{{2
let fr = a:0 ? a:1 : input('f=') let fr = a:0 ? a:1 : input('f=')
@@ -50,7 +50,7 @@ function! tablemode#spreadsheet#formula#Add(...) "{{{2
endif endif
endfunction endfunction
function! tablemode#spreadsheet#formula#EvaluateExpr(expr, line) abort "{{{2 function! tablemode#spreadsheet#formula#EvaluateExpr(expr, line) "{{{2
let line = tablemode#utils#line(a:line) let line = tablemode#utils#line(a:line)
let [target, expr] = map(split(a:expr, '='), 'tablemode#utils#strip(v:val)') let [target, expr] = map(split(a:expr, '='), 'tablemode#utils#strip(v:val)')
let cell = substitute(target, '\$', '', '') let cell = substitute(target, '\$', '', '')
@@ -98,32 +98,34 @@ function! tablemode#spreadsheet#formula#EvaluateExpr(expr, line) abort "{{{2
if expr =~# '\$\-\?\d\+,\-\?\d\+' if expr =~# '\$\-\?\d\+,\-\?\d\+'
let expr = substitute(expr, '\$\(\-\?\d\+\),\(\-\?\d\+\)', let expr = substitute(expr, '\$\(\-\?\d\+\),\(\-\?\d\+\)',
\ '\=str2float(tablemode#spreadsheet#cell#GetCells(line, submatch(1), submatch(2)))', 'g') \ '\=tablemode#spreadsheet#cell#GetCells(line, submatch(1), submatch(2))', 'g')
endif endif
if cell =~# ',' if cell =~# ','
if expr =~# '\$' if expr =~# '\$'
let expr = substitute(expr, '\$\(\d\+\)', let expr = substitute(expr, '\$\(\d\+\)',
\ '\=str2float(tablemode#spreadsheet#cell#GetCells(line, row, submatch(1)))', 'g') \ '\=tablemode#spreadsheet#cell#GetCells(line, row, submatch(1))', 'g')
endif endif
call tablemode#spreadsheet#cell#SetCell(eval(expr), line, row, colm) silent! call tablemode#spreadsheet#cell#SetCell(eval(expr), line, row, colm)
else else
let [row, line] = [1, tablemode#spreadsheet#GetFirstRow(line)] let [row, line] = [1, tablemode#spreadsheet#GetFirstRow(line)]
while tablemode#table#IsRow(line) while !s:IsFormulaLine(line)
let texpr = expr if !tablemode#table#IsBorder(line)
if expr =~# '\$' let texpr = expr
let texpr = substitute(texpr, '\$\(\d\+\)', if expr =~# '\$'
\ '\=str2float(tablemode#spreadsheet#cell#GetCells(line, row, submatch(1)))', 'g') let texpr = substitute(texpr, '\$\(\d\+\)',
endif \ '\=tablemode#spreadsheet#cell#GetCells(line, row, submatch(1))', 'g')
endif
call tablemode#spreadsheet#cell#SetCell(eval(texpr), line, row, colm) silent! call tablemode#spreadsheet#cell#SetCell(eval(texpr), line, row, colm)
let row += 1 let row += 1
endif
let line += 1 let line += 1
endwhile endwhile
endif endif
endfunction endfunction
function! tablemode#spreadsheet#formula#EvaluateFormulaLine() abort "{{{2 function! tablemode#spreadsheet#formula#EvaluateFormulaLine() "{{{2
let exprs = [] let exprs = []
let cstring = &commentstring let cstring = &commentstring
let matchexpr = '' let matchexpr = ''

View File

@@ -175,6 +175,12 @@ function! tablemode#table#AddBorder(line) "{{{2
endfunction endfunction
function! tablemode#table#Realign(line) "{{{2 function! tablemode#table#Realign(line) "{{{2
let utree = undotree()
if utree.seq_cur != utree.seq_last
" skip during undo
return
endif
let current_fm = &foldmethod " save foldmethod to be restored let current_fm = &foldmethod " save foldmethod to be restored
setlocal foldmethod=manual " manual foldmethod while table is being aligned setlocal foldmethod=manual " manual foldmethod while table is being aligned
@@ -206,11 +212,11 @@ function! tablemode#table#Realign(line) "{{{2
let lines = tablemode#align#Align(lines) let lines = tablemode#align#Align(lines)
for aline in lines for aline in lines
call setline(aline.lnum, aline.text) undojoin | keepjumps call setline(aline.lnum, aline.text)
endfor endfor
for bline in blines for bline in blines
call tablemode#table#AddBorder(bline) undojoin | keepjumps call tablemode#table#AddBorder(bline)
endfor endfor
" restore foldmethod " restore foldmethod

View File

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting *table-mode.txt* Table Mode for easy table formatting
=============================================================================== ===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 4.7.0 VERSION 4.8.0
Author: Dhruva Sagar <http://dhruvasagar.com/> Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/> License: MIT <http://opensource.org/licenses/MIT/>
@@ -53,11 +53,10 @@ Tableize content:
Move between cells : Move between cells :
Now you can move between cells using table mode motions Now you can move between cells using table mode motions
'<Leader>t[hjkl]' to move left | down | up | right cells respectively. '[|, ]|, {|, }|' to move left | down | up | right cells respectively.
You can use |table-mode-map-prefix| option to define the prefix The left | right motions wrap around the table and move to the next
mapping to be used before 'hjkl'. The left | right motions wrap around | previous row after the last | first cell in the current row if one
the table and move to the next | previous row after the last | first exists.
cell in the current row if one exists.
Manipulation of tables: Manipulation of tables:
Tableize provides 3 easy ways to quickly manipulate tables. Tableize provides 3 easy ways to quickly manipulate tables.
@@ -79,6 +78,7 @@ Manipulation of tables:
using |table-mode-insert-column-before-map| or after the cusor using using |table-mode-insert-column-before-map| or after the cusor using
|table-mode-insert-column-after-map|. |table-mode-insert-column-after-map|.
*table-formulas*
Table Formulas: Table Formulas:
Table Mode now has support for formulas like a spreadsheet. There Table Mode now has support for formulas like a spreadsheet. There
are 2 ways of defining formulas : are 2 ways of defining formulas :
@@ -101,6 +101,7 @@ Table Formulas:
You can evaluate the formula line using |:TableEvalFormulaLine| or the You can evaluate the formula line using |:TableEvalFormulaLine| or the
mapping |<Leader>tfe| defined by the option |table-mode-expr-calc-map| mapping |<Leader>tfe| defined by the option |table-mode-expr-calc-map|
*formula-expressions*
Formula Expressions : Formula Expressions :
Expressions are of the format '$target = formula'. Expressions are of the format '$target = formula'.
@@ -148,7 +149,9 @@ Overview:
|table-mode-verbose| ............ Notify when Enabled/Disabled. |table-mode-verbose| ............ Notify when Enabled/Disabled.
|table-mode-corner| ............. Set corner character. |table-mode-corner| ............. Set corner character.
|table-mode-separator| .......... Set separator character. |table-mode-separator| .......... Set separator character.
|table-mode-fillchar| ........... Set table fillchar character. |table-mode-separator-map| ...... Set separator mapping.
|table-mode-fillchar| ........... Set table border fillchar character.
|table-mode-header-fillchar| .... Set table header border fillchar character.
|table-mode-map-prefix| ......... Set prefix for table mode commands. |table-mode-map-prefix| ......... Set prefix for table mode commands.
|table-mode-toggle-map| ......... Set table mode toggle mapping. |table-mode-toggle-map| ......... Set table mode toggle mapping.
|table-mode-always-active| ...... Set table mode to always enabled. |table-mode-always-active| ...... Set table mode to always enabled.
@@ -185,6 +188,8 @@ Overview:
|table-mode-syntax| ............. Control table mode syntax |table-mode-syntax| ............. Control table mode syntax
|table-mode-auto-align| ......... Set if the table mode should auto |table-mode-auto-align| ......... Set if the table mode should auto
align as you type align as you type
|table-mode-tableize-auto-border| Set if tableize adds row borders
|table-mode-ignore-align| ....... Set to ignore alignment characters
g:loaded_table_mode *table-mode-loaded* g:loaded_table_mode *table-mode-loaded*
Use this option to disable the plugin: > Use this option to disable the plugin: >
@@ -208,7 +213,17 @@ g:table_mode_separator *table-mode-separator*
This option also defines the trigger to be used to start creating a This option also defines the trigger to be used to start creating a
table row in insert mode. table row in insert mode.
g:table_mode_separator_map *table-mode-separator-map*
Use this option to define the mapping to be used for the table separator. >
let g:table_mode_separator_map = '<Bar>'
<
g:table_mode_fillchar *table-mode-fillchar* g:table_mode_fillchar *table-mode-fillchar*
Use this option to define the table border fill character: >
let g:table_mode_fillchar = '-'
<
g:table_mode_header_fillchar *table-mode-header-fillchar*
Use this option to define the table header border fill character: > Use this option to define the table header border fill character: >
let g:table_mode_fillchar = '-' let g:table_mode_fillchar = '-'
< <
@@ -355,6 +370,22 @@ g:table_mode_update_time *table-mode-update-time*
let g:table_mode_update_time = 500 let g:table_mode_update_time = 500
< <
g:table_mode_disable_tableize_mappings *table-mode-disable-tableize-mappings*
Disables mappings for tableize. >
let g:table_mode_disable_tableize_mappings = 0
<
*table-mode-tableize-auto-border*
g:table_mode_tableize_auto_border
Enables adding row borders to tables when created using tableize. >
let g:table_mode_tableize_auto_border = 0
<
*table-mode-ignore-align*
g:table_mode_ignore_align
If enabled, ignores alignment characters on the header border and always
left aligns. >
let g:table_mode_ignore_align = 0
<
=============================================================================== ===============================================================================
MAPPINGS *table-mode-mappings* MAPPINGS *table-mode-mappings*
@@ -514,4 +545,3 @@ REPORT ISSUES *table-mode-report-issues*
If you discover any issues, please report them at If you discover any issues, please report them at
http://github.com/dhruvasagar/vim-table-mode/issues. http://github.com/dhruvasagar/vim-table-mode/issues.
vim:tw=78:ts=8:ft=help:norl:ai:et

View File

@@ -18,6 +18,13 @@ endfunction
call s:SetGlobalOptDefault('table_mode_corner', '+') call s:SetGlobalOptDefault('table_mode_corner', '+')
call s:SetGlobalOptDefault('table_mode_verbose', 1) call s:SetGlobalOptDefault('table_mode_verbose', 1)
call s:SetGlobalOptDefault('table_mode_separator', '|') call s:SetGlobalOptDefault('table_mode_separator', '|')
" '|' is a special character, we need to map <Bar> 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 = '<Bar>' | 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 = '<Bar>' | endif
call s:SetGlobalOptDefault('table_mode_escaped_separator_regex', '\V\C\\\@1<!'.escape(g:table_mode_separator, '\')) call s:SetGlobalOptDefault('table_mode_escaped_separator_regex', '\V\C\\\@1<!'.escape(g:table_mode_separator, '\'))
call s:SetGlobalOptDefault('table_mode_fillchar', '-') call s:SetGlobalOptDefault('table_mode_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_header_fillchar', '-') call s:SetGlobalOptDefault('table_mode_header_fillchar', '-')
@@ -28,6 +35,7 @@ call s:SetGlobalOptDefault('table_mode_delimiter', ',')
call s:SetGlobalOptDefault('table_mode_corner_corner', '|') call s:SetGlobalOptDefault('table_mode_corner_corner', '|')
call s:SetGlobalOptDefault('table_mode_align_char', ':') call s:SetGlobalOptDefault('table_mode_align_char', ':')
call s:SetGlobalOptDefault('table_mode_disable_mappings', 0) 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', '{<Bar>') call s:SetGlobalOptDefault('table_mode_motion_up_map', '{<Bar>')
call s:SetGlobalOptDefault('table_mode_motion_down_map', '}<Bar>') call s:SetGlobalOptDefault('table_mode_motion_down_map', '}<Bar>')
@@ -52,27 +60,17 @@ call s:SetGlobalOptDefault('table_mode_tableize_d_map', '<Leader>T')
call s:SetGlobalOptDefault('table_mode_syntax', 1) call s:SetGlobalOptDefault('table_mode_syntax', 1)
call s:SetGlobalOptDefault('table_mode_auto_align', 1) call s:SetGlobalOptDefault('table_mode_auto_align', 1)
call s:SetGlobalOptDefault('table_mode_update_time', 500) 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)
function! s:TableEchoCell() "{{{1
if tablemode#table#IsRow('.')
echomsg '$' . tablemode#spreadsheet#RowNr('.') . ',' . tablemode#spreadsheet#ColumnNr('.')
endif
endfunction
" Define Commands & Mappings {{{1
if !g:table_mode_always_active "{{{2 if !g:table_mode_always_active "{{{2
exec "nnoremap <silent>" g:table_mode_map_prefix . g:table_mode_toggle_map ":<C-U>call tablemode#Toggle()<CR>" exec "nnoremap <silent>" g:table_mode_map_prefix . g:table_mode_toggle_map ":<C-U>call tablemode#Toggle()<CR>"
command! -nargs=0 TableModeToggle call tablemode#Toggle() command! -nargs=0 TableModeToggle call tablemode#Toggle()
command! -nargs=0 TableModeEnable call tablemode#Enable() command! -nargs=0 TableModeEnable call tablemode#Enable()
command! -nargs=0 TableModeDisable call tablemode#Disable() command! -nargs=0 TableModeDisable call tablemode#Disable()
else else
let table_mode_separator_map = g:table_mode_separator execute "inoremap <silent> " . g:table_mode_separator_map . ' ' .
" '|' is a special character, we need to map <Bar> instead \ g:table_mode_separator_map_target . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
if g:table_mode_separator ==# '|' | let table_mode_separator_map = '<Bar>' | endif
execute "inoremap <silent> " . table_mode_separator_map . ' ' .
\ table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
unlet table_mode_separator_map
endif endif
" }}}2 " }}}2
@@ -82,9 +80,7 @@ command! TableAddFormula call tablemode#spreadsheet#formula#Add()
command! TableModeRealign call tablemode#table#Realign('.') command! TableModeRealign call tablemode#table#Realign('.')
command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine() command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine()
" '|' is a special character, we need to map <Bar> instead execute 'inoremap <silent> <Plug>(table-mode-tableize)' g:table_mode_separator_map . '<Esc>:call tablemode#TableizeInsertMode()<CR>a'
if g:table_mode_separator ==# '|' | let separator_map = '<Bar>' | endif
execute 'inoremap <silent> <Plug>(table-mode-tableize)' separator_map . '<Esc>:call tablemode#TableizeInsertMode()<CR>a'
nnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR> nnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
xnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR> xnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
@@ -110,17 +106,19 @@ nnoremap <silent> <Plug>(table-mode-insert-column-after) :<C-U>call tablemode#sp
nnoremap <silent> <Plug>(table-mode-add-formula) :call tablemode#spreadsheet#formula#Add()<CR> nnoremap <silent> <Plug>(table-mode-add-formula) :call tablemode#spreadsheet#formula#Add()<CR>
nnoremap <silent> <Plug>(table-mode-eval-formula) :call tablemode#spreadsheet#formula#EvaluateFormulaLine()<CR> nnoremap <silent> <Plug>(table-mode-eval-formula) :call tablemode#spreadsheet#formula#EvaluateFormulaLine()<CR>
nnoremap <silent> <Plug>(table-mode-echo-cell) :call <SID>TableEchoCell()<CR> nnoremap <silent> <Plug>(table-mode-echo-cell) :call tablemode#spreadsheet#EchoCell()<CR>
nnoremap <silent> <Plug>(table-mode-sort) :call tablemode#spreadsheet#Sort('')<CR> nnoremap <silent> <Plug>(table-mode-sort) :call tablemode#spreadsheet#Sort('')<CR>
if !hasmapto('<Plug>(table-mode-tableize)') if !g:table_mode_disable_tableize_mappings
exec "nmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)" if !hasmapto('<Plug>(table-mode-tableize)')
exec "xmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)" exec "nmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)"
endif exec "xmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)"
endif
if !hasmapto('<Plug>(table-mode-tableize-delimiter)') if !hasmapto('<Plug>(table-mode-tableize-delimiter)')
exec "xmap" g:table_mode_tableize_d_map "<Plug>(table-mode-tableize-delimiter)" exec "xmap" g:table_mode_tableize_d_map "<Plug>(table-mode-tableize-delimiter)"
endif
endif endif
augroup TableMode "{{{1 augroup TableMode "{{{1

View File

@@ -1,5 +1,6 @@
let g:table_mode_corner = '+' let g:table_mode_corner = '+'
let g:table_mode_separator = '|' let g:table_mode_separator = '|'
let g:table_mode_separator_map = '<Bar>'
let g:table_mode_escaped_separator_regex = '\V\C\\\@1<!|' let g:table_mode_escaped_separator_regex = '\V\C\\\@1<!|'
let g:table_mode_fillchar = '-' let g:table_mode_fillchar = '-'
let g:table_mode_header_fillchar = '-' let g:table_mode_header_fillchar = '-'
@@ -34,3 +35,5 @@ let g:table_mode_tableize_d_map = '<Leader>T'
let g:table_mode_syntax = 1 let g:table_mode_syntax = 1
let g:table_mode_auto_align = 1 let g:table_mode_auto_align = 1
let g:table_mode_update_time = 500 let g:table_mode_update_time = 500
let g:table_mode_tableize_auto_border = 0
let g:table_mode_ignore_align = 0