Compare commits

...

48 Commits

Author SHA1 Message Date
Dhruva Sagar
5a6a9b3473 Fixed motions to wrap around edges incorporating table header 2013-10-07 15:07:55 +05:30
Dhruva Sagar
aa8817621c Fixed doc #11 2013-09-25 09:29:37 +05:30
Dhruva Sagar
54187d0be1 Updated Header Border to be like org-mode table header separator for consistency. 2013-09-19 16:53:28 +05:30
Dhruva Sagar
3e2eaeee5c Fixed delete column api with header changes 2013-09-19 15:03:13 +05:30
Dhruva Sagar
6dfc508af5 Fixed headerExpr to incorporate comments & spaces around header border 2013-09-19 13:55:07 +05:30
Dhruva Sagar
ed441f19a1 Added travis status to README 2013-09-19 13:26:42 +05:30
Dhruva Sagar
e4525c465a Fixed travis.yml file, issue with tabs 2013-09-19 13:24:20 +05:30
Dhruva Sagar
19bfa092a3 Updating CHANGELOG 2013-09-19 13:23:19 +05:30
Dhruva Sagar
f91ec2458f Updated README & CHANGELOG 2013-09-19 12:33:28 +05:30
Dhruva Sagar
0799523ffb Releasing v3.2
* Added tests to test various use cases
* Added .travis.yml for travis integration
2013-09-19 12:28:47 +05:30
Dhruva Sagar
9875a117a7 Fixed iabbrev 2013-09-19 07:04:12 +05:30
Dhruva Sagar
cca55e72ce Releasing Table Mode v3.1
* Removed table border and related options. You can now optionally have
  a header instead, simply add a table header and add a border to it
  triggered by the vim iabbrev '+-' on the line immidiately after the
  header and it will expand to the correct border. It will auto update
  as the table realigns with changes. Similar approach as followed by
  tables in org-mode.
* Fixed bug of incorrect indentation of a newly added formula line.
* Fixed bug in ConvertDelimiterToSeparator causing incorrect
  tableization of commented blocks of delimited content.
2013-09-19 02:10:49 +05:30
Dhruva Sagar
eed25aee91 Removed unnecessary closing markers for folds 2013-06-10 09:56:54 +05:30
Dhruva Sagar
0683cec58c Added more error checks in GetCells 2013-05-22 07:36:53 +05:30
Dhruva Sagar
27544e168a Fixed s:Sum
Was previously converting to integer so loosing float data after decimal
place, converting to float instead now.
2013-05-21 14:40:54 +05:30
Dhruva Sagar
e4af7200ff Fixed function EvaluateExpr
- Added support for column references in current row when defining
  formulas for individual cells.
2013-05-21 14:32:02 +05:30
Dhruva Sagar
3cea0bbaba Minor Fixes
- Updated s:EndExpr() to include \s\+ within optional escaped comment so
  that the space is also matched.
- Fixed Formula addition in case of double comment (start and end) are
  required, eg) in c/c++.
- Parsing expr row/column numbers from string correctly.
2013-05-20 16:38:31 +05:30
Dhruva Sagar
8931891845 Updated README 2013-05-20 12:49:32 +05:30
Dhruva Sagar
0810512c54 Fixed #8
- Renamed option for eval_expr.
- Defined a new option `g:table_mode_map_prefix` set to `<Leader>t` by
  default to be used as a prefix for all other table mode commands.
- Updated docs to reflect the same.
- Updated README.
2013-05-18 03:58:03 +05:30
Dhruva Sagar
4606d9c637 Fixed s:GetCommentEnd(), s:EndCommentExpr()
Also fixed s:ConvertDelimiterToSeparator() such that it doesn't mess up
the end comment and draws the border before it.
2013-05-18 03:34:02 +05:30
Dhruva Sagar
9ff1b37210 Updated README 2013-05-18 02:55:22 +05:30
Dhruva Sagar
287f45cfa2 Updated README 2013-05-17 17:32:30 +05:30
Dhruva Sagar
1ce3ec4e7f Fixed Table Mode
- Several New Updates weren't working properly for commented tables.
  Fixed & improved the API to work accurately for commented tables.
2013-05-17 17:13:56 +05:30
Dhruva Sagar
34e271b24a Updated README, fixed expr evaluator 2013-05-17 14:12:44 +05:30
Dhruva Sagar
d0d9d1d4f6 Updated README.md
- Removed requirement of dependence on Tabular since table-mode is no
  longer dependent on the same.
