Compare commits

...

58 Commits

Author SHA1 Message Date
Dhruva Sagar
e4365bde02 Fix duplicate tags 2024-03-14 00:09:19 +05:30
Dhruva Sagar
5f2f94096b Reformat docs 2024-03-14 00:02:47 +05:30
Dhruva Sagar
319e3537de Merge pull request #233 from kyoh86/disable-mappings
Support new option "disable_mappings"
2024-03-13 20:30:30 +05:30
kyoh86
76b72a5ae3 fix doc format 2024-03-13 20:10:12 +09:00
kyoh86
e7695fad5c Support disable all default mappings 2024-01-18 15:25:38 +09:00
Dhruva Sagar
4ff8de2ac9 Update README 2023-10-29 10:33:00 +05:30
Dhruva Sagar
9ac3580839 Improve CI 2023-10-24 12:41:32 +05:30
Dhruva Sagar
1ba38e3061 Merge pull request #229 from dhruvasagar/feature/switch-to-vim-testify
Switch to vim testify
2023-10-24 12:40:45 +05:30
Dhruva Sagar
81fb86a019 Fixed Build Badge 2023-10-24 12:37:25 +05:30
Dhruva Sagar
7526011c93 Improve github action 2023-10-24 12:36:10 +05:30
Dhruva Sagar
0a132f8377 Fix tests, remove vim & windows 2023-10-24 12:35:12 +05:30
Dhruva Sagar
e66a13b7ed Improved testing 2023-08-31 22:05:47 +05:30
Dhruva Sagar
ed55bc2828 Fix tests for neovim 2023-08-31 21:43:51 +05:30
Dhruva Sagar
0dd8aff6d1 Improve concurrency to ensure tests run on all environments 2023-03-01 18:53:27 +05:30
Dhruva Sagar
d9bd7c6de1 Try out with nightly version of vim / neovim 2023-03-01 13:35:51 +05:30
Dhruva Sagar
d9cf433893 Quit VIM after running tests 2023-03-01 13:06:55 +05:30
Dhruva Sagar
022b2d41b3 Fix vimrc location 2023-03-01 13:04:25 +05:30
Dhruva Sagar
7ace092bf5 Improved packpath 2023-03-01 12:59:44 +05:30
Dhruva Sagar
3ea394ff83 Looks promising 2023-03-01 11:54:16 +05:30
Dhruva Sagar
0df034ed2e Back to matrix 2023-03-01 11:18:45 +05:30
Dhruva Sagar
021d8bf025 Try vimrc 2023-03-01 11:13:34 +05:30
Dhruva Sagar
2868a889c1 Remove git from workflow 2023-03-01 11:07:04 +05:30
Dhruva Sagar
f5df58b089 Try again 2023-03-01 11:04:33 +05:30
Dhruva Sagar
4addf0b92e Attempting to use a docker container instead 2023-03-01 09:11:07 +05:30
Dhruva Sagar
8873d12158 Try with github workspace 2023-03-01 08:56:44 +05:30
Dhruva Sagar
8f3893b7b1 Add packloadall 2023-03-01 08:47:12 +05:30
Dhruva Sagar
acaad2ef26 Simplified packpath 2023-03-01 08:42:44 +05:30
Dhruva Sagar
9cbf8283ba Fix Plugin Paths 2023-03-01 08:38:38 +05:30
Dhruva Sagar
88824e5840 Try to add plugins to vim's packpath 2023-03-01 08:35:40 +05:30
Dhruva Sagar
e117bcdc78 Add checkout vim-testify step to ci workflow 2023-03-01 07:58:34 +05:30
Dhruva Sagar
7ec0b83dbd Rewrite tests with vim-testify 2023-03-01 07:22:48 +05:30
Dhruva Sagar
9555a3e6e5 Merge pull request #216 from camfowler/master
Support optional newline after tables for formula
2022-10-20 15:39:02 +05:30
Cameron Fowler
33ea774b69 Support optional newline after tables for formula
Fixes #86

This allows the formula line to be evaluated, even if there is a single
empty line after the table. The "empty" line is allowed to contain
whitespace, but nothing else.

The formula will evaluate if triggered on the table, the empty line, or
the formula lines.
2022-07-21 14:10:35 +12:00
Dhruva Sagar
f47287df37 Merge pull request #215 from clarkshaeffer/master
README Installations reformat with Vim 8+
2022-05-28 10:20:08 +05:30
Clark
f65c2921c0 README Installations reformat with Vim 8+
Some reformatting and markdown / code chunk cleanup for the installation section, including installations instructions with Vim 8+ native package manager.
2022-05-27 15:45:19 -07:00
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
50 changed files with 1930 additions and 1412 deletions

2
.github/FUNDING.yml vendored
View File

@@ -1,6 +1,6 @@
# 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
open_collective: vim-table-mode
ko_fi: # Replace with a single Ko-fi username

46
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: CI
on:
push:
branches:
- master
pull_request:
branches:
- master
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
tests:
name: Vim Table Mode Tests
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
with:
path: pack/plugins/start/vim-table-mode
- name: Checkout vim-testify
uses: actions/checkout@v3
with:
repository: dhruvasagar/vim-testify
path: pack/plugins/start/vim-testify
- name: Install Vim or neovim
uses: rhysd/action-setup-vim@v1
id: vim
with:
neovim: true
version: nightly
- name: Run unit tests
env:
VIM: ${{ steps.vim.outputs.executable }}
run: |
cd ${{ github.workspace }}/pack/plugins/start/vim-table-mode
echo "set packpath+=${{ github.workspace }}" > vimrc
${VIM} --headless -u vimrc +TestifySuite +qall

View File

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

View File

@@ -1,5 +1,41 @@
# 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
* Added a fix for markdown commentstring

View File

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

View File

@@ -1,24 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
blankslate (2.1.2.4)
parslet (1.5.0)
blankslate (~> 2.0)
rake (12.3.3)
thor (0.18.1)
vim-flavor (1.1.3)
parslet (~> 1.0)
thor (~> 0.14)
PLATFORMS
ruby
DEPENDENCIES
rake
vim-flavor (~> 1.1)
RUBY VERSION
ruby 2.5.3p105
BUNDLED WITH
2.0.1

251
README.md
View File

@@ -1,33 +1,39 @@
# VIM Table Mode v4.7.3 [![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.1 [![Build](https://github.com/dhruvasagar/vim-table-mode/actions/workflows/ci.yml/badge.svg)](https://github.com/dhruvasagar/vim-table-mode/actions/workflows/ci.yml)
An awesome automatic table creator & formatter allowing one to create neat
tables as you type.
## Getting Started
## Getting Started
### Installation
There are several ways to do this
#### <a href="https://www.danielfranklin.id.au/vim-8-package-management/">Vim 8+ native package manager</a>
1. I recommend installing <a
href="https://github.com/Shougo/neobundle.vim">NeoBundle</a> and then just
add `NeoBundle 'dhruvasagar/vim-table-mode'` to your ~/.vimrc
clone into `.vim/pack/plugins/start` (the `plugins` folder can have any name)
2. If you are using <a
href="https://github.com/tpope/vim-pathogen">pathogen.vim</a>, then
add a git submodule for your plugin:
Add `packloadall` in your `~/.vimrc`.
#### <a href="https://github.com/Shougo/neobundle.vim">NeoBundle</a>
Add `NeoBundle 'dhruvasagar/vim-table-mode'` to your `~/.vimrc`.
#### <a href="https://github.com/tpope/vim-pathogen">pathogen.vim</a>
Add a git submodule for your plugin:
```sh
$ cd ~/.vim
$ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode
```
3. Copy all files under autoload/, plugin/, doc/ to respective
~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or
vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and
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.
Copy all files under `autoload/`, `plugin/`, and `doc/` to respective
`~/.vim/autoload/`, `~/.vim/plugin` and `~/.vim/doc` under UNIX, or
`vimfiles/autoload/`, `vimfiles/plugin/` and `vimfiles/doc` under WINDOWS and
restart Vim.
#### <a href="https://github.com/junegunn/vim-plug">vim-plug</a>
Add `Plug 'dhruvasagar/vim-table-mode'` to your `~/.vimrc`.
### Creating table on-the-fly
@@ -35,6 +41,7 @@ To start using the plugin in the on-the-fly mode use `:TableModeToggle` mapped t
Tip:
You can use the following to quickly enable / disable table mode in insert mode by using `||` or `__`:
> ```vim
> function! s:isAtStartOfLine(mapping)
> let text_before_cursor = getline('.')[0 : col('.')-1]
@@ -42,7 +49,7 @@ You can use the following to quickly enable / disable table mode in insert mode
> let comment_pattern = '\V' . escape(substitute(&l:commentstring, '%s.*$', '', ''), '\')
> return (text_before_cursor =~? '^' . ('\v(' . comment_pattern . '\v)?') . '\s*\v' . mapping_pattern . '\v$')
> endfunction
>
>
> inoreabbrev <expr> <bar><bar>
> \ <SID>isAtStartOfLine('\|\|') ?
> \ '<c-o>:TableModeEnable<cr><bar><space><bar><left><left>' : '<bar><bar>'
@@ -116,9 +123,18 @@ To get ReST-compatible tables use
Markdown and ReST filetypes have automatically configured corners.
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
`g:table_mode_align_char` option.
> 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
`g:table_mode_align_char` option.
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
@@ -127,132 +143,139 @@ it using `:TableModeRealign` or using the default mapping
### Formatting existing content into a table
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 typing on the fly,
formatting existing content into a table is equally
simple. You can visually select multiple lines and call `:Tableize` on it.
Alternatively, the mapping <kbd>\<Leader\>tt</kbd> can be used (defined by the
option `g:table_mode_tableize_map`). This converts CSV (Comma-separated
Values) data into a table.
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 typing on the fly,
formatting existing content into a table is equally
simple. You can visually select multiple lines and call `:Tableize` on it.
Alternatively, the mapping <kbd>\<Leader\>tt</kbd> can be used (defined by the
option `g:table_mode_tableize_map`). This converts CSV (Comma-separated
Values) data into a table.
If however you wish to use a different delimiter, you can use the command
`:Tableize/{pattern}` in a similar fashion as you tabulate (e.g.
`:Tableize/;` uses ';' as the delimiter) or use the mapping <kbd>\<Leader\>T</kbd>
(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.
If however you wish to use a different delimiter, you can use the command
`:Tableize/{pattern}` in a similar fashion as you tabulate (e.g.
`:Tableize/;` uses ';' as the delimiter) or use the mapping <kbd>\<Leader\>T</kbd>
(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.
`:Tableize` also accepts a range. Call it by giving
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
next `[count]` lines in standard vim style.
`:Tableize` also accepts a range. Call it by giving
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
next `[count]` lines in standard vim style.
### Moving around
### Moving around
Now you can move between cells using table mode motions <kbd>[|</kbd>,
<kbd>]|</kbd>, <kbd>{|</kbd> & <kbd>}|</kbd> to move left | right | up |
down cells respectively. The left | right motions wrap around the table
and move to the next | previous row after the last | first cell in the
current row if one exists.
Now you can move between cells using table mode motions <kbd>[|</kbd>,
<kbd>]|</kbd>, <kbd>{|</kbd> & <kbd>}|</kbd> to move left | right | up |
down cells respectively. The left | right motions wrap around the table
and move to the next | previous row after the last | first cell in the
current row if one exists.
### Manipulating Table
- **Cell Text Object** :
- **Cell Text Object** :
Tableize provides a text object for manipulating table cells. Following
the vim philosophy the you have <kbd>i|</kbd> & <kbd>a|</kbd> for the
inner and around (including the immediate right table separator) the
table cell.
Tableize provides a text object for manipulating table cells. Following
the vim philosophy the you have <kbd>i|</kbd> & <kbd>a|</kbd> for the
inner and around (including the immediate right table separator) the
table cell.
- **Delete Row** :
- **Delete Row** :
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
you are within a table row). This can be preceeded with a `[count]` to
delete multiple rows as per Vim command grammar.
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
you are within a table row). This can be preceeded with a `[count]` to
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
`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
`[count]` to delete multiple columns.
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
(provided you are within a table row), this can also be preceeded with a
`[count]` to delete multiple columns.
- **Insert Column** :
- **Insert Column** :
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
cursor (provided you are within a table row). Of course you can use the
<kbd>\<Leader\>tiC</kbd> mapping defined by
`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
columns.
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
cursor (provided you are within a table row). Of course you can use the
<kbd>\<Leader\>tiC</kbd> mapping defined by
`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
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
### Table Formulas
Table Mode now has support for formulas like a spreadsheet. There are 2 ways
of defining formulas :
Table Mode now has support for formulas like a spreadsheet. There are 2 ways
of defining formulas :
- 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
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
one will be created with the input formula taking the current cell as the
target cell. The formula line is evaluated immidiately to reflect the
results.
- 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
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
one will be created with the input formula taking the current cell as the
target cell. The formula line is evaluated immidiately to reflect the
results.
- You can directly add / manipulate formula expressions in the formula line.
The formula line is a commented line right after the table, beginning with
'tmf:' (table mode formula). eg) `# tmf: $3=$2*$1`. You can add multiple
formulas on the line separated with a ';' eg) `# tmf: $3=$2*$1;$4=$3/3.14`
- You can directly add / manipulate formula expressions in the formula line.
The formula line is a commented line right after the table, or optionally
separated from the table by a single empty line. It begins with 'tmf:'
(table mode formula). eg) `# tmf: $3=$2*$1`. You can add multiple 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
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.
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`)
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>
### Formula Expressions
Expressions are of the format `$target = formula`.
Expressions are of the format `$target = formula`.
- The `target` can be of 2 forms :
- The `target` can be of 2 forms :
- `$n`: This matches the table column number `n`. So the `formula` would
be evaluated for each cell in that column and the result would be placed
in it. You can use negative indice to represent column relative to the
last, -1 being the last.
- `$n`: This matches the table column number `n`. So the `formula` would
be evaluated for each cell in that column and the result would be placed
in it. You can use negative indice to represent column relative to the
last, -1 being the last.
- `$n,m`: This matches the table cell n,m (row, column). So in this case
the formula would be evaluated and the result will be placed in this
cell. You can also use negative values to refer to cells relative to
the size, -1 being the last (row or column).
- `$n,m`: This matches the table cell n,m (row, column). So in this case
the formula would be evaluated and the result will be placed in this
cell. You can also use negative values to refer to cells relative to
the size, -1 being the last (row or column).
- The `formula` can be a simple mathematical expression involving cells
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
mode also provides 2 special functions `Sum` and `Average`. Both these
functions take a range as input. A range can be of two forms:
- The `formula` can be a simple mathematical expression involving cells
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
mode also provides 2 special functions `Sum` and `Average`. Both these
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`
through `r2`. If `r2` is negative it represents `r2` rows above the
current row (of the target cell).
- `r1:r2`: This represents cells in the current column from row `r1`
through `r2`. If `r2` is negative it represents `r2` rows above the
current row (of the target cell).
- `r1,c1:r2,c2`: This represents cells in the table from cell r1,c1
through cell r2,c2 (row, column).
- `r1,c1:r2,c2`: This represents cells in the table from cell r1,c1
through cell r2,c2 (row, column).
- Examples :
- `$2 = $1 * $1`
- `$2 = pow($1, 5)` NOTE: Remember to put space between the $1, and 5
here otherwise it will be treated like a table cell.
- `$2 = $1 / $1,3`
- `$1,2 = $1,1 * $1,1`
- `$5,1 = Sum(1:-1)`
- `$5,1 = float2nr(Sum(1:-1))`
- `$5,3 = Sum(1,2:5,2)`
- `$5,3 = Sum(1,2:5,2)/$5,1`
- `$5,3 = Average(1,2:5,2)/$5,1`
- Examples :
- `$2 = $1 * $1`
- `$2 = pow($1, 5)` NOTE: Remember to put space between the $1, and 5
here otherwise it will be treated like a table cell.
- `$2 = $1 / $1,3`
- `$1,2 = $1,1 * $1,1`
- `$5,1 = Sum(1:-1)`
- `$5,1 = float2nr(Sum(1:-1))`
- `$5,3 = Sum(1,2:5,2)`
- `$5,3 = Sum(1,2:5,2)/$5,1`
- `$5,3 = Average(1,2:5,2)/$5,1`
## Demo
@@ -260,6 +283,7 @@ it using `:TableModeRealign` or using the default mapping
src="https://raw.github.com/axil/vim-table-mode/master/youtube.png"/></a>
## Change Log
See <a
href="https://github.com/dhruvasagar/vim-table-mode/blob/master/CHANGELOG.md">
CHANGELOG.md </a>
@@ -267,16 +291,19 @@ CHANGELOG.md </a>
## Contributing
### Reporting an Issue :
- Use <a href="https://github.com/dhruvasagar/vim-table-mode/issues">Github
Issue Tracker</a>
### Contributing to code :
- Fork it.
- Commit your changes and give your commit message some love.
- Push to your fork on github.
- Open a Pull Request.
## Credit
I must thank Tim Pope for inspiration. The initial concept was created by him
named <a href="https://gist.github.com/tpope/287147">cucumbertables.vim</a>.