2013-05-17 10:29:03 +05:30
Dhruva Sagar
41fa837437 Updated README.md
- Added another example expression.
2013-05-17 10:26:38 +05:30
Dhruva Sagar
fb63484e47 Updated CHANGELOG & doc/table-mode.txt 2013-05-17 10:00:00 +05:30
Dhruva Sagar
51c108188c Updated README.md 2013-05-17 09:34:19 +05:30
Dhruva Sagar
974d506484 Merge branch 'feature/table-formulas' 2013-05-17 07:48:38 +05:30
Dhruva Sagar
dd38fcfeeb Releasing v3.0
- Added feature to define & add formula expressions to table and
  calculate them.
- Persist the fomulas as comments as line right after table.
2013-05-17 07:45:49 +05:30
Dhruva Sagar
94a76dc0f7 Merge branch 'master' of github.com:dhruvasagar/vim-table-mode into feature/table-formulas
Conflicts:
	autoload/tablemode.vim
2013-05-16 15:50:56 +05:30
Dhruva Sagar
eba2481798 Fine tuning & formatting 2013-05-16 14:49:03 +05:30
Dhruva Sagar
edfb221b3e Removed dependence on Tabular for more control.
- Right align numbers automatically.
2013-05-15 23:16:34 +05:30
Dhruva Sagar
e9d9030cbb Updated Table Formulas
- Added single function for both command & mapping to take formula from
  input.
- Reusing g:table_mode_align for formatting table content, which was
  missed when moving from :Tableize to tabular#TabularizeStrings
- Correctly parsing ranges as strings.
2013-05-14 19:35:00 +05:30
Dhruva Sagar
2bde444575 First Cut of Table Formulas 2013-05-13 18:34:00 +05:30
Dhruva Sagar
def9a08623 Merge pull request #7 from mhinz/master
only small improvements
2013-05-07 06:04:19 -07:00
Marco Hinz
57a49efe7e Improve modeline settings 2013-05-07 14:47:56 +02:00
Marco Hinz
af55d03e14 Adhere to common conventions 2013-05-07 14:47:34 +02:00
Dhruva Sagar
cb21c1626c Minor refactoring 2013-05-07 15:17:37 +05:30
Dhruva Sagar
4e8e87256b Updated README.md 2013-05-05 22:52:03 +05:30
Dhruva Sagar
88edc35ea6 Updated README.md 2013-05-05 12:11:51 +05:30
Dhruva Sagar
87a713efb7 Releasing v2.4.0
- Added table cell text object.
- Added api to delete table row.
- Added api to delete table column.
- Updated doc/table-mode.txt
- Updated CHANGELOG.md
2013-05-05 08:47:21 +05:30
Dhruva Sagar
272bef4ce0 Releasing v2.3.0
- Refactored realignment logic.
- Generating borders by hand rather than relying on
  tabular formatting since that puts restrictions on the borders
  (padding). With the new scheme, I am able to generate good looking
  tables with neat borders like they should be, without padding.
- Updated doc/table-mode.txt
2013-05-04 03:23:20 +05:30
Dhruva Sagar
7c4039e5e1 Updated Table Mode Public API
- Added tablemode#RowCount(line). Returns the total number of rows in a
  table given a line (row).
- Added tablemode#ColumnCount(line). Returns the total number of columns
  in a line (row).
- Added tablemode#RowNr(line). Returns the row number on given line.
- Added tablemode#ColumnNr(line). Returns the column on given line.
2013-05-03 16:22:20 +05:30
Dhruva Sagar
28b13a32ab Fixed #6
- Realign now updates table borders as well.
2013-05-01 12:08:39 +05:30
Dhruva Sagar
599a39c28d Updated documentation 2013-05-01 02:30:24 +05:30
Dhruva Sagar
241d0ccba0 Finished #6
- Updated doc.
- Bumped version.
- Added a mapping for realigning table columns.
- Added mapping for moving to next / prev row / column.
2013-05-01 01:57:47 +05:30
Dhruva Sagar
ef3e5323d0 Fixed bugs
- Covered case when commentstring is not set (default).
- Escaping commentstring symbols.
2013-04-09 10:53:57 +05:30
12 changed files with 1537 additions and 201 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
tags
.vim-flavor/

4
.travis.yml Normal file
View File

@@ -0,0 +1,4 @@
language: ruby
rvm:
- 1.9.3
script: rake ci

View File

@@ -1,4 +1,33 @@
# Change Log
## Version 3.2
* Added tests to test various use cases using <a
href='https://github.com/kana/vim-vspec'>Vspec</a>..
* Added travis integration for automated tests.
## Version 3.1
* Removed borders. You can now optionally create a table header by simply
adding a header border immidiately after the header line by using the
iabbrev trigger '+-'. Just type that on the line immidiately after the
header and press space / \<CR\> to complete the header border.
* Some Bug Fixes
## Version 3.0
* Removed dependence on Tabular and added code borrowed from Tabular for
aligning the table rows.
* Added feature to be able to define & evaluate formulas.
## Version 2.4.0
* Added Table Cell text object.
* Added api to delete entire table row.
* Added api to delete entire table column.
## Version 2.3.0
* Refactored realignment logic. Generating borders by hand.
## Version 2.2.2
* Added mapping for realigning table columns.
* Added table motions to move around in the table.
## Version 2.2.1
* Added feature to allow Table-Mode to work within comments. Uses
'commentstring' option of vim to identify comments, so it should work for
@@ -17,7 +46,7 @@
* Bug Fixes #2, #3 & #4
## Version 2.1.1 :
* Added option g:table_mode_align to allow setting Tabular format option for
* Added option `g:table_mode_align` to allow setting Tabular format option for
more control on how Tabular aligns text.
## Version 2.1 :

4
Gemfile Normal file
View File

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

18
Gemfile.lock Normal file
View File

@@ -0,0 +1,18 @@
GEM
remote: https://rubygems.org/
specs:
blankslate (2.1.2.4)
parslet (1.5.0)
blankslate (~> 2.0)
rake (10.1.0)
thor (0.18.1)
vim-flavor (1.1.2)
parslet (~> 1.0)
thor (~> 0.14)
PLATFORMS
ruby
DEPENDENCIES
rake
vim-flavor (~> 1.1)

171
README.md
View File