View File

@@ -1,13 +0,0 @@
#!/usr/bin/env rake
task :ci => [:dump, :test]
task :dump do
sh 'vim --version'
end
task :test do
sh 'bundle exec vim-flavor test'
end
task :default => :test

View File

@@ -1 +0,0 @@
kana/vim-vspec (1.1.2)

View File

@@ -22,13 +22,9 @@ function! s:UnMap(map, mode) "{{{2
endfunction
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 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-down)', g:table_mode_motion_down_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-sort)', g:table_mode_sort_map, 'n')
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_down_map, 'n')
call s:UnMap(g:table_mode_motion_left_map, 'n')
@@ -75,7 +71,8 @@ function! s:ToggleSyntax() "{{{2
if tablemode#IsActive()
exec 'syntax match Table'
\ '/' . 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 TableColumnAlign /:/ contained
syntax match TableBorder /[\-+]\+/ contained
@@ -83,6 +80,32 @@ function! s:ToggleSyntax() "{{{2
hi! link TableBorder Delimiter
hi! link TableSeparator Delimiter
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
syntax clear Table
syntax clear TableBorder
@@ -174,7 +197,7 @@ endfunction
function! tablemode#TableizeInsertMode() "{{{2
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('.')
normal! A
elseif getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator)
@@ -207,7 +230,7 @@ endfunction
function! tablemode#TableizeRange(...) range "{{{2
let lnum = a:firstline
let total = (a:lastline - a:firstline + 1)
echom total
" echom total
let cntr = 1
while cntr <= total
call s:Tableizeline(lnum, a:1)
@@ -238,3 +261,7 @@ function! tablemode#TableizeByDelimiter() "{{{2
exec line("'<") . ',' . line("'>") . "call tablemode#TableizeRange('/' . delim)"
endif
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
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))
let tlnum = lines[idx].lnum

View File

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

View File

@@ -201,7 +201,7 @@ function! tablemode#spreadsheet#cell#TextObject(inner) "{{{2
endif
endfunction
function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
let l:count = a:0 ? a:1 : v:count1
let l:count = a:0 ? a:1 : (v:count + 1)
if tablemode#table#IsRow('.')
for ii in range(l:count)
if a:direction ==# 'l'

View File

@@ -1,12 +1,16 @@
" Private Functions {{{1
function! s:IsHTMLComment(line) "{{{2
return getline(a:line) =~# '^\s*<!--'
endfunction
function! s:IsFormulaLine(line) "{{{2
return getline(a:line) =~# 'tmf: '
endfunction
function! s:IsHTMLComment(line) "{{{2
return !s:IsFormulaLine(a:line) && getline(a:line) =~# '^\s*<!--'
endfunction
function! s:IsBlankLine(line) "{{{2
return getline(a:line) =~# '^\s*$'
endfunction
" Public Functions {{{1
function! tablemode#spreadsheet#formula#Add(...) "{{{2
let fr = a:0 ? a:1 : input('f=')
@@ -50,7 +54,7 @@ function! tablemode#spreadsheet#formula#Add(...) "{{{2
endif
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 [target, expr] = map(split(a:expr, '='), 'tablemode#utils#strip(v:val)')
let cell = substitute(target, '\$', '', '')
@@ -98,15 +102,15 @@ function! tablemode#spreadsheet#formula#EvaluateExpr(expr, line) abort "{{{2
if 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
if cell =~# ','
if expr =~# '\$'
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
call tablemode#spreadsheet#cell#SetCell(eval(expr), line, row, colm)
silent! call tablemode#spreadsheet#cell#SetCell(eval(expr), line, row, colm)
else
let [row, line] = [1, tablemode#spreadsheet#GetFirstRow(line)]
while !s:IsFormulaLine(line)
@@ -114,10 +118,10 @@ function! tablemode#spreadsheet#formula#EvaluateExpr(expr, line) abort "{{{2
let texpr = expr
if expr =~# '\$'
let texpr = substitute(texpr, '\$\(\d\+\)',
\ '\=str2float(tablemode#spreadsheet#cell#GetCells(line, row, submatch(1)))', 'g')
\ '\=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
endif
let line += 1
@@ -125,7 +129,7 @@ function! tablemode#spreadsheet#formula#EvaluateExpr(expr, line) abort "{{{2
endif
endfunction
function! tablemode#spreadsheet#formula#EvaluateFormulaLine() abort "{{{2
function! tablemode#spreadsheet#formula#EvaluateFormulaLine() "{{{2
let exprs = []
let cstring = &commentstring
let matchexpr = ''
@@ -144,6 +148,16 @@ function! tablemode#spreadsheet#formula#EvaluateFormulaLine() abort "{{{2
let fline = line + 1
if s:IsHTMLComment(fline) | let fline += 1 | endif
if tablemode#table#IsBorder(fline) | let fline += 1 | endif
if s:IsBlankLine(fline) | let fline += 1 | endif
while s:IsFormulaLine(fline)
let exprs += split(matchstr(getline(fline), matchexpr), ';')
let fline += 1
endwhile
elseif s:IsBlankLine('.') " We're possibly in the blank line above the formula line
let fline = line('.') + 1
let line = line('.') - 1
if s:IsHTMLComment(fline) | let fline += 1 | endif
if tablemode#table#IsBorder(line) | let line -= 1 | endif
while s:IsFormulaLine(fline)
let exprs += split(matchstr(getline(fline), matchexpr), ';')
let fline += 1
@@ -153,6 +167,7 @@ function! tablemode#spreadsheet#formula#EvaluateFormulaLine() abort "{{{2
let line = line('.') - 1
while s:IsFormulaLine(line) | let fline = line | let line -= 1 | endwhile
if s:IsHTMLComment(line) | let line -= 1 | endif
if s:IsBlankLine(line) | let line -= 1 | endif
if tablemode#table#IsBorder(line) | let line -= 1 | endif
if tablemode#table#IsRow(line)
" let exprs = split(matchstr(getline('.'), matchexpr), ';')

View File

@@ -175,6 +175,12 @@ function! tablemode#table#AddBorder(line) "{{{2
endfunction
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
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)
for aline in lines
call setline(aline.lnum, aline.text)
undojoin | keepjumps call setline(aline.lnum, aline.text)
endfor
for bline in blines
call tablemode#table#AddBorder(bline)
undojoin | keepjumps call tablemode#table#AddBorder(bline)
endfor
" restore foldmethod

View File