@@ -1,4 +1,4 @@
# VIM Table Mode
# VIM Table Mode [![Build Status](https://travis-ci.org/dhruvasagar/soulmate_rails.png?branch=master)](https://travis-ci.org/dhruvasagar/soulmate_rails)
An awesome automatic table creator & formatter allowing one to create neat
tables as you type.
@@ -11,53 +11,165 @@ CHANGELOG.md </a>
## Getting Started
### Installation
There are 2 ways to do this
There are several ways to do this
1. I recommend installing <a
href="https://github.com/tpope/vim-pathogen">pathogen.vim</a> and then
adding a git submodule for your plugin:
href="https://github.com/Shougo/neobundle.vim">NeoBundle</a> and then just
add `NeoBundle 'dhruvasagar/vim-table-mode'` to your ~/.vimrc
2. If you are using <a
href="https://github.com/tpope/vim-pathogen">pathogen.vim</a>, then
add a git submodule for your plugin:
```sh
$ cd ~/.vim
$ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode
```
2. Copy autoload/todomode.vim, plugin/todo-mode.vim, doc/todo-mode.txt to
3. Copy autoload/todomode.vim, plugin/todo-mode.vim, doc/todo-mode.txt to
respective ~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or
vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and
restart VIM
### Requirements
Depends on <a href="https://github.com/godlygeek/tabular">Tabular</a>. Make
sure Tabular is installed and loaded into your runtime to ensure this works.
### Usage
- On the fly table creation :
- **On the fly table creation** :
By default the table column separator is '|' (it can be changed). As soon as
you type it on a new line (ignores indentation) the script gets to work on
creating a table around it. As you type and define more columns, the table
is completed, formatted and aligned automatically on the fly.
By default the table column separator is `|` defined by the
`g:table_mode_separator` option. As soon as you type it on a new line (ignores
indentation) the script gets to work on creating a table around it. As you
type and define more columns, the table is completed, formatted and aligned
automatically on the fly.
Since this could lead to unwanted behavior I have disabled table mode by
default. You would have to use `:TableModeToggle` command or the table mode
toggle mapping, which is `<Leader>tm` by default to toggle the table mode or
you can directly use `:TableModeEnable` and `:TableModeDisable` to enable or
disable the table mode. This is on a per buffer basis and so it does not
cause any unusual behavior unless enabled explicitly. Please read `:h
table-mode` for further information.
- Format existing content into a table :
default. You have to use `:TableModeToggle` command or the table mode
toggle mapping, which is `<Leader>tm` defined by `g:table_mode_toggle_map`
option to toggle the table mode or you can directly use `:TableModeEnable`
and `:TableModeDisable` to enable or disable the table mode. This is on a
per buffer basis and so it does not cause any unusual behavior unless it is
enabled explicitly. Please read `:h table-mode` for further information.
- **Format existing content into a table** :
Table Mode wouldn't justify it's name if it didn't allow formatting
existing content into a table. And it does as promised. Like table creation
on the fly as you type, formatting existing content into a table is equally
simple. You can visually select multiple lines and call `:Tableize` on it, or
alternatively use the mapping `<Leader>T` (this is configurable). `:Tableize`
accepts a range and so you can also call it by giving lines manually like
`:line1,line2Tableize`, but this is not that intuitive. You can also use
the mapping `<Leader>T` with a `[count]` to apply it to the next `[count]`
lines in usual vim style.
simple. You can visually select multiple lines and call `:Tableize` on it,
or alternatively use the mapping `<Leader>tt` defined by the
`g:table_mode_tableize_map` option which would convert CSV (Comma Separated
Value) data into a table and use `,` defined by `g:table_mode_delimiter`
option 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 use tabular (eg.
`:Tableize/;` uses ';' as the delimiter) or use the mapping `<Leader>T`
defined by `g:table_mode_tableize_op_map` option which takes input in the
cmd-line and uses the `{pattern}` input as the delimiter.
`:Tableize` also accepts a range and so you can also call it by giving
lines manually like `:line1,line2Tableize`, but this is not very intuitive.
You can use the mapping `<Leader>T` with a `[count]` to apply it to the
next `[count]` lines in standard vim style.
- **Move between cells** :
Now you can move between cells using table mode motions `<Leader>t[hjkl]`
to move left | down | up | right cells respectively. You can use
`g:table_mode_map_prefix` option to define the prefix mapping to be used
before 'hjkl'. 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** :
Tableize provides a text object for manipulating table cells. By default
it's `tc`, but that can be changed if you wish to by setting the
`g:table_mode_cell_text_object` option.
This is intelligent in the sense that if you use it to delete the
contents it will delete everything till the `g:table_mode_separator` so
that the cell is removed and you can enter new stuff if you wish to (had
you used 'c' operator), having to input the `g:table_mode_separator`
again to form the cell & realign it (since it can't be done from the
text object itself). However if you were to 'y' or yank the text, it
would copy the right text, i.e. the contents of the cell and nothing
else.
- **Delete Row** :
You can use the `<Leader>tdd` 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 just like you would with 'dd'.
- **Delete Column** :
You can use the `<Leader>tdc` 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.
- **Table 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 `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 evaluate the formula line using `:TableEvalFormulaLine` or the
mapping `<Leader>tfe` defined by the option `g:table_mode_eval_expr_map`
from anywhere inside the table or while on the formula line.
- **Formula Expressions** :
Expressions are of the format `$target = formula`.
- 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.
- `$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.
- 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,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`
### Demo
@@ -81,5 +193,4 @@ 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>.
Also a shout out to godlygeek who developed the incredible <a
href="http://github.com/godlygeek/tabular">Tabular</a> plugin which does most
of the grunt work behind the scenes.
href="http://github.com/godlygeek/tabular">Tabular</a> plugin.

13
Rakefile Normal file
View File

@@ -0,0 +1,13 @@
#!/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

1
VimFlavor.lock Normal file
View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting. v2.2.1
*table-mode.txt* Table Mode for easy table formatting. v3.2
===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 2.2.1
VERSION 3.2
Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/>
@@ -9,13 +9,12 @@
CONTENTS *table-mode-contents*
1. Introduction .................... |table-mode-introduction|
2. Requirements .................... |table-mode-requirements|
3. Getting Started ................. |table-mode-getting-started|
4. Options ......................... |table-mode-options|
5. Mappings ........................ |table-mode-mappings|
6. Commands ........................ |table-mode-commands|
7. Contributing .................... |table-mode-contributing|
8. Report Issues ................... |table-mode-report-issues|
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*
@@ -25,53 +24,135 @@ 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.
===============================================================================
REQUIREMENTS *table-mode-requirements*
This depends on the Tabular plugin - https://github.com/godlygeek/tabular,
make sure it is installed and loaded.
===============================================================================
GETTING STARTED *table-mode-getting-started*
Using Table Mode is dead simple. You simply start typing on a new line with
the table separator - |g: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.
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.
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
|g:table-mode-always-active| if you wish.
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.
Tableize content:
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
'<Leader>t[hjkl]' to move left | down | up | right cells respectively.
You can use |table-mode-map-prefix| option to define the prefix
mapping to be used before 'hjkl'. 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.
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|
Table 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 immidiately 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 evaluate the formula line using |:TableEvalFormulaLine| or the
mapping |<Leader>tfe| defined by the option |table-mode-expr-calc-map|
Formula Expressions :
Expressions are of the format '$target = formula'.
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.
'$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.
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 'Sum' and 'Average'. Both these functions take a
range as input. A range can be of two forms :
'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).
'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)
===============================================================================
OPTIONS *table-mode-options*
Overview:
|table-mode-loaded| ............. Disable the plugin.
|table-mode-border| ............. Enable border.
|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-tableize-map| ....... Set mapping for Tableize.
|table-mode-tableize-op-map| .... Set mapping for Tableize with input.
|table-mode-align| .............. Set the text alignment for
Tableize.
|table-mode-no-border-padding| .. Set for no border padding.
|table-mode-realign-map| ........ Set mapping for table realigning.
|table-mode-cell-text-object| ... Set mapping for table cell object.
|table-mode-delete-row-map| ..... Set mapping for deleting table row.
|table-mode-delete-column-map| .. Set mapping for deleting table
column.
|table-mode-add-formula-map| .... Define a new table formula for the
current cell.
|table-mode-eval-expr-map| ...... Evaluate formula line and update
table.
g:table_mode_loaded *table-mode-loaded*
g:loaded_table_mode *table-mode-loaded*
Use this option to disable the plugin: >
let g:table_mode_loaded = 1
let g:loaded_table_mode = 1
<
g:table_mode_border *table-mode-border*
Use this option to enable / disable table border: >
let g:table_mode_border = 1
<
g:table_mode_corner *table-mode-corner*
Use this option to define the table corner character: >
let g:table_mode_corner = '+'
@@ -84,16 +165,25 @@ g:table_mode_separator *table-mode-separator*
table row in insert mode.
g:table_mode_fillchar *table-mode-fillchar*
Use this option to define the table border fill character: >
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 = '<Leader>tm'
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
@@ -114,7 +204,7 @@ g:table_mode_delimiter *table-mode-delimiter*
g:table_mode_tableize_map *table-mode-tableize-map*
Use this option to define the mapping to invoke |:Tableize| with
default delimiter, i.e. |:Tableize| without input. >
let g:table_mode_tableize_map = '<Leader>tt'
let g:table_mode_tableize_map = 't'
<
g:table_mode_tableize_op_map *table-mode-tableize-op-map*
@@ -124,23 +214,71 @@ g:table_mode_tableize_op_map *table-mode-tableize-op-map*
let g:table_mode_tableize_op_map = '<Leader>T'
<
g:table_mode_align *table-mode-align*
Use this option to define the format for text alignment to be used for
the tables. Go through |tabular-walkthrough| for details on how to set
the format options for alignment. >
let g:table_mode_align = 'l1'
g:table_mode_realign_map *table-mode-realign-map*
Use this option to define the mapping for realigning table columns.
This is useful in case you make edits to an existing table. >
let g:table_mode_realign_map = 'r'
<
NOTE you will need to use the |table-mode-map-prefix| before this to
get the desired effect.
g:table_mode_no_border_padding *table-mode-no-border-padding*
Use this option to remove the border padding (extra spaces around the
|table-mode-fillchar|). >
let g:table_mode_no_border_padding = 0
g:table_mode_cell_text_object *table-mode-cell-text-object*
Use this option to define the table mode cell text object. >
let g:table_mode_cell_text_object = 'tc'
<
NOTE this option changes |table-mode-align| to 'c0', so that
there is no extra padding around the contents.
This text object automatically selects different text depending on the
context.
If you delete the cell using either the 'd' or the 'c'
operator, it will delete cell contents along with the table separator.
In case you do it with 'c' while you add new content for the cell, you
will have to re-add the |table-mode-separator|, which will trigger the
re-alignment of the table again and format it correctly.
If you simply want to yank the table content, this text object will
select only the table cell contents, without the padding (extra space
around the text) or the |table-mode-separator|.
g:table_mode_delete_row_map *table-mode-delete-row-map*
Use this option to define the mapping for deletion of the entire table
row. You can delete multiple rows by preceeding this with a [count]. >
let g:table_mode_delete_column_map = 'dd'
<
NOTE you will need to use the |table-mode-map-prefix| before this to
get the desired effect.
g:table_mode_delete_column_map *table-mode-delete-column-map*
Use this option to define the mapping for deletion of the entire table
column. You can delete multiple columns to the right by preceeding
this with a [count] >
let g:table_mode_delete_column_map = 'dc'
<
NOTE you will need to use the |table-mode-map-prefix| before this to
get the desired effect.
g:table_mode_add_formula_map *table-mode-add-formula-map*
Use this option to define the mapping for invoking |TableAddFormula|
command. >
let g:table_mode_add_formula_map = 'fa'
<
NOTE you will need to use the |table-mode-map-prefix| before this to
get the desired effect.
g:table_mode_eval_expr_map *table-mode-eval-expr-map*
Use this option to define the mapping for invoking
|TableEvalFormulaLine| command. >
let g:table_mode_eval_expr_map = 'fe'
<
NOTE you will need to use the |table-mode-map-prefix| before this to
get the desired effect.
===============================================================================
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-toggle*
<Leader>tm Toggle table mode for the current buffer. You can change this
using the |toggle-mode-options-toggle-map| option.
@@ -159,6 +297,38 @@ MAPPINGS *table-mode-mappings*
<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-motions*
<Leader>t[hjkl] Move to previous | below | above | right cell in the table.
*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-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.
+- Expands to a header border, the line immidiately above this
will be considered as the table header. You can change this by
changing |table-mode-corner| and |table-mode-fillchar|
options. This is an iabbrev so is triggered when you press
space or <CR> after typing the mapping.
===============================================================================
COMMANDS *table-mode-commands*
@@ -200,7 +370,22 @@ COMMANDS *table-mode-commands*
The above command will Tableize using ';' as the delimiter.
NOTE this is optional, by default without the expression it will
tableize the content using |g:table-mode-delimiter| as the delimiter.
tableize the content using |table-mode-delimiter| as the delimiter.
*: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.
*: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.
===============================================================================
CONTRIBUTING *table-mode-contributing*
@@ -214,4 +399,4 @@ REPORT ISSUES *table-mode-report-issues*
If you discover any issues, please report them at
http://github.com/dhruvasagar/table-mode/issues.
vim:tw=78:ts=8:ft=help:norl:
vim:tw=78:ts=8:ft=help:norl:ai

View File

@@ -4,7 +4,7 @@
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: http://github.com/dhruvasagar/vim-table-mode
" Version: 2.2.1
" Version: 3.2
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope and
" uses a small amount of code from it.
@@ -20,48 +20,48 @@
" =============================================================================
" Finish if already loaded {{{1
if exists('g:table_mode_loaded')
if exists('g:loaded_table_mode')
finish
endif
let g:table_mode_loaded = 1
"}}}1
"
" Finish if Tabularize plugin is not available {{{1
if !exists(':Tabularize')
echoerr 'Table Mode depends on Tabularize, ensure that is installed first.'
finish
endif
" }}}1
let g:loaded_table_mode = 1
" Avoiding side effects {{{1
let s:save_cpo = &cpo
set cpo&vim
" }}}1
function! s:SetGlobalOptDefault(opt, val) "{{{1
if !exists('g:' . a:opt)
let g:{a:opt} = a:val
endif
endfunction
" }}}1
" Set Global Defaults {{{1
call s:SetGlobalOptDefault('table_mode_border', 1)
call s:SetGlobalOptDefault('table_mode_corner', '+')
call s:SetGlobalOptDefault('table_mode_separator', '|')
call s:SetGlobalOptDefault('table_mode_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_toggle_map', '<LocalLeader>tm')
call s:SetGlobalOptDefault('table_mode_map_prefix', '<Leader>t')
call s:SetGlobalOptDefault('table_mode_toggle_map', 'm')
call s:SetGlobalOptDefault('table_mode_always_active', 0)
call s:SetGlobalOptDefault('table_mode_delimiter', ',')
call s:SetGlobalOptDefault('table_mode_tableize_map', '<Leader>tt')
call s:SetGlobalOptDefault('table_mode_tableize_map', 't')
call s:SetGlobalOptDefault('table_mode_tableize_op_map', '<Leader>T')
call s:SetGlobalOptDefault('table_mode_align', 'l1')
call s:SetGlobalOptDefault('table_mode_no_border_padding', '0')
"}}}1
call s:SetGlobalOptDefault('table_mode_realign_map', 'r')
call s:SetGlobalOptDefault('table_mode_cell_text_object', 'tc')
call s:SetGlobalOptDefault('table_mode_delete_row_map', 'dd')
call s:SetGlobalOptDefault('table_mode_delete_column_map', 'dc')
call s:SetGlobalOptDefault('table_mode_add_formula_map', 'fa')
call s:SetGlobalOptDefault('table_mode_eval_expr_map', 'fe')
function! s:TableMotion() "{{{1
let direction = nr2char(getchar())
for i in range(v:count1)
call tablemode#TableMotion(direction)
endfor
endfunction
" Define Commands & Mappings {{{1
if !g:table_mode_always_active
exec "nnoremap <silent> " . g:table_mode_toggle_map .
if !g:table_mode_always_active "{{{2
exec "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_toggle_map .
\ " <Esc>:call tablemode#TableModeToggle()<CR>"
command! -nargs=0 TableModeToggle call tablemode#TableModeToggle()
command! -nargs=0 TableModeEnable call tablemode#TableModeEnable()
@@ -75,16 +75,36 @@ else
\ table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
unlet table_mode_separator_map
endif
" }}}2
command! -nargs=? -range Tableize <line1>,<line2>call tablemode#TableizeRange(<q-args>)
execute "xnoremap <silent> " . g:table_mode_tableize_map . " :Tableize<CR>"
execute "nnoremap <silent> " . g:table_mode_tableize_map . " :Tableize<CR>"
execute "xnoremap <silent> " . g:table_mode_tableize_op_map . " :<C-U>call tablemode#TableizeByDelimiter()<CR>"
"}}}1
command! TableAddFormula call tablemode#AddFormula()
command! TableEvalFormulaLine call tablemode#EvaluateFormulaLine()
execute "xnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_tableize_map .
\ " :Tableize<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_tableize_map .
\ " :Tableize<CR>"
execute "xnoremap <silent> " . g:table_mode_tableize_op_map .
\ " :<C-U>call tablemode#TableizeByDelimiter()<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_realign_map .
\ " :call tablemode#TableRealign('.')<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix .
\ " :call <SID>TableMotion()<CR>"
execute "onoremap <silent> " . g:table_mode_cell_text_object .
\ " :<C-U>call tablemode#CellTextObject()<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_delete_row_map .
\ " :call tablemode#DeleteRow()<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_delete_column_map .
\ " :call tablemode#DeleteColumn()<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_add_formula_map .
\ " :TableAddFormula<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_eval_expr_map .
\ " :TableEvalFormulaLine<CR>"
" Avoiding side effects {{{1
let &cpo = s:save_cpo
" }}}1
" ModeLine {{{
" vim:fdl=0 fdm=marker
" vim: sw=2 sts=2 fdl=0 fdm=marker

162
t/tablemode.vim Normal file
View File

@@ -0,0 +1,162 @@
let g:table_mode_corner = '+'
let g:table_mode_separator = '|'
let g:table_mode_fillchar = '-'
let g:table_mode_map_prefix = '<Leader>t'
let g:table_mode_toggle_map = 'm'
let g:table_mode_always_active = 0
let g:table_mode_delimiter = ','
let g:table_mode_tableize_map = 't'
let g:table_mode_tableize_op_map = '<Leader>T'
let g:table_mode_realign_map = 'r'
let g:table_mode_cell_text_object = 'tc'
let g:table_mode_delete_row_map = 'dd'
let g:table_mode_delete_column_map = 'dc'
let g:table_mode_add_formula_map = 'fa'
let g:table_mode_eval_expr_map = 'fe'
call vspec#hint({'scope': 'tablemode#scope()', 'sid': 'tablemode#sid()'})
describe 'tablemode'
describe 'Activation'
describe 'tablemode#TableModeEnable()'
before
call tablemode#TableModeEnable()
end
it 'should enable table mode'
Expect b:table_mode_active to_be_true
end
end
describe 'tablemode#TableModeDisable()'
before
call tablemode#TableModeDisable()
end
it 'should disable table mode'
Expect b:table_mode_active to_be_false
end
end
describe 'tablemode#TableModeToggle()'
it 'should toggle table mode'
call tablemode#TableModeToggle()
Expect b:table_mode_active to_be_true
call tablemode#TableModeToggle()
Expect b:table_mode_active to_be_false
end
end
end
describe 'API'
before
normal! ggdG
call tablemode#TableModeEnable()
normal! i
|test11|test12|
|test21|test22|
end
it 'should return true when inside a table'
Expect tablemode#IsATableRow(2) to_be_true
end
it 'should return false when outside a table'
Expect tablemode#IsATableRow(4) to_be_false
end
it 'should return the row count'
Expect tablemode#RowCount(2) == 2
Expect tablemode#RowCount(3) == 2
end
it 'should return the row number'
Expect tablemode#RowNr(2) == 1
Expect tablemode#RowNr(3) == 2
end
it 'should return the column count'
Expect tablemode#ColumnCount(2) == 2
Expect tablemode#ColumnCount(3) == 2
end
it 'should return the line number of the first row'
Expect tablemode#GetFirstRow(2) == 2
Expect tablemode#GetFirstRow(3) == 2
end
it 'should return the line nuber of the last row'
Expect tablemode#GetLastRow(2) == 3
Expect tablemode#GetLastRow(3) == 3
end
it 'should return the cells'
Expect Call('s:GetCells', 2, 1, 1) ==# 'test11'
" Get Rows
Expect Call('s:GetCells', 2, 1) == ['test11', 'test12']
Expect Call('s:GetCells', 2, 2) == ['test21', 'test22']
" Get Columns
Expect Call('s:GetCells', 2, 0, 1) == ['test11', 'test21']
Expect Call('s:GetCells', 2, 0, 2) == ['test12', 'test22']
end
it 'should return the cells in a range'
" Entire table as range
Expect Call('s:GetCellRange', '1,1:2,2', 2, 1) == [['test11', 'test21'], ['test12', 'test22']]
" Get Rows given different seed lines and columns
Expect Call('s:GetCellRange', '1,1:1,2', 2, 1) == ['test11', 'test12']
Expect Call('s:GetCellRange', '1,1:1,2', 2, 2) == ['test11', 'test12']
Expect Call('s:GetCellRange', '1,1:1,2', 3, 1) == ['test11', 'test12']
Expect Call('s:GetCellRange', '1,1:1,2', 3, 2) == ['test11', 'test12']
Expect Call('s:GetCellRange', '2,1:2,2', 2, 1) == ['test21', 'test22']
Expect Call('s:GetCellRange', '2,1:2,2', 2, 2) == ['test21', 'test22']
Expect Call('s:GetCellRange', '2,1:2,2', 3, 1) == ['test21', 'test22']
Expect Call('s:GetCellRange', '2,1:2,2', 3, 2) == ['test21', 'test22']
" Get Columns given different seed lines and column
Expect Call('s:GetCellRange', '1:2', 2, 1) == ['test11', 'test21']
Expect Call('s:GetCellRange', '1:2', 2, 2) == ['test12', 'test22']
Expect Call('s:GetCellRange', '1:2', 3, 1) == ['test11', 'test21']
Expect Call('s: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 Call('s:GetCellRange', '1:-1', 2, 1) == ['test11']
Expect Call('s:GetCellRange', '1:-1', 3, 1) == ['test11']
Expect Call('s:GetCellRange', '1:-1', 2, 2) == ['test12']
Expect Call('s:GetCellRange', '1:-1', 3, 2) == ['test12']
end
end
describe 'Tableize'
before
normal! ggdG
normal! i
asd,asd;asd,asd
asd,asd;asd,asd
end
it 'should tableize with default delimiter'
:2,3call tablemode#TableizeRange('')
Expect tablemode#IsATableRow(2) to_be_true
Expect tablemode#RowCount(2) == 2
Expect tablemode#ColumnCount(2) == 3
end
it 'should tableize with given delimiter'
:2,3call tablemode#TableizeRange('/;')
Expect tablemode#IsATableRow(2) to_be_true
Expect tablemode#RowCount(2) == 2
Expect tablemode#ColumnCount(2) == 2
end
end
describe 'Motions'
it 'should work'
TODO
end
end
describe 'Manipulations'
it 'should work'