@@ -1,527 +1,534 @@
*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
VERSION 4.7.3
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 4.8.1
Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/>
Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/>
===============================================================================
CONTENTS *table-mode-contents*
CONTENTS *table-mode-contents*
1. Introduction .................... |table-mode-introduction|
2. Getting Started ................. |table-mode-getting-started|
3. Options ......................... |table-mode-options|
4. Mappings ........................ |table-mode-mappings|
5. Commands ........................ |table-mode-commands|
6. Contributing .................... |table-mode-contributing|
7. Report Issues ................... |table-mode-report-issues|
1. Introduction .................... |table-mode-introduction|
2. Getting Started ................. |table-mode-getting-started|
3. Options ......................... |table-mode-options|
4. Mappings ........................ |table-mode-mappings|
5. Commands ........................ |table-mode-commands|
6. Contributing .................... |table-mode-contributing|
7. Report Issues ................... |table-mode-report-issues|
===============================================================================
INTRODUCTION *table-mode-introduction*
INTRODUCTION *table-mode-introduction*
Table Mode is simple plugin that makes building tables in vim a breeze. It is
inspired from tpope's auto aligning script for creating tables in vim -
https://gist.github.com/tpope/287147, which in turn utilizes the Tabular
Plugin.
Table Mode is simple plugin that makes building & manipulating tables in vim
a breeze. It is inspired from tpope's auto aligning script for creating tables
in vim - https://gist.github.com/tpope/287147, which in turn utilizes the
Tabular Plugin
===============================================================================
GETTING STARTED *table-mode-getting-started*
GETTING STARTED *table-mode-getting-started*
Create Table on the fly:
Using Table Mode is dead simple. You simply start typing on a new line
with the table separator - |table-mode-separator|, and you just type
away! The plugin does the rest automatically for you as you type. With
each additional separator you add, it aligns the table properly,
without having to do anything else.
Using Table Mode is dead simple. You simply start typing on a new line
with the table separator - |table-mode-separator|, and you just type away!
The plugin does the rest automatically for you as you type. With each
additional separator you add, it aligns the table properly, without having
to do anything else.
Table Mode now supports gfm style tables and allows to define column
alignments with the aid of placing ':' (configured using
|g:table_mode_align_char|) on the table header border appropriately to
align content left or right.
Table Mode now supports gfm style tables and allows to define column
alignments with the aid of placing ':' (configured using
|g:table_mode_align_char|) on the table header border appropriately to
align content left or right.
The table mode is disabled by default and you can enter table mode
using |table-mode-toggle-map| or you can also enable it permanently
using |table-mode-always-active| if you wish though not recommended.
The table mode is disabled by default and you can enter table mode using
|table-mode-toggle-map| or you can also enable it permanently using
|table-mode-always-active| if you wish though not recommended.
Table Mode allows for creation of tables within comments, it looks at
the 'commentstring' setting to identify whether the current line is
commented.
Table Mode allows for creation of tables within comments, it looks at
the 'commentstring' setting to identify whether the current line is
commented.
Tableize content:
Table Mode enables conversion of delimited text into tables. Again
like table creation, this is also applicable within comments.
Table Mode enables conversion of delimited text into tables. Again like
table creation, this is also applicable within comments.
Move between cells :
Now you can move between cells using table mode motions
'[|, ]|, {|, }|' to move left | down | up | right cells respectively.
The left | right motions wrap around the table and move to the next
| previous row after the last | first cell in the current row if one
exists.
Move between cells using table mode motions `[|`, `]|`, `{|`, `}|` to move
`left` | `down` | `up` | `right` cells respectively. The `left` | `right`
motions wrap around the table and move to the `next` | `previous` row
after the `last` | `first` cell in the current row if one exists.
Manipulation of tables:
Tableize provides 3 easy ways to quickly manipulate tables.
Tableize provides 3 easy ways to quickly manipulate tables.
1. Cell Text Object : A text object for table cell
defined by |table-mode-cell-text-object|. You can use it with an
operator (d,c,y) to manipulate it easily. If you delete the cell using
this, it will delete the table separator along with it so if you type
out some new stuff, you will have to re-add it, which triggers a
re-alignment and the table would be formatted again.
2. Delete Column : Delete an entire table column using
|table-mode-delete-column-map| .
3. Delete Row : Delete an entire table row using
|table-mode-delete-row-map|
4. Insert Column : Insert a table column either before the cursor
using |table-mode-insert-column-before-map| or after the cusor using
|table-mode-insert-column-after-map|.
1. Cell Text Object : A text object for table cell defined by
|table-mode-cell-text-object|. You can use it with an operator (d,c,y)
to manipulate it easily. If you delete the cell using this, it will
delete the table separator along with it so if you type out some new
stuff, you will have to re-add it, which triggers a re-alignment and
the table would be formatted again
2. Delete Column : Delete an entire table column using
|table-mode-delete-column-map|
3. Delete Row : Delete an entire table row using
|table-mode-delete-row-map|
4. Insert Column : Insert a table column either before the cursor using
|table-mode-insert-column-before-map| or after the cusor using
|table-mode-insert-column-after-map|
*table-formulas*
Table Formulas:
Table Mode now has support for formulas like a spreadsheet. There
are 2 ways of defining formulas :
Table Mode now has support for formulas like a spreadsheet. There are
2 ways of defining formulas :
You can add formulas using |:TableAddFormula| or the mapping
|<Leader>tfa| defined by the option
|table-mode-add-formula-map| from within a table 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 one will be created with the input formula
taking the current cell as the target cell. The formula line
is evaluated immediately to reflect the results.
You can add formulas using |:TableAddFormula| or the mapping
|<Leader>tfa| defined by the option |table-mode-add-formula-map| from
within a table 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 one will be created with the input formula taking the
current cell as the target cell. The formula line is evaluated immediately
to reflect the results.
You can directly also add / manipulate formula expressions in
the formula line. The formula line is a commented line right
after the table, beginning with 'tmf:' (table mode formula).
eg) '# tmf: $3=$2*$1'. You can add multiple formulas on the
line separated with a ';' eg) '# tmf: $3=$2*$1;$4=$3/3.14'
You can directly also add / manipulate formula expressions in the
formula line. The formula line is a commented line right after the table,
beginning with `tmf:` (table mode formula). eg) `# tmf: $3=$2*$1`. You
can add multiple 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
mapping |<Leader>tfe| defined by the option |table-mode-expr-calc-map|
You can evaluate the formula line using |:TableEvalFormulaLine| or the
mapping |<Leader>tfe| defined by the option |table-mode-expr-calc-map|
*formula-expressions*
Formula Expressions :
Expressions are of the format '$target = formula'.
Expressions are of the format `$target = formula`.
The target can be of 2 forms :
The target can be of 2 forms:
'$n': This matches the table column number 'n'. So the formula
would be evaluated for each cell in that column and the result
would be placed in it. You can use negative indice to
represent column relative to the last, -1 being the last.
1. `n`: This matches the table column number `n`. So the formula would
be evaluated for each cell in that column and the result would be
placed in it. You can use negative indice to represent column
relative to the last, -1 being the last.
2. `$n,m`: This matches the table cell `n`, `m` (row, column). So in
this case the formula would be evaluated and the result will be
placed in this cell. You can also use negative values to refer to
cells relative to the size, -1 being the last (row or column).
'$n,m': This matches the table cell n,m (row, column). So in
this case the formula would be evaluated and the result will
be placed in this cell. You can also use negative values to
refer to cells relative to the size, -1 being the last (row or
column).
The formula can be a simple mathematical expression involving cells which
are also defined by the same format as that of the target cell. Apart from
basic mathematical expressions, table mode also provides special functions
The formula can be a simple mathematical expression involving cells
which are also defined by the same format as that of the target cell.
Apart from basic mathematical expressions, table mode also provides
special functions 'Min', 'Max', 'CountE' (number of empty cells),
'CountNE' (number of non-empty cells), 'PercentE' (percent of empty
cells), 'PercentNE' (percent of non-empty cells), 'Sum', 'Average',
and 'AverageNE' (average over non-empty cells). All these functions
take a range as input. A range can be of two forms :
- `Min`
- `Max`
- `CountE` (number of empty cells)
- `CountNE` (number of non-empty cells)
- `PercentE` (percent of empty cells)
- `PercentNE` (percent of non-empty cells)
- `Sum`
- `Average`
- `AverageNE` (average over non-empty cells)
'n:m': This represents cells in the current column from row
'n' through 'm'. If 'm' is negative it represents 'm' row
above the current row (of the target cell).
All these functions take a range as input. A range can be of two forms:
'r1,c1:r2,c2': This represents cells in the table from cell
r1,c1 through cell r2,c2 (row, column).
1. `n:m`: This represents cells in the current column from row `n`
through `m`. If `m` is negative it represents `m` row above the
current row (of the target cell).
2. `r1,c1:r2,c2`: This represents cells in the table from cell `r1,c1`
through cell `r2,c2` (row, column).
Examples :
$2 = $1 * $1
$2 = $1 / $1,3
$1,2 = $1,1 * $1,1
$5,1 = Sum(1:-1)
$5,3 = Sum(1,2:5,2)
Examples :
$2 = $1 * $1
$2 = $1 / $1,3
$1,2 = $1,1 * $1,1
$5,1 = Sum(1:-1)
$5,3 = Sum(1,2:5,2)
===============================================================================
OPTIONS *table-mode-options*
OPTIONS *table-mode-options*
Overview:
|table-mode-loaded| ............. Disable the plugin.
|table-mode-verbose| ............ Notify when Enabled/Disabled.
|table-mode-corner| ............. Set corner character.
|table-mode-separator| .......... Set separator character.
|table-mode-fillchar| ........... Set table fillchar character.
|table-mode-map-prefix| ......... Set prefix for table mode commands.
|table-mode-toggle-map| ......... Set table mode toggle mapping.
|table-mode-always-active| ...... Set table mode to always enabled.
|table-mode-delimiter| .......... Set the delimiter for Tableize.
|table-mode-corner-corner| ...... Set the character to be used for
extreme corners of the table border.
|table-mode-align-char|.......... Set the alignment character which
can be added to the table header
border to control alignment of that
column.
|table-mode-motion-up-map| ...... Set the table motion up mapping
|table-mode-motion-down-map| .... Set the table motion down mapping
|table-mode-motion-left-map| .... Set the table motion left mapping
|table-mode-motion-right-map| ... Set the table motion right mapping
|table-mode-cell-text-object-a-map|
Set the 'a' cell text object
mapping
|table-mode-cell-text-object-i-map|
Set the 'i' cell text object
mapping
|table-mode-realign-map| ........ Set the realign mapping
|table-mode-delete-row-map| ..... Set the delete row mapping
|table-mode-delete-column-map| .. Set the delete column mapping
|table-mode-insert-column-before-map|
Set the insert column before the
cursor mapping
|table-mode-insert-column-after-map|
Set the insert column after the
cursor mapping
|table-mode-add-formula-map| .... Set the add formula mapping
|table-mode-eval-formula-map| ... Set the eval formula mapping
|table-mode-echo-cell-map| ...... Set the echo cell mapping
|table-mode-sort-map| ........... Set the table sort mapping
|table-mode-syntax| ............. Control table mode syntax
|table-mode-auto-align| ......... Set if the table mode should auto
align as you type
|table-mode-tableize-auto-border| Set if tableize adds row borders
|table-mode-loaded| .................... Disable the plugin
|table-mode-verbose| ................... Notify when Enabled/Disabled
|table-mode-disable-mappings| .......... Disable default mappings
|table-mode-disable-tableize-mappings| . Disable tableize mappings
|table-mode-corner| .................... Set corner character
|table-mode-separator| ................. Set separator 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-toggle-map| ................ Set table mode toggle mapping
|table-mode-always-active| ............. Set table mode to always enabled
|table-mode-delimiter| ................. Set the delimiter for Tableize
|table-mode-corner-corner| ............. Set the character to be used for
extreme corners of the table border
|table-mode-align-char|................. Set the alignment character which
can be added to the table header
border to control alignment of that
column
|table-mode-motion-up-map| ............. Set the table motion up mapping
|table-mode-motion-down-map| ........... Set the table motion down mapping
|table-mode-motion-left-map| ........... Set the table motion left mapping
|table-mode-motion-right-map| .......... Set the table motion right mapping
|table-mode-cell-text-object-a-map| .... Set the 'a' cell text object
mapping
|table-mode-cell-text-object-i-map| .... Set the 'i' cell text object
mapping
|table-mode-realign-map| ............... Set the realign mapping
|table-mode-delete-row-map| ............ Set the delete row mapping
|table-mode-delete-column-map| ......... Set the delete column mapping
|table-mode-insert-column-before-map| .. Set the insert column before the
cursor mapping
|table-mode-insert-column-after-map| ... Set the insert column after the
cursor mapping
|table-mode-add-formula-map| ........... Set the add formula mapping
|table-mode-eval-formula-map| .......... Set the eval formula mapping
|table-mode-echo-cell-map| ............. Set the echo cell mapping
|table-mode-sort-map| .................. Set the table sort mapping
|table-mode-tableize-map| .............. Set the tableize mapping
|table-mode-tableize-d-map| ............ Set the tableize visual mapping
|table-mode-syntax| .................... Control table mode syntax
|table-mode-auto-align| ................ Set if the table mode should auto
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*
Use this option to disable the plugin: >
let g:loaded_table_mode = 1
g:loaded_table_mode *table-mode-loaded*
Use this option to disable the plugin: >
let g:loaded_table_mode = 1
<
g:table_mode_verbose *table-mode-verbose*
Use this option to disable notifications: >
let g:table_mode_verbose = 0
<
g:table_mode_corner *table-mode-corner*
Use this option to define the table corner character: >
let g:table_mode_corner = '+'
<
Or only in the current buffer: >
let b:table_mode_corner = '+'
<
g:table_mode_separator *table-mode-separator*
Use this option to define the table column separator character: >
let g:table_mode_separator = '|'
<
This option also defines the trigger to be used to start creating a
table row in insert mode.
g:table_mode_fillchar *table-mode-fillchar*
Use this option to define the table header border fill character: >
let g:table_mode_fillchar = '-'
<
g:table_mode_map_prefix *table-mode-map-prefix*
Use this option to define the table mode mapping prefix that will be
prefixed for all other table mode mappings. >
let g:table_mode_map_prefix = '<Leader>t'
<
g:table_mode_toggle_map *table-mode-toggle-map*
Use this option to define the mapping for toggling the table mode: >
let g:table_mode_toggle_map = 'm'
<
Read |table-mode-mappings-toggle| for more info.
NOTE you will need to use the |table-mode-map-prefix| before this to
get the desired effect.
g:table_mode_always_active *table-mode-always-active*
Use this option to permanently enable the table mode: >
let g:table_mode_always_active = 0
<
This will trigger table creation once you type the
|table-mode-separator| as long as it's the first character on
the line, which can be annoying. I recommend you to instead use the
|table-mode-mappings-toggle| or |table-mode-commands-toggle| to toggle
the table mode or |table-mode-commands-enable| to enable and
|table-mode-commands-disable| to disable mode when needed.
g:table_mode_delimiter *table-mode-delimiter*
Use this option to define the delimiter which used by
|table-mode-commands-tableize| >
let g:table_mode_delimiter = ','
<
g:table_mode_corner_corner *table-mode-corner-corner*
Use this option to define the character to be used for the extreme
corners of the table border. >
let g:table_mode_corner_corner = '|'
<
Or only in the current buffer: >
let b:table_mode_corner_corner = '|'
<
g:table_mode_align_char *table-mode-align-char*
Use this option to define the character to be used for defining
alignments for columns in the table header border. >
let g:table_mode_align_char = ':'
g:table_mode_verbose *table-mode-verbose*
Use this option to disable notifications: >
let g:table_mode_verbose = 0
<
g:table_mode_disable_mappings *table-mode-disable-mappings*
Set this to true to disable all mappings. >
let g:table_mode_disable_mappings = 1
Use this option to disable default mappings: >
let g:table_mode_disable_mappings = 1
<
g:table_mode_disable_tableize_mappings *table-mode-disable-tableize-mappings*
Disables mappings for tableize. >
let g:table_mode_disable_tableize_mappings = 0
<
g:table_mode_corner *table-mode-corner*
Use this option to define the table corner character: >
let g:table_mode_corner = '+'
<
Or only in the current buffer: >
let b:table_mode_corner = '+'
<
g:table_mode_separator *table-mode-separator*
Use this option to define the table column separator character: >
let g:table_mode_separator = '|'
<
This option also defines the trigger to be used to start creating a 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*
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: >
let g:table_mode_fillchar = '-'
<
g:table_mode_map_prefix *table-mode-map-prefix*
Use this option to define the table mode mapping prefix that will be
prefixed for all other table mode mappings. >
let g:table_mode_map_prefix = '<Leader>t'
<
g:table_mode_toggle_map *table-mode-toggle-map*
Use this option to define the mapping for toggling the table mode: >
let g:table_mode_toggle_map = 'm'
<
Read |table-mode-mappings-toggle| for more info.
NOTE: you will need to use the |table-mode-map-prefix| before this to get
the desired effect.
g:table_mode_always_active *table-mode-always-active*
Use this option to permanently enable the table mode: >
let g:table_mode_always_active = 0
<
This will trigger table creation once you type the |table-mode-separator|
as long as it's the first character on the line, which can be annoying.
I recommend you to instead use the |table-mode-mappings-toggle| or
|table-mode-commands-toggle| to toggle the table mode or
|table-mode-commands-enable| to enable and |table-mode-commands-disable|
to disable mode when needed.
g:table_mode_delimiter *table-mode-delimiter*
Use this option to define the delimiter which used by
|table-mode-commands-tableize| >
let g:table_mode_delimiter = ','
<
g:table_mode_corner_corner *table-mode-corner-corner*
Use this option to define the character to be used for the extreme
corners of the table border. >
let g:table_mode_corner_corner = '|'
<
Or only in the current buffer: >
let b:table_mode_corner_corner = '|'
<
g:table_mode_align_char *table-mode-align-char*
Use this option to define the character to be used for defining
alignments for columns in the table header border. >
let g:table_mode_align_char = ':'
<
g:table_mode_motion_up_map *table-mode-motion-up-map*
Set this to configure the mapping to move up a cell vertically. >
let g:table_mode_motion_up_map = '{<Bar>'
Set this to configure the mapping to move up a cell vertically. >
let g:table_mode_motion_up_map = '{<Bar>'
<
g:table_mode_motion_down_map *table-mode-motion-down-map*
Set this to configure the mapping to move down a cell vertically. >
let g:table_mode_motion_down_map = '}<Bar>'
Set this to configure the mapping to move down a cell vertically. >
let g:table_mode_motion_down_map = '}<Bar>'
>
g:table_mode_motion_left_map *table-mode-motion-left-map*
Set this to configure the mapping to move to the left cell. >
let g:table_mode_motion_left_map = '[<Bar>'
Set this to configure the mapping to move to the left cell. >
let g:table_mode_motion_left_map = '[<Bar>'
>
g:table_mode_motion_right_map *table-mode-motion-right-map*
Set this to configure the mapping to move to the right cell. >
let g:table_mode_motion_right_map = ']<Bar>'
Set this to configure the mapping to move to the right cell. >
let g:table_mode_motion_right_map = ']<Bar>'
>
g:table_mode_cell_text_object_a_map *table-mode-cell-text-object-a-map*
Set this to configure the mapping to define the text object for around
cell object. >
let g:table_mode_cell_text_object_a_map = 'a<Bar>'
Set this to configure the mapping to define the text object for around
cell object. >
let g:table_mode_cell_text_object_a_map = 'a<Bar>'
>
g:table_mode_cell_text_object_i_map *table-mode-cell-text-object-i-map*
Set this to configure the mapping to define the text object for inner
cell object. >
let g:table_mode_cell_text_object_i_map = 'i<Bar>'
Set this to configure the mapping to define the text object for inner cell
object. >
let g:table_mode_cell_text_object_i_map = 'i<Bar>'
>
g:table_mode_realign_map *table-mode-realign-map*
Set this to configure the mapping for table realign. >
let g:table_mode_realign_map = '<Leader>tr'
Set this to configure the mapping for table realign. >
let g:table_mode_realign_map = '<Leader>tr'
>
g:table_mode_delete_row_map *table-mode-delete-row-map*
Set this to configure the mapping for deleting a table row. >
let g:table_mode_delete_row_map = '<Leader>tdd'
Set this to configure the mapping for deleting a table row. >
let g:table_mode_delete_row_map = '<Leader>tdd'
>
g:table_mode_delete_column_map *table-mode-delete-column-map*
Set this to configure the mapping for deleting a table column. >
let g:table_mode_delete_column_map = '<Leader>tdc'
Set this to configure the mapping for deleting a table column. >
let g:table_mode_delete_column_map = '<Leader>tdc'
>
g:table_mode_insert_column_before_map *table-mode-insert-column-before-map*
Set this to configure the mapping for inserting a table column before
the cursor. >
let g:table_mode_insert_column_before_map = '<Leader>tiC'
Set this to configure the mapping for inserting a table column before the
cursor. >
let g:table_mode_insert_column_before_map = '<Leader>tiC'
>
g:table_mode_insert_column_after_map *table-mode-insert-column-after-map*
Set this to configure the mapping for inserting a table column after
the cursor. >
let g:table_mode_insert_column_after_map = '<Leader>tic'
Set this to configure the mapping for inserting a table column after the
cursor. >
let g:table_mode_insert_column_after_map = '<Leader>tic'
>
g:table_mode_add_formula_map *table-mode-add-formula-map*
Set this to configure the mapping for adding a formula for a table
cell. >
let g:table_mode_add_formula_map = '<Leader>tfa'
Set this to configure the mapping for adding a formula for a table cell. >
let g:table_mode_add_formula_map = '<Leader>tfa'
>
g:table_mode_eval_formula_map *table-mode-eval-formula-map*
Set this to configure the mapping for evaluating the formula line. >
let g:table_mode_eval_formula_map = '<Leader>tfe'
Set this to configure the mapping for evaluating the formula line. >
let g:table_mode_eval_formula_map = '<Leader>tfe'
>
g:table_mode_echo_cell_map *table-mode-echo-cell-map*
Set this to configure the mapping for echoing the tablemode
representation of the current cell. >
let g:table_mode_echo_cell_map = '<Leader>t?'
Set this to configure the mapping for echoing the tablemode representation
of the current cell. >
let g:table_mode_echo_cell_map = '<Leader>t?'
>
g:table_mode_sort_map *table-mode-sort-map*
Set this to configure the mapping for sorting the table mode by
current column. >
let g:table_mode_sort_map = '<Leader>ts'
Set this to configure the mapping for sorting the table mode by current
column. >
let g:table_mode_sort_map = '<Leader>ts'
>
g:table_mode_tableize_map *table-mode-tableize-map*
Set this to configure the mapping for converting the visual selection
to a table. >
let g:table_mode_tableize_map = '<Leader>tt'
Set this to configure the mapping for converting the visual selection to
a table. >
let g:table_mode_tableize_map = '<Leader>tt'
>
g:table_mode_tableize_d_map *table-mode-tableize-d-map*
Set this to configure the mapping for converting the visual selection
to a table, asking the user for a delimiter. >
let g:table_mode_tableize_d_map = '<Leader>T'
Set this to configure the mapping for converting the visual selection to
a table, asking the user for a delimiter. >
let g:table_mode_tableize_d_map = '<Leader>T'
>
g:table_mode_syntax *table-mode-syntax*
Control whether table mode should define table syntax definitions or
not. >
let g:table_mode_syntax = 1
Control whether table mode should define table syntax definitions or not. >
let g:table_mode_syntax = 1
<
g:table_mode_auto_align *table-mode-auto-align*
Set if the table mode should auto align as you type when table mode is
active. >
let g:table_mode_auto_align = 1
<
Set if the table mode should auto align as you type when table mode is
active. >
let g:table_mode_auto_align = 1
g:table_mode_update_time *table-mode-update-time*
Set the value of updatetime to be used when table mode is active,
used in combination with |table-mode-auto-align|. >
let g:table_mode_update_time = 500
Set the value of updatetime to be used when table mode is active, used in
combination with |table-mode-auto-align|. >
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
g:table_mode_tableize_auto_border *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-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
g:table_mode_ignore_align *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*
*table-mode-mappings-prefix*
<Leader>t This is a prefix defined by the option |table-mode-map-prefix|
used before all other table mode commands.
*table-mode-mappings-prefix*
`<Leader>t`: This is a prefix defined by the option
|table-mode-map-prefix| used before all other table mode commands
*table-mode-mappings-toggle*
<Leader>tm Toggle table mode for the current buffer. You can change this
using the |toggle-mode-options-toggle-map| option.
*table-mode-mappings-toggle*
`<Leader>tm`: Toggle table mode for the current buffer. You can change
this using the |toggle-mode-options-toggle-map| option
NOTE This is applicable only if |table-mode-always-active| is
not set.
NOTE: This is applicable only if |table-mode-always-active| is not set
*table-mode-mappings-trigger*
| Trigger table creation in table mode. You can change this
using the |toggle-mode-options-separator| option.
*table-mode-mappings-trigger*
`|`: Trigger table creation in table mode. You can change this
using the |toggle-mode-options-separator| option
<Leader>tt Triggers |table-mode-commands-tableize| on the visually
selected content.
*table-mode-mappings-tableize*
`<Leader>tt`: Triggers |table-mode-commands-tableize| on the visually
selected content
*table-mode-mappings-op-trigger*
<Leader>T Triggers |table-mode-commands-tableize| on the visually
selected asking for user to input the delimiter.
*table-mode-mappings-op-trigger*
`<Leader>T`: Triggers |table-mode-commands-tableize| on the visually
selected asking for user to input the delimiter
*table-mode-mappings-realign*
<Leader>tr Realigns table columns
*table-mode-mappings-realign*
`<Leader>tr`: Realigns table columns
<Leader>t? Echo the current table cells representation for defining
formulas.
`<Leader>t?`: Echo the current table cells representation for defining
formulas
*table-mode-mappings-motions*
[| Move to previous cell
]| Move to next cell
{| Move to the cell above
}| Move to the cell below
*table-mode-mappings-motions*
`[|`: Move to previous cell
`]|`: Move to next cell
`{|`: Move to the cell above
`}|`: Move to the cell below
*table-mode-mappings-delete-row*
<Leader>tdd Delete the entire table row you are on or multiple rows using
a [count]. You can change this using |table-mode-delete-row-map|
option.
*table-mode-mappings-delete-row*
`<Leader>tdd`: Delete the entire table row you are on or multiple rows using
a [count]. You can change this using |table-mode-delete-row-map| option
*table-mode-mappings-delete-column*
<Leader>tdc Delete entire table column you are within. You can preceed it
with a [count] to delete multiple columns to the right. You
can change this using |table-mode-delete-column-map| option.
*table-mode-mappings-delete-column*
`<Leader>tdc`: Delete entire table column you are within. You can preceed it
with a [count] to delete multiple columns to the right. You can change this
using |table-mode-delete-column-map| option.
*table-mode-mappings-insert-column-before*
<Leader>tiC Insert a table column before the column you are within. You can
preceed it with a [count] to insert multiple columns. You can
change this using |table-mode-insert-column-before-map| option.
*table-mode-mappings-insert-column-before*
`<Leader>tiC`: Insert a table column before the column you are within. You
can preceed it with a [count] to insert multiple columns. You can change
this using |table-mode-insert-column-before-map| option.
*table-mode-mappings-insert-column-after*
<Leader>tic Insert a table column after the column you are within. You can
preceed it with a [count] to insert multiple columns. You can
change this using |table-mode-insert-column-after-map| option.
*table-mode-mappings-insert-column-after*
`<Leader>tic`: Insert a table column after the column you are within. You
can preceed it with a [count] to insert multiple columns. You can change
this using |table-mode-insert-column-after-map| option.
*table-mode-mappings-add-formula*
<Leader>tfa Add a fomula for the current table cell. This invokes
|TableAddFormula| command.
*table-mode-mappings-evaluate-formula-line*
<Leader>tfe Evaluate the formula line which is a commented line right
after the table beginning with 'tmf:'. If one exists this
would evaluate the formula line and update the table
accordingly. This invokes the |TableEvalFormulaLine| command.
*table-mode-mappings-add-formula*
`<Leader>tfa`: Add a fomula for the current table cell. This invokes
|TableAddFormula| command.
*table-mode-mappings-evaluate-formula-line*
`<Leader>tfe`: Evaluate the formula line which is a commented line right
after the table beginning with 'tmf:'. If one exists this would evaluate the
formula line and update the table accordingly. This invokes the
|TableEvalFormulaLine| command.
*table-mode-mappings-sort-column*
<Leader>ts Sort a column under the cursor. This invokes |TableSort|
`<Leader>ts`: Sort a column under the cursor. This invokes |TableSort|
|| Expands to a header border. You can change this by changing
|table-mode-separator| option. You can change the character to
be used for the extreme corners of the border by changing
|table-mode-corner-corner| option.
`||`: Expands to a header border. You can change this by changing
|table-mode-separator| option. You can change the character to be used for
the extreme corners of the border by changing |table-mode-corner-corner|
option.
===============================================================================
COMMANDS *table-mode-commands*
COMMANDS *table-mode-commands*
*:TableModeToggle*
*table-mode-:TableModeToggle*
*:TableModeToggle*
*table-mode-:TableModeToggle*
:TableModeToggle
Toggles the table mode. Same effect as |toggle-mode-mappings-toggle|.
Toggles the table mode. Same effect as |toggle-mode-mappings-toggle|.
NOTE this is applicable only if |table-mode-always-active| is
not set.
NOTE this is applicable only if |table-mode-always-active| is
not set.
*:TableModeEnable*
*table-mode-:TableModeEnable*
*:TableModeEnable*
*table-mode-:TableModeEnable*
:TableModeEnable
Enables Table Mode.
Enables Table Mode.
NOTE this is applicable only if |table-mode-always-active| is
not set.
NOTE this is applicable only if |table-mode-always-active| is
not set.
*:TableModeDisable*
*table-mode-:TableModeDisable*
*:TableModeDisable*
*table-mode-:TableModeDisable*
:TableModeDisable
Disables Table Mode.
Disables Table Mode.
NOTE this is applicable only if |table-mode-always-active| is
not set.
NOTE this is applicable only if |table-mode-always-active| is
not set.
*:Tableize*
*table-mode-:Tableize*
*:Tableize*
*table-mode-:Tableize*
:Tableize
This converts the current line into a table if it consists of
|table-mode-delimiter|. This accepts a range, without which it
applies on the current line.
This converts the current line into a table if it consists of
|table-mode-delimiter|. This accepts a range, without which it applies on
the current line.
This accepts a {pattern} similar to Tabular which defines the
delimiter. eg.) >
:Tableize/;
This accepts a {pattern} similar to Tabular which defines the delimiter.
eg.) >
:Tableize/;
<
The above command will Tableize using ';' as the delimiter.
The above command will Tableize using ';' as the delimiter.
NOTE this is optional, by default without the expression it will
tableize the content using |table-mode-delimiter| as the delimiter.
NOTE this is optional, by default without the expression it will tableize
the content using |table-mode-delimiter| as the delimiter.
*:TableModeRealign*
*table-mode-:TableModeRealign*
*:TableModeRealign*
*table-mode-:TableModeRealign*
:TableModeRealign
This command triggers |table-mode-mappings-realign|
This command triggers |table-mode-mappings-realign|
*:TableAddFormula*
*table-mode-:TableAddFormula*
*:TableAddFormula*
*table-mode-:TableAddFormula*
:TableAddFormula
This command is for defining a formula for the current table cell. It
takes input on the cmd-line with a 'f=' prompt and appends it to the
formula line if it exists or adds a new formula line with the
expression using the current cell as the target and the input formula.
This command is for defining a formula for the current table cell. It takes
input on the cmd-line with a 'f=' prompt and appends it to the formula line
if it exists or adds a new formula line with the expression using the
current cell as the target and the input formula.
*:TableEvalFormulaLine*
*table-mode-:TableEvalFormulaLine*
*:TableEvalFormulaLine*
*table-mode-:TableEvalFormulaLine*
:TableEvalFormulaLine
This command when invoked from anywhere within the table or directly
on the formula line evaluates it and updates the table accordingly.
This command when invoked from anywhere within the table or directly on the
formula line evaluates it and updates the table accordingly.
*:TableSort*
*table-mode-:TableSort*
*:TableSort*
*table-mode-:TableSort*
:TableSort[!] [i][u][r][n][x][o]
This command sorts column under the cursor and inherits the same flags
as the |:sort| command.
This command sorts column under the cursor and inherits the same flags as
the |:sort| command.
With [!] the order is reversed.
With [!] the order is reversed.
===============================================================================
CONTRIBUTING *table-mode-contributing*
CONTRIBUTING *table-mode-contributing*
If you want to take a stab at it, by all means, send me a pull request on
Github (http://github.com/dhruvasagar/vim-table-mode) or get in touch with me
directly via e-mail at dhruva 'dot' sagar 'at' gmail.com.
If you want to take a stab at it, by all means, send me a pull request on Github
(http://github.com/dhruvasagar/vim-table-mode) or get in touch with me directly
via e-mail at dhruva 'dot' sagar 'at' gmail.com.
===============================================================================
REPORT ISSUES *table-mode-report-issues*
REPORT ISSUES *table-mode-report-issues*
If you discover any issues, please report them at
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_verbose', 1)
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_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_header_fillchar', '-')
@@ -54,27 +61,18 @@ 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)
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
exec "nnoremap <silent>" g:table_mode_map_prefix . g:table_mode_toggle_map ":<C-U>call tablemode#Toggle()<CR>"
if !g:table_mode_disable_mappings
exec "nnoremap <silent>" g:table_mode_map_prefix . g:table_mode_toggle_map ":<C-U>call tablemode#Toggle()<CR>"
endif
command! -nargs=0 TableModeToggle call tablemode#Toggle()
command! -nargs=0 TableModeEnable call tablemode#Enable()
command! -nargs=0 TableModeDisable call tablemode#Disable()
else
let table_mode_separator_map = g:table_mode_separator
" '|' is a special character, we need to map <Bar> instead
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
execute "inoremap <silent> " . g:table_mode_separator_map . ' ' .
\ g:table_mode_separator_map_target . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
endif
" }}}2
@@ -84,9 +82,7 @@ command! TableAddFormula call tablemode#spreadsheet#formula#Add()
command! TableModeRealign call tablemode#table#Realign('.')
command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine()
" '|' is a special character, we need to map <Bar> instead
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'
execute 'inoremap <silent> <Plug>(table-mode-tableize)' g:table_mode_separator_map . '<Esc>:call tablemode#TableizeInsertMode()<CR>a'
nnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
xnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
@@ -112,7 +108,7 @@ 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-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>

View File

@@ -1,20 +0,0 @@
" vim: fdm=indent
source t/config/options.vim
function! ConvertLines2Dict(lines)
let lines = []
for idx in range(len(a:lines))
call insert(lines, {"lnum": idx+1, "text": a:lines[idx]})
endfor
return lines
endfunction
describe 'Align'
it 'should align table content correctly'
Expect tablemode#align#Align(ConvertLines2Dict(readfile('t/fixtures/align/simple_before.txt'))) == ConvertLines2Dict(readfile('t/fixtures/align/simple_after.txt'))
end
it 'should align table content with unicode characters correctly'
Expect tablemode#align#Align(ConvertLines2Dict(readfile('t/fixtures/align/unicode_before.txt'))) == ConvertLines2Dict(readfile('t/fixtures/align/unicode_after.txt'))
end
end

View File

@@ -0,0 +1,23 @@
source t/config/options.vim
function! ConvertLines2Dict(lines)
let lines = []
for idx in range(len(a:lines))
call insert(lines, {"lnum": idx+1, "text": a:lines[idx]})
endfor
return lines
endfunction
function! s:TestAlignTable()
let actual = tablemode#align#Align(ConvertLines2Dict(readfile('t/fixtures/align/simple_before.txt')))
let expected = ConvertLines2Dict(readfile('t/fixtures/align/simple_after.txt'))
call testify#assert#equals(actual, expected)
endfunction
call testify#it('Align should align table content', function('s:TestAlignTable'))
function! s:TestAlignTableUnicode()
let actual = tablemode#align#Align(ConvertLines2Dict(readfile('t/fixtures/align/unicode_before.txt')))
let expected = ConvertLines2Dict(readfile('t/fixtures/align/unicode_after.txt'))
call testify#assert#equals(actual, expected)
endfunction
call testify#it('Align should align table content with unicode characters', function('s:TestAlignTableUnicode'))

View File

@@ -0,0 +1,194 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/cell/counts.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestCountE()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#CountE('1:3'),
\ 'expected': 1,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountE('1,1:1,3'),
\ 'expected': 0,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountE('2,1:2,3'),
\ 'expected': 2,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountE('1,1:3,3'),
\ 'expected': 2,
\ },
\]
call utils#TableTest(tests)
call cursor(5, 11)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#CountE('1:3'),
\ 'expected': 1,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountE('3,1:3,3'),
\ 'expected': 0,
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('CountE should return the count of empty cells within cell range', function('s:TestCountE'))
function! s:TestCountNE()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#CountNE('1:3'),
\ 'expected': 2,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountNE('1,1:1,3'),
\ 'expected': 3,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountNE('2,1:2,3'),
\ 'expected': 1,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountNE('1,1:3,3'),
\ 'expected': 7,
\ },
\]
call utils#TableTest(tests)
call cursor(5, 11)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#CountNE('1:3'),
\ 'expected': 2,
\ },
\ {
\ 'actual': tablemode#spreadsheet#CountNE('3,1:3,3'),
\ 'expected': 3,
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('CountNE should return the count of non-empty cells within cell range', function('s:TestCountNE'))
function! s:TestPercentE()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#PercentE('1:3'),
\ 'expected': 33,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentE('1,1:1,3'),
\ 'expected': 0,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentE('2,1:2,3'),
\ 'expected': 66,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentE('1,1:3,3'),
\ 'expected': 22,
\ },
\]
call utils#TableTest(tests)
call cursor(5, 11)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#PercentE('1:3'),
\ 'expected': 33,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentE('3,1:3,3'),
\ 'expected': 0,
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('PercentE should return the percent count of empty cells within cell range', function('s:TestPercentE'))
function! s:TestPercentNE()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#PercentNE('1:3'),
\ 'expected': 66,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentNE('1,1:1,3'),
\ 'expected': 100,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentNE('2,1:2,3'),
\ 'expected': 33,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentNE('1,1:3,3'),
\ 'expected': 77,
\ },
\]
call utils#TableTest(tests)
call cursor(5, 11)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#PercentNE('1:3'),
\ 'expected': 66,
\ },
\ {
\ 'actual': tablemode#spreadsheet#PercentNE('3,1:3,3'),
\ 'expected': 100,
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('PercentNE should return the percent count of non-empty cells within cell range', function('s:TestPercentNE'))
function! s:TestAverageNE()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#AverageNE('1:3'),
\ 'expected': 2.5,
\ },
\ {
\ 'actual': tablemode#spreadsheet#AverageNE('1,1:1,3'),
\ 'expected': 2.0,
\ },
\ {
\ 'actual': tablemode#spreadsheet#AverageNE('2,1:2,3'),
\ 'expected': 0.0,
\ },
\ {
\ 'actual': tablemode#spreadsheet#AverageNE('1,1:3,3'),
\ 'expected': 3.0,
\ },
\]
call utils#TableTest(tests)
call cursor(5, 11)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#AverageNE('1:3'),
\ 'expected': 4.5,
\ },
\ {
\ 'actual': tablemode#spreadsheet#AverageNE('3,1:3,3'),
\ 'expected': 5.0,
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('AverageNE should return the average of non-empty cells within cell range', function('s:TestAverageNE'))

View File

@@ -0,0 +1,52 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/sample.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestDeleteRow()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 2)
call tablemode#spreadsheet#DeleteRow()
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 1)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteRow should delete a row', function('s:TestDeleteRow'))
function! s:TestDeleteColumn()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call tablemode#spreadsheet#DeleteColumn()
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 1)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteColumn should delete a column', function('s:TestDeleteColumn'))
function! s:TestInsertColumn()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call tablemode#spreadsheet#InsertColumn(0)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
" InsertColumn leaves us in insert mode
stopinsert
call testify#assert#equals(getline('.'), '| | test11 | test12 |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should insert a new column before the current column', function('s:TestInsertColumn'))
function! s:TestInserColumnAfter()
call cursor(3, 3)
normal! $
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call tablemode#spreadsheet#InsertColumn(1)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
" InsertColumn leaves us in insert mode
stopinsert
call testify#assert#equals(getline('.'), '| test11 | test12 | |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should be able to insert a new column after the current column', function('s:TestInserColumnAfter'))

View File

@@ -0,0 +1,51 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/escaped_seperator.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestDeleteRow()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 7)
call tablemode#spreadsheet#DeleteRow()
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 6)
call testify#assert#equals(getline('.'), '| a separator. | |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteRow should be able to delete a row with escaped table separator', function('s:TestDeleteRow'))
function! s:TestDeleteColumn()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call tablemode#spreadsheet#DeleteColumn()
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 1)
call testify#assert#equals(getline('.'), '| It can be escaped by a \. |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteColumn should be able to delete a column with escaped table separator', function('s:TestDeleteColumn'))
function! s:TestInsertColumnBefore()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call tablemode#spreadsheet#InsertColumn(0)
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
call testify#assert#equals(getline('.'), '| | The \| works as | It can be escaped by a \. |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should be able to insert a column before the current column with escaped table separator', function('s:TestInsertColumnBefore'))
function! s:TestInsertColumnAfter()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call tablemode#spreadsheet#InsertColumn(1)
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
call testify#assert#equals(getline('.'), '| The \| works as | | It can be escaped by a \. |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should be able to insert a column after the current column with escabled table separator', function('s:TestInsertColumnAfter'))

View File

@@ -0,0 +1,58 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/complex_header.txt'
function! s:setup()
let g:table_mode_header_fillchar = '='
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
function! s:teardown()
let g:table_mode_header_fillchar = '-'
bw!
endfunction
call testify#teardown(function('s:teardown'))
function! s:TestDeleteRow()
call cursor(5, 7)
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 5)
call tablemode#spreadsheet#DeleteRow()
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 4)
call testify#assert#equals(getline(5), '| 2 | 8 | b | y |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteRow should delete a row in a table with headers', function('s:TestDeleteRow'))
function! s:TestDeleteColumn()
call cursor(5, 7)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
call tablemode#spreadsheet#DeleteColumn()
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
call testify#assert#equals(getline(5), '| 9 | a | z |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteColumn should delete a column in a table with headers', function('s:TestDeleteColumn'))
function! s:TestInsertColumn()
call cursor(5, 7)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
call tablemode#spreadsheet#InsertColumn(0)
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 5)
call testify#assert#equals(getline(5), '| | 1 | 9 | a | z |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should insert a new column before the current column in a table with headers in a table with headers', function('s:TestInsertColumn'))
function! s:TestInserColumnAfter()
call cursor(5, 7)
normal! $
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
call tablemode#spreadsheet#InsertColumn(1)
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 5)
call testify#assert#equals(getline(5), '| 1 | 9 | a | z | |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should be able to insert a new column after the current column in a table with headers', function('s:TestInserColumnAfter'))

View File

@@ -0,0 +1,47 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table//sample_realign_unicode_after.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestDeleteRow()
call cursor(3, 19)
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 4)
call tablemode#spreadsheet#DeleteRow()
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 3)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteRow should be able to delete a row with unicode characters', function('s:TestDeleteRow'))
function! s:TestDeleteColumn()
call cursor(3, 19)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
call tablemode#spreadsheet#DeleteColumn()
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteColumn should be able to delete a column with unicode characters', function('s:TestDeleteColumn'))
function! s:TestInsertColumnBefore()
call cursor(3, 19)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
call tablemode#spreadsheet#InsertColumn(0)
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should be able to insert a column before the current column with unicode characters', function('s:TestInsertColumnBefore'))
function! s:TestInsertColumnAfter()
call cursor(3, 19)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 3)
call tablemode#spreadsheet#InsertColumn(1)
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should be able to insert a column after the current column with unicode characters', function('s:TestInsertColumnAfter'))

View File

@@ -0,0 +1,141 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/cell/sample.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestSum()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Sum('1:2'),
\ 'expected': 4.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Sum('1,1:1,2'),
\ 'expected': 3.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Sum('1,1:2,2'),
\ 'expected': 10.0
\ },
\]
call utils#TableTest(tests)
call cursor(4, 7)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Sum('1:2'),
\ 'expected': 6.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Sum('2,1:2,2'),
\ 'expected': 7.0
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('Sum should return the sum of cell range', function('s:TestSum'))
function! s:TestAverage()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Average('1:2'),
\ 'expected': 2.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Average('1,1:1,2'),
\ 'expected': 1.5
\ },
\ {
\ 'actual': tablemode#spreadsheet#Average('1,1:2,2'),
\ 'expected': 2.5
\ },
\]
call utils#TableTest(tests)
call cursor(4, 7)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Average('1:2'),
\ 'expected': 3.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Average('2,1:2,2'),
\ 'expected': 3.5
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('Average should return the average of cell range', function('s:TestAverage'))
function! s:TestMin()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Min('1:2'),
\ 'expected': 1.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Min('1,1:1,2'),
\ 'expected': 1.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Min('1,1:2,2'),
\ 'expected': 1.0
\ },
\]
call utils#TableTest(tests)
call cursor(4, 7)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Min('1:2'),
\ 'expected': 2.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Min('2,1:2,2'),
\ 'expected': 3.0
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('Min should return the min of cell range', function('s:TestMin'))
function! s:TestMax()
call cursor(3, 3)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Max('1:2'),
\ 'expected': 3.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Max('1,1:1,2'),
\ 'expected': 2.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Max('1,1:2,2'),
\ 'expected': 4.0
\ },
\]
call utils#TableTest(tests)
call cursor(4, 7)
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#Max('1:2'),
\ 'expected': 4.0
\ },
\ {
\ 'actual': tablemode#spreadsheet#Max('2,1:2,2'),
\ 'expected': 4.0
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('Max should return the max of cell range', function('s:TestMax'))

View File

@@ -0,0 +1,49 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/big_sample.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestDeleteRowWithRange()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 5)
.,.+1 call tablemode#spreadsheet#DeleteRow()
call testify#assert#equals(tablemode#spreadsheet#RowCount('.'), 3)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteRow should work with a range', function('s:TestDeleteRowWithRange'))
function! s:TestDeleteColumnWithRange()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
.,.+1 call tablemode#spreadsheet#DeleteColumn()
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 2)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('DeleteColumn should work with a range', function('s:TestDeleteColumnWithRange'))
function! s:TestInsertColumnWithCountBefore()
call cursor(3, 7)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
execute "normal! 2:\<C-U>call tablemode#spreadsheet#InsertColumn(0)\<CR>"
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 6)
call testify#assert#equals(getline('.'), '| 1 | | | 9 | a | z |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should work with a count to add columns before current column', function('s:TestInsertColumnWithCountBefore'))
function! s:TestInsertColumnWithCountAfter()
call cursor(3, 7)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 4)
execute "normal! 2:\<C-U>call tablemode#spreadsheet#InsertColumn(1)\<CR>"
stopinsert
call testify#assert#equals(tablemode#spreadsheet#ColumnCount('.'), 6)
call testify#assert#equals(getline('.'), '| 1 | 9 | | | a | z |')
call utils#TestUndo(s:test_file)
endfunction
call testify#it('InsertColumn should work with a count to add columns after current column', function('s:TestInsertColumnWithCountAfter'))

View File

@@ -0,0 +1,66 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/sample.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestRowCount()
call testify#assert#equals(tablemode#spreadsheet#RowCount(3), 2)
call testify#assert#equals(tablemode#spreadsheet#RowCount(4), 2)
endfunction
call testify#it('RowCount should return the correct row count', function('s:TestRowCount'))
function! s:TestRowNr()
call testify#assert#equals(tablemode#spreadsheet#RowNr(3), 1)
call testify#assert#equals(tablemode#spreadsheet#RowNr(4), 2)
endfunction
call testify#it('RowNr should return the correct row number', function('s:TestRowNr'))
function! s:TestColumnCount()
call testify#assert#equals(tablemode#spreadsheet#ColumnCount(3), 2)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount(4), 2)
endfunction
call testify#it('ColumnCount should return the correct column count', function('s:TestColumnCount'))
function! s:TestColumnNr()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 1)
call cursor(3, 12)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 2)
endfunction
call testify#it('ColumnNr should return the correct column number', function('s:TestColumnNr'))
function! s:TestIsFirstCell()
call cursor(3, 3)
call testify#assert#assert(tablemode#spreadsheet#IsFirstCell())
call cursor(3, 12)
call testify#assert#assert(!tablemode#spreadsheet#IsFirstCell())
endfunction
call testify#it('IsFirstCell should return true when in the first cell', function('s:TestIsFirstCell'))
function! s:TestIsLastCell()
call cursor(3, 3)
call testify#assert#assert(!tablemode#spreadsheet#IsLastCell())
call cursor(3, 12)
call testify#assert#assert(tablemode#spreadsheet#IsLastCell())
endfunction
call testify#it('IsLastCell should return true when in the last cell', function('s:TestIsLastCell'))
function! s:TestGetFirstRow()
call testify#assert#equals(tablemode#spreadsheet#GetFirstRow(3), 3)
call testify#assert#equals(tablemode#spreadsheet#GetFirstRow(4), 3)
endfunction
call testify#it('GetFirstRow should return the line number of the first row', function('s:TestGetFirstRow'))
function! s:TestGetLastRow()
call testify#assert#equals(tablemode#spreadsheet#GetLastRow(3), 4)
call testify#assert#equals(tablemode#spreadsheet#GetLastRow(4), 4)
endfunction
call testify#it('GetLastRow should return the line number of the last row', function('s:TestGetLastRow'))

View File

@@ -0,0 +1,208 @@
source t/config/options.vim
source t/utils.vim
function! s:setup()
call utils#TestSetup('t/fixtures/sample.txt')
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestGetCells()
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCells(3, 1, 1),
\ 'expected': 'test11'
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCells(3, 1),
\ 'expected': ['test11', 'test12']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCells(3, 2),
\ 'expected': ['test21', 'test22']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCells(3, 0, 1),
\ 'expected': ['test11', 'test21']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCells(3, 0, 2),
\ 'expected': ['test12', 'test22']
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('GetCells should return correct cell value', function('s:TestGetCells'))
function! s:TestGetRow()
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#cell#GetRow(1, 3),
\ 'expected': ['test11', 'test12']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetRow(2, 3),
\ 'expected': ['test21', 'test22']
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('GetRow should return the row', function('s:TestGetRow'))
function! s:TestGetColumn()
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#cell#GetColumn(1, 3),
\ 'expected': ['test11', 'test21']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetRow(2, 3),
\ 'expected': ['test21', 'test22']
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('GetColumn should return the column', function('s:TestGetColumn'))
function! s:TestGetCellRange()
let tests = [
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1,1:2,2', 3, 1),
\ 'expected': [['test11', 'test21'], ['test12', 'test22']]
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 3, 1),
\ 'expected': ['test11', 'test12']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 3, 2),
\ 'expected': ['test11', 'test12']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 4, 1),
\ 'expected': ['test11', 'test12']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 4, 2),
\ 'expected': ['test11', 'test12']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 3, 1),
\ 'expected': ['test21', 'test22']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 3, 2),
\ 'expected': ['test21', 'test22']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 4, 1),
\ 'expected': ['test21', 'test22']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 4, 2),
\ 'expected': ['test21', 'test22']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:2', 3, 1),
\ 'expected': ['test11', 'test21']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:2', 3, 2),
\ 'expected': ['test12', 'test22']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:2', 4, 1),
\ 'expected': ['test11', 'test21']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:2', 4, 2),
\ 'expected': ['test12', 'test22']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:-1', 3, 1),
\ 'expected': ['test11']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:-1', 4, 1),
\ 'expected': ['test11']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:-1', 3, 2),
\ 'expected': ['test12']
\ },
\ {
\ 'actual': tablemode#spreadsheet#cell#GetCellRange('1:-1', 4, 2),
\ 'expected': ['test12']
\ },
\]
call utils#TableTest(tests)
endfunction
call testify#it('GetCellRange should return the cell values in given range', function('s:TestGetCellRange'))
function! s:TestLeftMotion()
call cursor(3, 12)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 2)
call tablemode#spreadsheet#cell#Motion('h')
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 1)
endfunction
call testify#it('Motion "h" should move cursor to the left column', function('s:TestLeftMotion'))
function! s:TestLeftMotionFirstColumn() abort
call cursor(4, 3)
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 2)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 1)
call tablemode#spreadsheet#cell#Motion('h')
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 1)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 2)
endfunction
call testify#it('Motion "h" should move cursor to the last column of previous row when on first column', function('s:TestLeftMotionFirstColumn'))
function! s:TestRightMotion()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 1)
call tablemode#spreadsheet#cell#Motion('l')
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 2)
endfunction
call testify#it('Motion "l" should move cursor to the right column', function('s:TestRightMotion'))
function! s:TestRightMotionLastColumn()
call cursor(3, 12)
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 1)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 2)
call tablemode#spreadsheet#cell#Motion('l')
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 2)
call testify#assert#equals(tablemode#spreadsheet#ColumnNr('.'), 1)
endfunction
call testify#it('Motion "l" should move cursor to the first column of next row when on last column', function('s:TestRightMotionLastColumn'))
function! s:TestUpMotion()
call cursor(4, 3)
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 2)
call tablemode#spreadsheet#cell#Motion('k')
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 1)
endfunction
call testify#it('Motion "k" should move cursor to the column above', function('s:TestUpMotion'))
function! s:TestUpMotionFirstRow()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 1)
call tablemode#spreadsheet#cell#Motion('k')
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 1)
endfunction
call testify#it('Motion "k" should remain on first row when trying to move up', function('s:TestUpMotionFirstRow'))
function! s:TestDownMotion()
call cursor(3, 3)
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 1)
call tablemode#spreadsheet#cell#Motion('j')
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 2)
endfunction
call testify#it('Motion "j" should move cursor to the column above', function('s:TestDownMotion'))
function! s:TestDownMotionFirstRow()
call cursor(4, 3)
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 2)
call tablemode#spreadsheet#cell#Motion('j')
call testify#assert#equals(tablemode#spreadsheet#RowNr('.'), 2)
endfunction
call testify#it('Motion "j" should remain on last row when trying to move down', function('s:TestDownMotionFirstRow'))

View File

@@ -0,0 +1,28 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/formula/sample.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestAddFormula()
call cursor(7, 15)
call tablemode#spreadsheet#formula#Add('Sum(1:3)')
let cell_value = tablemode#spreadsheet#cell#GetCell()
call testify#assert#equals(cell_value, '125.0')
call cursor(9, 15)
call testify#assert#equals(getline('.'), ' tmf: $4,2=Sum(1:3) ')
call cursor(8, 15)
call tablemode#spreadsheet#formula#Add('Sum(1:-1)')
let cell_value = tablemode#spreadsheet#cell#GetCell()
call testify#assert#equals(cell_value, '250.0')
call cursor(9, 15)
call testify#assert#equals(getline('.'), ' tmf: $4,2=Sum(1:3) ; $5,2=Sum(1:-1)')
endfunction
call testify#it('Should Add a formula to the table correctly', function('s:TestAddFormula'))

View File

@@ -0,0 +1,18 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/formula/formula.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestEvalFormula()
call cursor(7, 15)
call tablemode#spreadsheet#formula#EvaluateFormulaLine()
call testify#assert#equals(&modified, 1)
let cell_value = tablemode#spreadsheet#cell#GetCell()
call testify#assert#equals(cell_value, '125.0')
endfunction
call testify#it('Should evaluate the formula correctly', function('s:TestEvalFormula'))

View File

@@ -0,0 +1,18 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_for_header.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestAddBorder()
call testify#assert#assert(!tablemode#table#IsHeader(2))
call tablemode#table#AddBorder(3)
call testify#assert#assert(tablemode#table#IsHeader(2))
call testify#assert#assert(tablemode#table#IsBorder(3))
call utils#TestUndo(s:test_file)
endfunction
call testify#it('AddBorder should be able to add borders correctly', function('s:TestAddBorder'))

View File

@@ -0,0 +1,37 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_for_header_unicode.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestAddBorder()
call tablemode#table#AddBorder(2)
call tablemode#table#AddBorder(4)
call tablemode#table#AddBorder(6)
call tablemode#table#AddBorder(8)
call tablemode#table#AddBorder(10)
call testify#assert#assert(tablemode#table#IsHeader(3))
call testify#assert#assert(tablemode#table#IsBorder(2))
call testify#assert#assert(tablemode#table#IsBorder(4))
call testify#assert#assert(tablemode#table#IsBorder(6))
call testify#assert#assert(tablemode#table#IsBorder(8))
call testify#assert#assert(tablemode#table#IsBorder(10))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(2)), tablemode#utils#StrDisplayWidth(getline(3)))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(3)), tablemode#utils#StrDisplayWidth(getline(4)))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(4)), tablemode#utils#StrDisplayWidth(getline(5)))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(5)), tablemode#utils#StrDisplayWidth(getline(6)))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(6)), tablemode#utils#StrDisplayWidth(getline(7)))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(7)), tablemode#utils#StrDisplayWidth(getline(8)))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(8)), tablemode#utils#StrDisplayWidth(getline(9)))
call testify#assert#equals(tablemode#utils#StrDisplayWidth(getline(9)), tablemode#utils#StrDisplayWidth(getline(10)))
call utils#TestUndo(s:test_file)
endfunction
call testify#it('AddBorder should be able to add borders correctly with unicode characters', function('s:TestAddBorder'))

View File

@@ -0,0 +1,21 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_with_header.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestIsBorder()
call testify#assert#assert(tablemode#table#IsBorder(2))
call testify#assert#assert(tablemode#table#IsBorder(4))
call testify#assert#assert(tablemode#table#IsBorder(7))
call testify#assert#assert(!tablemode#table#IsBorder(1))
call testify#assert#assert(!tablemode#table#IsBorder(3))
call testify#assert#assert(!tablemode#table#IsBorder(5))
call testify#assert#assert(!tablemode#table#IsBorder(6))
endfunction
call testify#it('IsBorder should be correct', function('s:TestIsBorder'))

View File

@@ -0,0 +1,21 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_with_header.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestIsHeader()
call testify#assert#assert(tablemode#table#IsHeader(3))
call testify#assert#assert(!tablemode#table#IsHeader(1))
call testify#assert#assert(!tablemode#table#IsHeader(2))
call testify#assert#assert(!tablemode#table#IsHeader(4))
call testify#assert#assert(!tablemode#table#IsHeader(5))
call testify#assert#assert(!tablemode#table#IsHeader(6))
call testify#assert#assert(!tablemode#table#IsHeader(7))
endfunction
call testify#it('IsHeader should be correct', function('s:TestIsHeader'))

View File

@@ -0,0 +1,18 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestIsRow()
call testify#assert#assert(tablemode#table#IsRow(3))
call testify#assert#assert(tablemode#table#IsRow(4))
call testify#assert#assert(!tablemode#table#IsRow(1))
call testify#assert#assert(!tablemode#table#IsRow(5))
endfunction
call testify#it('IsRow should be correct', function('s:TestIsRow'))

View File

@@ -0,0 +1,25 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_with_header.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestIsTable()
" when on row
call testify#assert#assert(tablemode#table#IsTable(2))
call testify#assert#assert(tablemode#table#IsTable(4))
call testify#assert#assert(tablemode#table#IsTable(7))
" when on border
call testify#assert#assert(tablemode#table#IsTable(3))
call testify#assert#assert(tablemode#table#IsTable(5))
call testify#assert#assert(tablemode#table#IsTable(6))
" when not in a table
call testify#assert#assert(!tablemode#table#IsTable(1))
endfunction
call testify#it('IsTable should be correct', function('s:TestIsTable'))

View File

@@ -0,0 +1,16 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_realign_before.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestRealign()
call tablemode#table#Realign(2)
call testify#assert#equals(getline(2, '$'), readfile('t/fixtures/table/sample_realign_after.txt'))
call utils#TestUndo(s:test_file)
endfunction
call testify#it('Realign should align table properly', function('s:TestRealign'))

View File

@@ -0,0 +1,16 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_header_realign_before.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestRealign()
call tablemode#table#Realign(2)
call testify#assert#equals(getline(2, '$'), readfile('t/fixtures/table/sample_header_realign_after.txt'))
call utils#TestUndo(s:test_file)
endfunction
call testify#it('Realign should align table properly with header realignments', function('s:TestRealign'))

View File

@@ -0,0 +1,16 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_header_realign_unicode_before.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestRealign()
call tablemode#table#Realign(2)
call testify#assert#equals(getline(2, '$'), readfile('t/fixtures/table/sample_header_realign_unicode_after.txt'))
call utils#TestUndo(s:test_file)
endfunction
call testify#it('Realign should align table properly with header realignments and unicode characters', function('s:TestRealign'))

View File

@@ -0,0 +1,16 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/table/sample_realign_unicode_before.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestRealign()
call tablemode#table#Realign(2)
call testify#assert#equals(getline(2, '$'), readfile('t/fixtures/table/sample_realign_unicode_after.txt'))
call utils#TestUndo(s:test_file)
endfunction
call testify#it('Realign should align table properly with unicode characters', function('s:TestRealign'))

View File

@@ -0,0 +1,27 @@
source t/config/options.vim
source t/utils.vim
let s:test_file = 't/fixtures/tableize.txt'
function! s:setup()
call utils#TestSetup(s:test_file)
endfunction
call testify#setup(function('s:setup'))
call testify#teardown(function('utils#TestTeardown'))
function! s:TestTabelize()
:3,4call tablemode#TableizeRange('')
call testify#assert#assert(tablemode#table#IsRow(3))
call testify#assert#equals(tablemode#spreadsheet#RowCount(3), 2)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount(3), 3)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('Tableize should tableize with default delimiter correctly', function('s:TestTabelize'))
function! s:TestTabelizeCustomDelimiter()
:3,4call tablemode#TableizeRange('/;')
call testify#assert#assert(tablemode#table#IsRow(3))
call testify#assert#equals(tablemode#spreadsheet#RowCount(3), 2)
call testify#assert#equals(tablemode#spreadsheet#ColumnCount(3), 2)
call utils#TestUndo(s:test_file)
endfunction
call testify#it('Tableize should tableize with custom delimiter correctly', function('s:TestTabelizeCustomDelimiter'))

View File

@@ -0,0 +1,24 @@
source t/config/options.vim
function! s:TestTablemodeEnable()
silent call tablemode#Enable()
call testify#assert#assert(b:table_mode_active)
endfunction
call testify#it('tablemode#Enable should work', function('s:TestTablemodeEnable'))
function! s:TestTablemodeDisable()
silent call tablemode#Disable()
call testify#assert#assert(!b:table_mode_active)
endfunction
call testify#it('tablemode#Disable should work', function('s:TestTablemodeDisable'))
function! s:TestTablemodeToggle()
if exists('b:table_mode_active')
call testify#assert#assert(!b:table_mode_active)
endif
silent call tablemode#Toggle()
call testify#assert#assert(b:table_mode_active)
silent call tablemode#Toggle()
call testify#assert#assert(!b:table_mode_active)
endfunction
call testify#it('tablemode#Toggle should work', function('s:TestTablemodeToggle'))

View File

@@ -1,135 +0,0 @@
" vim: fdm=indent
source t/config/options.vim
describe 'cell'
describe 'API'
before
new
read t/fixtures/sample.txt
end
it 'should return the cells with GetCells'
Expect tablemode#spreadsheet#cell#GetCells(2, 1, 1) ==# 'test11'
" Get Rows
Expect tablemode#spreadsheet#cell#GetCells(2, 1) == ['test11', 'test12']
Expect tablemode#spreadsheet#cell#GetCells(2, 2) == ['test21', 'test22']
" Get Columns
Expect tablemode#spreadsheet#cell#GetCells(2, 0, 1) == ['test11', 'test21']
Expect tablemode#spreadsheet#cell#GetCells(2, 0, 2) == ['test12', 'test22']
end
it 'should return the row with GetRow'
Expect tablemode#spreadsheet#cell#GetRow(1, 2) == ['test11', 'test12']
Expect tablemode#spreadsheet#cell#GetRow(2, 2) == ['test21', 'test22']
end
it 'should return the column with GetColumn'
Expect tablemode#spreadsheet#cell#GetColumn(1, 2) == ['test11', 'test21']
Expect tablemode#spreadsheet#cell#GetColumn(2, 2) == ['test12', 'test22']
end
it 'should return the cells in a range with GetCellRange'
" Entire table as range
Expect tablemode#spreadsheet#cell#GetCellRange('1,1:2,2', 2, 1) == [['test11', 'test21'], ['test12', 'test22']]
" Get Rows given different seed lines and columns
Expect tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 2, 1) == ['test11', 'test12']
Expect tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 2, 2) == ['test11', 'test12']
Expect tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 3, 1) == ['test11', 'test12']
Expect tablemode#spreadsheet#cell#GetCellRange('1,1:1,2', 3, 2) == ['test11', 'test12']
Expect tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 2, 1) == ['test21', 'test22']
Expect tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 2, 2) == ['test21', 'test22']
Expect tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 3, 1) == ['test21', 'test22']
Expect tablemode#spreadsheet#cell#GetCellRange('2,1:2,2', 3, 2) == ['test21', 'test22']
" Get Columns given different seed lines and column
Expect tablemode#spreadsheet#cell#GetCellRange('1:2', 2, 1) == ['test11', 'test21']
Expect tablemode#spreadsheet#cell#GetCellRange('1:2', 2, 2) == ['test12', 'test22']
Expect tablemode#spreadsheet#cell#GetCellRange('1:2', 3, 1) == ['test11', 'test21']
Expect tablemode#spreadsheet#cell#GetCellRange('1:2', 3, 2) == ['test12', 'test22']
" Get Column given negative values in range for representing rows from
" the end, -1 being the second last row.
Expect tablemode#spreadsheet#cell#GetCellRange('1:-1', 2, 1) == ['test11']
Expect tablemode#spreadsheet#cell#GetCellRange('1:-1', 3, 1) == ['test11']
Expect tablemode#spreadsheet#cell#GetCellRange('1:-1', 2, 2) == ['test12']
Expect tablemode#spreadsheet#cell#GetCellRange('1:-1', 3, 2) == ['test12']
end
end
describe 'Motions'
describe 'left or right'
before
new
normal! ggdG
read t/fixtures/sample.txt
call cursor(2, 3)
end
it 'should move left when not on first column'
call cursor(2, 12)
Expect tablemode#spreadsheet#ColumnNr('.') == 2
call tablemode#spreadsheet#cell#Motion('h')
Expect tablemode#spreadsheet#ColumnNr('.') == 1
end
it 'should move to the previous row last column if it exists when on first column'
call cursor(3, 3)
Expect tablemode#spreadsheet#RowNr('.') == 2
Expect tablemode#spreadsheet#ColumnNr('.') == 1
call tablemode#spreadsheet#cell#Motion('h')
Expect tablemode#spreadsheet#RowNr('.') == 1
Expect tablemode#spreadsheet#ColumnNr('.') == 2
end
it 'should move right when not on last column'
Expect tablemode#spreadsheet#ColumnNr('.') == 1
call tablemode#spreadsheet#cell#Motion('l')
Expect tablemode#spreadsheet#ColumnNr('.') == 2
end
it 'should move to the next row first column if it exists when on last column'
call cursor(2, 12)
Expect tablemode#spreadsheet#RowNr('.') == 1
Expect tablemode#spreadsheet#ColumnNr('.') == 2
call tablemode#spreadsheet#cell#Motion('l')
Expect tablemode#spreadsheet#RowNr('.') == 2
Expect tablemode#spreadsheet#ColumnNr('.') == 1
end
end
describe 'up or down'
before
new
normal! ggdG
read t/fixtures/sample.txt
call cursor(2, 3)
end
it 'should move a row up unless on first row'
call cursor(3, 3)
Expect tablemode#spreadsheet#RowNr('.') == 2
call tablemode#spreadsheet#cell#Motion('k')
Expect tablemode#spreadsheet#RowNr('.') == 1
end
it 'should remain on first row when trying to move up'
Expect tablemode#spreadsheet#RowNr('.') == 1
call tablemode#spreadsheet#cell#Motion('k')
Expect tablemode#spreadsheet#RowNr('.') == 1
end
it 'should move a row down unless on last row'
Expect tablemode#spreadsheet#RowNr('.') == 1
call tablemode#spreadsheet#cell#Motion('j')
Expect tablemode#spreadsheet#RowNr('.') == 2
end
it 'should remain on last row when trying to move down'
Expect tablemode#spreadsheet#RowNr('.') == 1
call tablemode#spreadsheet#cell#Motion('k')
Expect tablemode#spreadsheet#RowNr('.') == 1
end
end
end
end

View File

@@ -1,5 +1,6 @@
let g:table_mode_corner = '+'
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_fillchar = '-'
let g:table_mode_header_fillchar = '-'
@@ -35,3 +36,4 @@ let g:table_mode_syntax = 1
let g:table_mode_auto_align = 1
let g:table_mode_update_time = 500
let g:table_mode_tableize_auto_border = 0
let g:table_mode_ignore_align = 0

View File

@@ -1,7 +1,7 @@
| Item | Cost |
|----------+-------|
| Bread | 20 |
| Tomatoes | 5 |
| Pasta | 100 |
| Total | 0 |
/* tmf: $4,2=Sum(1:-1) */
| Item | Cost |
|----------+------|
| Bread | 20 |
| Tomatoes | 5 |
| Pasta | 100 |
| Total | 0 |
tmf: $4,2=Sum(1:-1)

View File

@@ -1,39 +0,0 @@
" vim: fdm=indent
source t/config/options.vim
describe 'Formulas'
describe 'Add Formula'
before
new
read t/fixtures/formula/sample.txt
end
it 'should add a formula successfully'
call cursor(6, 15)
call tablemode#spreadsheet#formula#Add("Sum(1:3)")
Expect tablemode#spreadsheet#cell#GetCell() == '125.0'
call cursor(8, 15)
Expect getline('.') == '/* tmf: $4,2=Sum(1:3) */'
call cursor(7, 15)
call tablemode#spreadsheet#formula#Add("Sum(1:-1)")
Expect tablemode#spreadsheet#cell#GetCell() == '250.0'
call cursor(8, 15)
Expect getline('.') == '/* tmf: $4,2=Sum(1:3); $5,2=Sum(1:-1) */'
end
end
describe 'Evaluate Formula'
before
new
read t/fixtures/formula/formula.txt
end
it 'should evaluate the formula successfull'
call cursor(6, 15)
call tablemode#spreadsheet#formula#EvaluateFormulaLine()
Expect &modified == 1
Expect tablemode#spreadsheet#cell#GetCell() == '125.0'
end
end
end

View File

@@ -1,341 +0,0 @@
" vim: fdm=indent
source t/config/options.vim
describe 'spreadsheet'
describe 'API'
before
new
read t/fixtures/sample.txt
end
it 'should return the row count'
Expect tablemode#spreadsheet#RowCount(2) == 2
Expect tablemode#spreadsheet#RowCount(3) == 2
end
it 'should return the row number'
Expect tablemode#spreadsheet#RowNr(2) == 1
Expect tablemode#spreadsheet#RowNr(3) == 2
end
it 'should return the column count'
Expect tablemode#spreadsheet#ColumnCount(2) == 2
Expect tablemode#spreadsheet#ColumnCount(3) == 2
end
it 'should return the column number'
call cursor(2,3)
Expect tablemode#spreadsheet#ColumnNr('.') == 1
call cursor(2,12)
Expect tablemode#spreadsheet#ColumnNr('.') == 2
end
it 'should return true when in the first cell'
call cursor(2,3)
Expect tablemode#spreadsheet#IsFirstCell() to_be_true
call cursor(2,12)
Expect tablemode#spreadsheet#IsFirstCell() to_be_false
end
it 'should return true when in the last cell'
call cursor(2,3)
Expect tablemode#spreadsheet#IsLastCell() to_be_false
call cursor(2,12)
Expect tablemode#spreadsheet#IsLastCell() to_be_true
end
it 'should return the line number of the first row'
Expect tablemode#spreadsheet#GetFirstRow(2) == 2
Expect tablemode#spreadsheet#GetFirstRow(3) == 2
end
it 'should return the line nuber of the last row'
Expect tablemode#spreadsheet#GetLastRow(2) == 3
Expect tablemode#spreadsheet#GetLastRow(3) == 3
end
describe 'Math'
before
new
read t/fixtures/cell/sample.txt
end
it 'should return the sum of cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#Sum('1:2') == 4.0
Expect tablemode#spreadsheet#Sum('1,1:1,2') == 3.0
Expect tablemode#spreadsheet#Sum('1,1:2,2') == 10.0
call cursor(2,7)
Expect tablemode#spreadsheet#Sum('1:2') == 6.0
Expect tablemode#spreadsheet#Sum('2,1:2,2') == 7.0
end
it 'should return the average of cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#Average('1:2') == 2.0
Expect tablemode#spreadsheet#Average('1,1:1,2') == 1.5
Expect tablemode#spreadsheet#Average('1,1:2,2') == 2.5
call cursor(2,7)
Expect tablemode#spreadsheet#Average('1:2') == 3.0
Expect tablemode#spreadsheet#Average('2,1:2,2') == 3.5
end
it 'should return the min of cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#Min('1:2') == 1.0
Expect tablemode#spreadsheet#Min('1,1:1,2') == 1.0
Expect tablemode#spreadsheet#Min('1,1:2,2') == 1.0
call cursor(2,7)
Expect tablemode#spreadsheet#Min('1:2') == 2.0
Expect tablemode#spreadsheet#Min('2,1:2,2') == 3.0
end
it 'should return the max of cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#Max('1:2') == 3.0
Expect tablemode#spreadsheet#Max('1,1:1,2') == 2.0
Expect tablemode#spreadsheet#Max('1,1:2,2') == 4.0
call cursor(2,7)
Expect tablemode#spreadsheet#Max('1:2') == 4.0
Expect tablemode#spreadsheet#Max('2,1:2,2') == 4.0
end
end
describe 'Count'
before
new
read t/fixtures/cell/counts.txt
end
it 'should return the count of empty cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#CountE('1:3') == 1
Expect tablemode#spreadsheet#CountE('1,1:1,3') == 0
Expect tablemode#spreadsheet#CountE('2,1:2,3') == 2
Expect tablemode#spreadsheet#CountE('1,1:3,3') == 2
call cursor(3,11)
Expect tablemode#spreadsheet#CountE('1:3') == 1
Expect tablemode#spreadsheet#CountE('3,1:3,3') == 0
end
it 'should return the count of not-empty cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#CountNE('1:3') == 2
Expect tablemode#spreadsheet#CountNE('1,1:1,3') == 3
Expect tablemode#spreadsheet#CountNE('2,1:2,3') == 1
Expect tablemode#spreadsheet#CountNE('1,1:3,3') == 7
call cursor(3,11)
Expect tablemode#spreadsheet#CountNE('1:3') == 2
Expect tablemode#spreadsheet#CountNE('3,1:3,3') == 3
end
it 'should return the percent count of empty cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#PercentE('1:3') == 33
Expect tablemode#spreadsheet#PercentE('1,1:1,3') == 0
Expect tablemode#spreadsheet#PercentE('2,1:2,3') == 66
Expect tablemode#spreadsheet#PercentE('1,1:3,3') == 22
call cursor(3,11)
Expect tablemode#spreadsheet#PercentE('1:3') == 33
Expect tablemode#spreadsheet#PercentE('3,1:3,3') == 0
end
it 'should return the percent count of not-empty cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#PercentNE('1:3') == 66
Expect tablemode#spreadsheet#PercentNE('1,1:1,3') == 100
Expect tablemode#spreadsheet#PercentNE('2,1:2,3') == 33
Expect tablemode#spreadsheet#PercentNE('1,1:3,3') == 77
call cursor(3,11)
Expect tablemode#spreadsheet#PercentNE('1:3') == 66
Expect tablemode#spreadsheet#PercentNE('3,1:3,3') == 100
end
it 'should return the average of not-empty cell range'
call cursor(1,3)
Expect tablemode#spreadsheet#AverageNE('1:3') == 2.5
Expect tablemode#spreadsheet#AverageNE('1,1:1,3') == 2.0
Expect tablemode#spreadsheet#AverageNE('2,1:2,3') == 0.0
Expect tablemode#spreadsheet#AverageNE('1,1:3,3') == 3.0
call cursor(3,11)
Expect tablemode#spreadsheet#AverageNE('1:3') == 4.5
Expect tablemode#spreadsheet#AverageNE('3,1:3,3') == 5.0
end
end
end
describe 'Manipulations'
before
new
normal! ggdG
read t/fixtures/sample.txt
call cursor(2, 3)
end
it 'should delete a row successfully'
Expect tablemode#spreadsheet#RowCount('.') == 2
call tablemode#spreadsheet#DeleteRow()
Expect tablemode#spreadsheet#RowCount('.') == 1
end
it 'should successfully delete column'
Expect tablemode#spreadsheet#ColumnCount('.') == 2
call tablemode#spreadsheet#DeleteColumn()
Expect tablemode#spreadsheet#ColumnCount('.') == 1
end
it 'should successfully insert a column before the cursor'
Expect tablemode#spreadsheet#ColumnCount('.') == 2
call tablemode#spreadsheet#InsertColumn(0)
Expect tablemode#spreadsheet#ColumnCount('.') == 3
Expect getline('.') == '| | test11 | test12 |'
end
it 'should successfully insert a column after the cursor'
normal! $
Expect tablemode#spreadsheet#ColumnCount('.') == 2
call tablemode#spreadsheet#InsertColumn(1)
Expect tablemode#spreadsheet#ColumnCount('.') == 3
Expect getline('.') == '| test11 | test12 | |'
end
end
describe 'Manipulation of tables with headers'
before
new
normal! ggdG
let g:table_mode_header_fillchar = '='
read t/fixtures/complex_header.txt
call cursor(4, 7)
end
it 'should successfully delete a row '
Expect tablemode#spreadsheet#RowCount('.') == 5
call tablemode#spreadsheet#DeleteRow()
Expect tablemode#spreadsheet#RowCount('.') == 4
Expect getline(4) == '| 2 | 8 | b | y |'
end
it 'should successfully delete a column'
Expect tablemode#spreadsheet#ColumnCount('.') == 4
call tablemode#spreadsheet#DeleteColumn()
Expect tablemode#spreadsheet#ColumnCount('.') == 3
Expect getline(4) == '| 9 | a | z |'
end
it 'should successfully insert a column before the cursor'
Expect tablemode#spreadsheet#ColumnCount('.') == 4
call tablemode#spreadsheet#InsertColumn(0)
Expect tablemode#spreadsheet#ColumnCount('.') == 5
Expect getline(4) == '| | 1 | 9 | a | z |'
end
it 'should successfully insert a column after the cursor'
normal! $
Expect tablemode#spreadsheet#ColumnCount('.') == 4
call tablemode#spreadsheet#InsertColumn(1)
Expect tablemode#spreadsheet#ColumnCount('.') == 5
Expect getline(4) == '| 1 | 9 | a | z | |'
end
end
describe 'Repeated Manipulations'
before
new
normal! ggdG
read t/fixtures/big_sample.txt
call cursor(2, 3)
end
it 'should delete multiple rows correctly'
Expect tablemode#spreadsheet#RowCount('.') == 5
.,.+1 call tablemode#spreadsheet#DeleteRow()
Expect tablemode#spreadsheet#RowCount('.') == 3
end
it 'should delete multiple columns correctly'
Expect tablemode#spreadsheet#ColumnCount('.') == 4
.,.+1 call tablemode#spreadsheet#DeleteColumn()
Expect tablemode#spreadsheet#ColumnCount('.') == 2
end
it 'should insert multiple columns before the cursor correctly'
call cursor(2, 7)
Expect tablemode#spreadsheet#ColumnCount('.') == 4
execute "normal! 2:\<C-u>call tablemode#spreadsheet#InsertColumn(0)\<CR>"
Expect tablemode#spreadsheet#ColumnCount('.') == 6
Expect getline('.') == '| 1 | | | 9 | a | z |'
end
it 'should insert multiple columns after the cursor correctly'
call cursor(2, 7)
Expect tablemode#spreadsheet#ColumnCount('.') == 4
execute "normal! 2:\<C-u>call tablemode#spreadsheet#InsertColumn(1)\<CR>"
Expect tablemode#spreadsheet#ColumnCount('.') == 6
Expect getline('.') == '| 1 | 9 | | | a | z |'
end
end
describe 'Unicode table separators'
before
new
normal! ggdG
read t/fixtures/table/sample_realign_unicode_after.txt
call cursor(2, 19)
end
it 'should not prevent the deletion of rows'
Expect tablemode#spreadsheet#RowCount('.') == 4
call tablemode#spreadsheet#DeleteRow()
Expect tablemode#spreadsheet#RowCount('.') == 3
end
it 'should not prevent the deletion of columns'
Expect tablemode#spreadsheet#ColumnCount('.') == 3
call tablemode#spreadsheet#DeleteColumn()
Expect tablemode#spreadsheet#ColumnCount('.') == 2
end
it 'should not prevent the insertion of columns before the cursor'
Expect tablemode#spreadsheet#ColumnCount('.') == 3
call tablemode#spreadsheet#InsertColumn(1)
Expect tablemode#spreadsheet#ColumnCount('.') == 4
end
it 'should not prevent the insertion of columns after the cursor'
Expect tablemode#spreadsheet#ColumnCount('.') == 3
call tablemode#spreadsheet#InsertColumn(1)
Expect tablemode#spreadsheet#ColumnCount('.') == 4
end
end
describe 'Escaped table separators'
before
new
normal! ggdG
read t/fixtures/escaped_seperator.txt
call cursor(2, 3)
end
it 'should not prevent the deletion of rows'
Expect tablemode#spreadsheet#RowCount('.') == 7
call tablemode#spreadsheet#DeleteRow()
Expect tablemode#spreadsheet#RowCount('.') == 6
Expect getline('.') == '| a separator. | |'
end
it 'should not prevent the deletion of columns'
Expect tablemode#spreadsheet#ColumnCount('.') == 2
call tablemode#spreadsheet#DeleteColumn()
Expect tablemode#spreadsheet#ColumnCount('.') == 1
Expect getline('.') == '| It can be escaped by a \. |'
end
it 'should not prevent the insertion of columns'
Expect tablemode#spreadsheet#ColumnCount('.') == 2
call tablemode#spreadsheet#InsertColumn(1)
Expect tablemode#spreadsheet#ColumnCount('.') == 3
Expect getline('.') == '| The \| works as | | It can be escaped by a \. |'
end
end
end

View File

@@ -1,184 +0,0 @@
" vim: fdm=indent
source t/config/options.vim
describe 'table'
describe 'IsRow'
before
new
normal! ggdG
read t/fixtures/table/sample.txt
end
it 'should be true when on a table row'
Expect tablemode#table#IsRow(2) to_be_true
Expect tablemode#table#IsRow(3) to_be_true
end
it 'should be false when not on a table row'
Expect tablemode#table#IsRow(1) to_be_false
Expect tablemode#table#IsRow(4) to_be_false
end
end
describe 'IsBorder'
before
new
normal! ggdG
read t/fixtures/table/sample_with_header.txt
end
it 'should be true on a table border'
Expect tablemode#table#IsBorder(1) to_be_true
Expect tablemode#table#IsBorder(3) to_be_true
Expect tablemode#table#IsBorder(6) to_be_true
end
it 'should be false when not on a table border'
Expect tablemode#table#IsBorder(2) to_be_false
Expect tablemode#table#IsBorder(4) to_be_false
Expect tablemode#table#IsBorder(5) to_be_false
end
end
describe 'IsTable'
before
new normal! ggdG
read t/fixtures/table/sample_with_header.txt
end
it 'should be true on a table row'
Expect tablemode#table#IsTable(2) to_be_true
Expect tablemode#table#IsTable(4) to_be_true
Expect tablemode#table#IsTable(5) to_be_true
end
it 'should be true when on a table border'
Expect tablemode#table#IsTable(1) to_be_true
Expect tablemode#table#IsTable(3) to_be_true
Expect tablemode#table#IsTable(6) to_be_true
end
it 'should not be true when not on a table'
Expect tablemode#table#IsTable(7) to_be_false
end
end
describe 'IsHeader'
before
new
normal! ggdG
read t/fixtures/table/sample_with_header.txt
end
it 'should be true on the table header'
Expect tablemode#table#IsHeader(2) to_be_true
end
it 'should be false anywhere else'
Expect tablemode#table#IsHeader(1) to_be_false
Expect tablemode#table#IsHeader(4) to_be_false
Expect tablemode#table#IsHeader(5) to_be_false
Expect tablemode#table#IsHeader(6) to_be_false
Expect tablemode#table#IsHeader(7) to_be_false
end
end
describe 'AddBorder'
before
new
normal! ggdG
read t/fixtures/table/sample_for_header.txt
end
it 'should add border to line'
call tablemode#table#AddBorder(2)
Expect tablemode#table#IsHeader(1) to_be_true
Expect tablemode#table#IsBorder(2) to_be_true
end
describe 'for unicode'
before
new
normal! ggdG
read t/fixtures/table/sample_for_header_unicode.txt
end
it 'should add border to line'
call tablemode#table#AddBorder(1)
call tablemode#table#AddBorder(3)
call tablemode#table#AddBorder(5)
call tablemode#table#AddBorder(7)
call tablemode#table#AddBorder(9)
Expect tablemode#table#IsBorder(1) to_be_true
Expect tablemode#utils#StrDisplayWidth(getline(1)) == tablemode#utils#StrDisplayWidth(getline(2))
Expect tablemode#table#IsBorder(3) to_be_true
Expect tablemode#utils#StrDisplayWidth(getline(3)) == tablemode#utils#StrDisplayWidth(getline(4))
Expect tablemode#table#IsBorder(5) to_be_true
Expect tablemode#utils#StrDisplayWidth(getline(5)) == tablemode#utils#StrDisplayWidth(getline(6))
Expect tablemode#table#IsBorder(7) to_be_true
Expect tablemode#utils#StrDisplayWidth(getline(7)) == tablemode#utils#StrDisplayWidth(getline(8))
Expect tablemode#table#IsBorder(9) to_be_true
Expect tablemode#utils#StrDisplayWidth(getline(9)) == tablemode#utils#StrDisplayWidth(getline(8))
end
end
end
describe 'Realign'
describe 'without header alignments'
describe 'for simple'
before
new
normal! ggdG
read t/fixtures/table/sample_realign_before.txt
end
it 'should be aligned properly'
call tablemode#table#Realign(1)
Expect getline(1,'$') == readfile('t/fixtures/table/sample_realign_after.txt')
end
end
describe 'for unicode'
before
new
normal! ggdG
read t/fixtures/table/sample_realign_unicode_before.txt
end
it 'should be aligned properly'
call tablemode#table#Realign(1)
Expect getline(1,'$') == readfile('t/fixtures/table/sample_realign_unicode_after.txt')
end
end
end
describe 'with header alignments'
describe 'for simple'
before
new
normal! ggdG
read t/fixtures/table/sample_header_realign_before.txt
end
it 'should be aligned properly'
call tablemode#table#Realign(1)
Expect getline(1,'$') == readfile('t/fixtures/table/sample_header_realign_after.txt')
end
end
describe 'for unicode'
before
new
normal! ggdG
read t/fixtures/table/sample_header_realign_unicode_before.txt
end
it 'should be aligned properly'
call tablemode#table#Realign(1)
Expect getline(1,'$') == readfile('t/fixtures/table/sample_header_realign_unicode_after.txt')
end
end
end
end
end

View File

@@ -1,56 +0,0 @@
" vim: fdm=indent
source t/config/options.vim
describe 'tablemode'
describe 'Activation'
describe 'tablemode#Enable()'
before
call tablemode#Enable()
end
it 'should enable table mode'
Expect b:table_mode_active to_be_true
end
end
describe 'tablemode#Disable()'
before
call tablemode#Disable()
end
it 'should disable table mode'
Expect b:table_mode_active to_be_false
end
end
describe 'tablemode#Toggle()'
it 'should toggle table mode'
call tablemode#Toggle()
Expect b:table_mode_active to_be_true
call tablemode#Toggle()
Expect b:table_mode_active to_be_false
end
end
end
describe 'Tableize'
before
new
read t/fixtures/tableize.txt
end
it 'should tableize with default delimiter'
:2,3call tablemode#TableizeRange('')
Expect tablemode#table#IsRow(2) to_be_true
Expect tablemode#spreadsheet#RowCount(2) == 2
Expect tablemode#spreadsheet#ColumnCount(2) == 3
end
it 'should tableize with given delimiter'
:2,3call tablemode#TableizeRange('/;')
Expect tablemode#table#IsRow(2) to_be_true
Expect tablemode#spreadsheet#RowCount(2) == 2
Expect tablemode#spreadsheet#ColumnCount(2) == 2
end
end
end

View File

@@ -1,45 +1,19 @@
" vim: fdm=indent
source t/config/options.vim
function! utils#TestSetup(file) abort
new
silent! exec 'read' a:file
endfunction
describe 'utils'
describe 'line'
it 'should return the current line number'
Expect tablemode#utils#line('.') == line('.')
end
function! utils#TestTeardown() abort
bw!
endfunction
it 'should return the line number itself if it is a number'
Expect tablemode#utils#line(1) == 1
end
end
function! utils#TestUndo(file) abort
:%delete
silent! exec 'read' a:file
endfunction
describe 'strip'
it 'should strip all initial or trailing whitespace from a string'
let string = ' This is awesome '
Expect tablemode#utils#strip(string) == 'This is awesome'
end
end
describe 'strlen'
it 'should return the length of a string correctly'
let string = 'this is a test'
Expect tablemode#utils#strlen(string) == 14
end
it 'should return the length of a unicode string correctly'
let string = '測試 is good.'
Expect tablemode#utils#strlen(string) == 11
end
end
describe 'strdisplaywidth'
it 'should return the display width of a string correctly'
let string = 'this is a test'
Expect tablemode#utils#StrDisplayWidth(string) == 14
end
it 'should return the display width of a unicode string correctly'
let string = '測試 is good.'
Expect tablemode#utils#StrDisplayWidth(string) == 13
end
end
end
function! utils#TableTest(tests) abort
for test in a:tests
call testify#assert#equals(test.actual, test.expected)
endfor
endfunction