Compare commits

...

60 Commits

Author SHA1 Message Date
Dhruva Sagar
1bf139b30d Bumped version 2016-05-09 09:07:40 +05:30
Dhruva Sagar
b613e39bd0 Fix #89
Unescape special characters () within the commmentstring
2016-05-08 15:57:13 +05:30
Dhruva Sagar
7c56d298bb Updated test for formula validation 2016-05-08 15:56:48 +05:30
Dhruva Sagar
4cf1f53430 Fix #86
Fixed issue with table formula addition when there exists one already
and the comment string is singular, i.e. no end delimiter.
2016-04-09 12:55:29 +05:30
Dhruva Sagar
01289c0752 Merge branch 'master' of github.com:dhruvasagar/vim-table-mode 2015-12-03 22:53:41 +05:30
Dhruva Sagar
2ab64777a5 Merge pull request #75 from hein09/patch-1
Fixed sort in doc
2015-12-03 21:11:39 +05:30
hein09
26b21e3454 Fixed sort in doc
Fixed sort-parts in documentation breaking the help-tag-indexing of vim
2015-12-03 15:48:18 +01:00
Dhruva Sagar
fdfa4b12c2 Add tablemode#table#IsTable 2015-11-23 14:53:05 +05:30
Dhruva Sagar
e7373c9083 Merge pull request #71 from arecarn/fix-sort
Fix sort command, and add documentation for the command and mapping.
2015-11-17 06:43:19 +01:00
Ryan Carney
6872024827 add docs for table sorting command and mapping
----
Related Issues: #38
2015-11-15 14:46:47 -08:00
Ryan Carney
50b3b01a33 fix mapping to table sort
Symptom:
when trying to sort a column using <leader>ts the following error would
be displayed:

     E119: Not enough arguments for function: tablemode#spreadsheet#Sort

Problem:
Function call tablemode#spreadsheet#Sort() was missing a arguemnts for
it's named parameter bang.

Solution:
Add a blank value of '' as the argument for the bang parameter

----
Related Issues: #38
2015-11-15 14:45:05 -08:00
Dhruva Sagar
5395c9f52b Merge pull request #65 from axil/master
Updated readme
2015-06-05 06:22:58 -07:00
Lev Maximov
13d836dbfe included header_fillchar into the rst example 2015-06-05 11:28:55 +06:00
Lev Maximov
b1e4041e43 changed the video to a more recent one 2015-06-05 02:15:11 +06:00
Lev Maximov
bba1bf8d6e restructured the headers 2015-06-05 02:15:11 +06:00
Lev Maximov
4baf9cfd2e more detailed how-to-start instructions, with pictures 2015-06-05 02:14:50 +06:00
Dhruva Sagar
8d2e013756 Updated youtube video
* Updated the youtube video link to the more recent video.
2015-06-04 10:29:49 -07:00
Dhruva Sagar
cc723fe8cd Merge pull request #61 from rafaeln/patch-1
fix table in table-mode.txt
2015-04-21 13:48:06 -07:00
rafaeln
2c06812c39 fix table in table-mode.txt
immidiately --> immediately
2015-04-21 16:13:55 -03:00
Dhruva Sagar
2471a3b1da Updated docs 2015-04-14 15:57:49 -07:00
Dhruva Sagar
74d1492f2b Add support for center alignment. Fix #57
We now have support for center alignment, simply add a header border
with the `g:table_mode_align_char` as both the first and the last
character so it would look something like `+:.....:+` to center align
the column values.
2015-04-14 15:56:09 -07:00
Dhruva Sagar
c0a6d43f21 Updated ruby version in travis 2015-03-17 15:43:02 -07:00
Dhruva Sagar
af182b1387 Updated README
* Updated documentation with regards to manual installation
2015-03-17 13:53:24 -07:00
Dhruva Sagar
757d1f95eb Updated ruby version 2015-03-17 13:50:26 -07:00
Dhruva Sagar
d1908c04f3 Updated READMEs 2015-02-27 08:53:26 +05:30
Dhruva Sagar
33c00df509 Fix #56
* Fixed tablemode#spreadsheet#cell#SetCell() to accommodate the fact that we
  can have borders anywhere in the table. Using
  tablemode#spreadsheet#LineNr() to get get the line of the actual row
  in the table.
* Fixed tablemode#spreadsheet#LineNr()
2015-02-27 08:53:03 +05:30
Dhruva Sagar
3096a26db4 Merge pull request #51 from jensbodal/patch-1
File names incorrect for files to copy
2015-01-11 17:08:48 +05:30
jensbodal
acde7918e8 File names incorrect for files to copy
If you're interested I made a script to install this plugin and install pathogen.  I've never installed a plugin before and for me the instructions were not very easy to follow in order to get this working. It looks like exactly what I was looking for though, so thank you very much for putting this together.

# Script for UNIX only -- not tested on OSX or Windows

# Make necessary directories
mkdir -p ~/.vim/autoload ~/.vim/bundle ~/.vim/doc ~/.vim/plugin

# Install pathogen (https://github.com/tpope/vim-pathogen)
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

# Install vim-table-mode plugin (https://github.com/dhruvasagar/vim-table-mode)
git clone https://github.com/dhruvasagar/vim-table-mode.git ~/.vim/bundle/vim-table-mode

# Place vim-table-mode files where they need to be
cp ~/.vim/bundle/vim-table-mode/autoload/tablemode.vim ~/.vim/autoload
cp ~/.vim/bundle/vim-table-mode/plugin/table-mode.vim ~/.vim/plugin
cp ~/.vim/bundle/vim-table-mode/doc/table-mode.txt ~/.vim/doc

# Add options to ~/.vimrc to run pathogen when vim starts
echo >> ~/.vimrc
echo \"Start pathogen manager on startup >> ~/.vimrc
echo execute pathogen\#infect\(\) >> ~/.vimrc
echo >> ~/.vimrc
echo \"Enable indent on for plugin filetypes >> ~/.vimrc
echo filetype plugin indent on >> ~/.vimrc

echo Test out vim-table-mode using :TableModeToggle or :TableModeEnable or :TableModeDisable
2015-01-10 22:05:36 -08:00
Dhruva Sagar
1e94ae39cc Merge pull request #46 from grodzik/master
Use table_mode_map_prefix for the tableize mappings
2014-12-08 18:22:05 +05:30
Paweł Tomak
84e382123d Use table_mode_map_prefix for the tableize mappings 2014-12-08 13:44:03 +01:00
Dhruva Sagar
e125870212 Fixed s:Map to not throw error for empty a:to 2014-11-21 07:02:38 +05:30
Dhruva Sagar
d5152bde5e Fixed typo #39 2014-11-20 07:21:43 +05:30
Dhruva Sagar
b22c9bf7b1 Skip empty maps 2014-11-20 07:19:23 +05:30
Dhruva Sagar
5103dae89d Updated CHANGELOG 2014-11-18 08:20:28 +05:30
Dhruva Sagar
29cae13802 Fixed #44
Added tablemode#logger#log && g:table_mode_verbose

Use logger wherever needed for logging general things, in future we can
scale this to do more things like write to a log file for debugging. It
uses g:table_mode_verbose to determine whether or not to actually log
the message.
2014-11-18 07:57:45 +05:30
Dhruva Sagar
af0254e816 Improved tablemode#table#IsHeader()
Automatically improves header border creation, especially when
overriding g:table_mode_header_fillchar #31
2014-11-18 07:48:23 +05:30
Dhruva Sagar
8810818e32 Updated docs & bumped version 2014-11-16 13:42:27 +05:30
Dhruva Sagar
bba22a4f04 Added g:table_mode_header_fillchar
* Allows configuring a separate character for header border to be used
  with pandoc
2014-11-16 13:40:14 +05:30
Dhruva Sagar
ffc734c38d Added TableModeEnabled & TableModeDisabled autocmd
* Added custom User autocmds TableModeEnabled & TableModeDisabled for
  working with other plugins like vim-pandoc #43
2014-11-15 16:38:22 +05:30
Dhruva Sagar
ea78f62565 Releasing Table Mode v4.6.1
* Added configurable table mappings.
* Updated docs & README.
2014-10-28 13:31:16 +05:30
Dhruva Sagar
7e06786708 Minor formatting 2014-10-28 08:04:39 +05:30
Dhruva Sagar
ef0eef0f35 Fixed #38
Added a mapping `<Plug>(table-mode-sort)` which is mapped by default to
`<Leader>ts` that sorts the current table by the column in which the
cursor is currently.

Also added `TableSort` command that gives you a little more control over
the sorting, you can pass in additional :sort flags like u, i, n etc and
also use it with a `!` to sort in reverse order.
2014-09-17 01:36:59 +05:30
Dhruva Sagar
c5258f7ae8 Merge pull request #37 from andrwj/master
show table-mode status
2014-08-24 07:44:46 +05:30
A.J
a3e3269658 show table-mode status 2014-08-24 07:42:51 +09:00
Dhruva Sagar
8e4a4e7dc4 Bumped the version 2014-08-15 09:43:07 +05:30
Dhruva Sagar
761a67b36b Fixed #16
Altered table mode behavior such that if there is a header line, i.e.
the first line of the table is separated by a border with the rest of
the table, then it is not taken into account for formulas and cell
arithmetic
2014-08-15 09:40:29 +05:30
Dhruva Sagar
8683146a5f Removed unnecessary code / headers 2014-08-15 07:55:19 +05:30
Dhruva Sagar
82863fa8eb Merge pull request #35 from p0deje/master
Added option to disable all mappings. Fixes #34
2014-07-25 07:27:53 +05:30
Alex Rodionov
6b89fe5c9e Fix specs 2014-07-24 19:15:36 +07:00
Alex Rodionov
67969ae5cf Set table_mode_disable_mappings to 0 by default 2014-07-23 10:23:09 +07:00
Alex Rodionov
135d571e9c Added option to disable all mappings 2014-07-23 08:59:28 +07:00
Dhruva Sagar
4c91a4efa2 Updated tests 2014-05-30 12:20:46 +05:30
Dhruva Sagar
8d9a0082f5 Updated docs 2014-05-30 12:20:38 +05:30
Dhruva Sagar
0f1254e1fe Updated table syntax to get toggled with table mode 2014-05-30 12:05:31 +05:30
Dhruva Sagar
e7e806916f Refactored toggleMapping 2014-05-30 11:49:13 +05:30
Dhruva Sagar
9336261063 Added cell text object for visual mode 2014-05-15 11:02:21 +05:30
Dhruva Sagar
a5ae0253be Added modeline to CHANGELOG 2014-05-13 11:21:11 +05:30
Dhruva Sagar
80ec86e385 Version 4.4.2
* Updated mappings to be buffer local
* Updated mappings to toggle with Table Mode
2014-05-13 11:18:42 +05:30
Dhruva Sagar
7eff1e30f1 Fixed #30
In case there is nothing to align, it was failing with an error, this
ensures it exists gracefully in this situation.
2014-05-10 15:27:36 +05:30
Dhruva Sagar
7258a56d20 Updated Table syntax to incorporate commented tables 2014-05-04 10:13:40 +05:30
28 changed files with 485 additions and 427 deletions

View File

@@ -1,4 +1,4 @@
language: ruby
rvm:
- 2.1
- 2.2.0
script: rake ci

View File

@@ -1,4 +1,39 @@
# Change Log
## Version 4.6.4.1
* Added a fix for markdown commentstring
## Version 4.6.4
* Added support for center aligning columns
## Version 4.6.3
* Fixed tablemode#spreadsheet#LineNr()
* Fixed tablemode#spreadsheet#cell#SetCell()
## Version 4.6.2
* Added custom User autocmd event for tablemode activation (enabled /
disabled)
* Adding better header support for pandoc, headers can now have a different
fillchar configured with `g:table_mode_header_fillchar`
## Version 4.6.1
* Minor bug fixes
## Version 4.6.0
* Added better table header support. The first line of the table if separated
by a table border will be considered as the header. This also means that it
will not be considered / included when evaluating table formulas and that
the first line after the header would be considered the first line of the
table.
## Version 4.5.0
* Refactored toggled mappings
* Table Syntax now gets toggled with Table Mode
## Version 4.4.2
* Updated mappings to be buffer local.
* Updated mappings to toggle and function only when table mode is active.
## Version 4.4.1
* Added syntax for matching tables
@@ -106,3 +141,7 @@
## Version 1.0 :
* First stable release, create tables as you type.
<!--
vim: ft=markdown
-->

View File

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

115
README.md
View File

@@ -1,14 +1,10 @@
# VIM Table Mode v4.4.1 [![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.6.4.1 [![Build Status](https://travis-ci.org/dhruvasagar/vim-table-mode.png?branch=master)](https://travis-ci.org/dhruvasagar/vim-table-mode)
An awesome automatic table creator & formatter allowing one to create neat
tables as you type.
## Change Log
See <a
href="https://github.com/dhruvasagar/vim-table-mode/blob/master/CHANGELOG.md">
CHANGELOG.md </a>
## Getting Started
## Getting Started
### Installation
There are several ways to do this
@@ -25,34 +21,84 @@ There are several ways to do this
$ cd ~/.vim
$ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode
```
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
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
### Usage
### Creating table on-the-fly
- **On the fly table creation** :
To start using the plugin in the on-the-fly mode use `:TableModeToggle` mapped to <kbd>\<Leader\>tm</kbd> by default (which means <kbd>\\</kbd> <kbd>t</kbd> <kbd>m</kbd> if you didn't override the <Leader> by `:let mapleader = ","` to have <kbd>,</kbd> <kbd>t</kbd> <kbd>m</kbd>).
By default the table column separator is <kbd>|</kbd> 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.
Enter the first line, delimiting columns by the `|` symbol. The plugin reacts by inserting spaces between the text and the separator if you omit them:
| name | address | phone |
In the second line (without leaving Insert mode), enter `|` twice. The plugin will write a properly formatted horizontal line:
| name | address | phone |
|------+---------+-------|
When you enter the subsequent lines, the plugin will automatically adjust the formatting to match the text youre entering every time you press `|`:
| name | address | phone |
|------------+---------+-------|
| John Adams |
Go on until the table is ready:
| name | address | phone |
|-----------------+--------------------------+------------|
| John Adams | 1600 Pennsylvania Avenue | 0123456789 |
|-----------------+--------------------------+------------|
| Sherlock Holmes | 221B Baker Street | 0987654321 |
|-----------------+--------------------------+------------|
Then you can return to the first line and above it enter `||`:
|-----------------+--------------------------+------------|
| name | address | phone |
|-----------------+--------------------------+------------|
| John Adams | 1600 Pennsylvania Avenue | 0123456789 |
|-----------------+--------------------------+------------|
| Sherlock Holmes | 221B Baker Street | 0987654321 |
|-----------------+--------------------------+------------|
Corner separators are adjustable:
For Markdown-compatible tables use
let g:table_mode_corner="|"
|-----------------|--------------------------|------------|
| name | address | phone |
|-----------------|--------------------------|------------|
| John Adams | 1600 Pennsylvania Avenue | 0123456789 |
|-----------------|--------------------------|------------|
| Sherlock Holmes | 221B Baker Street | 0987654321 |
|-----------------|--------------------------|------------|
To get ReST-compatible tables use
let g:table_mode_corner_corner="+"
let g:table_mode_header_fillchar="="
+-----------------+--------------------------+------------+
| name | address | phone |
+=================+==========================+============+
| John Adams | 1600 Pennsylvania Avenue | 0123456789 |
+-----------------+--------------------------+------------+
| Sherlock Holmes | 221B Baker Street | 0987654321 |
+-----------------+--------------------------+------------+
Since this could lead to unwanted behavior I have disabled table mode by
default. You have to use `:TableModeToggle` command or the table mode
toggle mapping, which is <kbd>\<Leader\>tm</kbd> 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.
You can also define in a table header border how it's content should be
aligned, whether right or left by using a `:` character defined by
aligned, whether center, right or left by using a `:` character defined by
`g:table_mode_align_char` option.
- **Format existing content into a table** :
### Formatting existing content into a table
Table Mode wouldn't justify it's name if it didn't allow formatting
existing content into a table. And it does as promised. Like table creation
@@ -74,7 +120,7 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
You can use the mapping <kbd>\<Leader\>T</kbd> with a `[count]` to apply it to the
next `[count]` lines in standard vim style.
- **Move between cells** :
### 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 |
@@ -82,7 +128,7 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
and move to the next | previous row after the last | first cell in the
current row if one exists.
- **Manipulating Table** :
### Manipulating Table
- **Cell Text Object** :
@@ -105,7 +151,9 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
(provided you are within a table row), this can also be preceeded with a
[count] to delete multiple columns.
- **Table Formulas** :
## Advanced Usage: Spreadsheet Capabilities
### Table Formulas
Table Mode now has support for formulas like a spreadsheet. There are 2 ways
of defining formulas :
@@ -129,7 +177,7 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
NOTE: You can now use the mapping <kbd>\<Leader\>t?</kbd>
- **Formula Expressions** :
### Formula Expressions
Expressions are of the format `$target = formula`.
@@ -170,10 +218,15 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
- `$5,3 = Sum(1,2:5,2)/$5,1`
- `$5,3 = Average(1,2:5,2)/$5,1`
### Demo
## Demo
<a href="http://www.youtube.com/watch?v=sK2IH1hiDkw"><img
src="https://raw.github.com/dhruvasagar/vim-table-mode/master/youtube.png"/></a>
<a href="http://www.youtube.com/watch?v=9lVQ0VJY3ps"><img
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>
## Contributing

View File

@@ -1,53 +1,107 @@
" ============================== Header ======================================
" File: autoload/tablemode.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: https://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Private Functions {{{1
function! s:sub(str,pat,rep) abort "{{{2
return substitute(a:str,'\v\C'.a:pat,a:rep,'')
endfunction
function! s:gsub(str,pat,rep) abort "{{{2
return substitute(a:str,'\v\C'.a:pat,a:rep,'g')
endfunction
function! s:SetBufferOptDefault(opt, val) "{{{2
if !exists('b:' . a:opt)
let b:{a:opt} = a:val
endif
endfunction
function! s:ToggleMapping() "{{{2
if exists('b:table_mode_active') && b:table_mode_active
call s:SetBufferOptDefault('table_mode_separator_map', g:table_mode_separator)
" '|' is a special character, we need to map <Bar> instead
if g:table_mode_separator ==# '|' | let b:table_mode_separator_map = '<Bar>' | endif
function! s:Map(map, to, mode) "{{{2
if !empty(a:to) && !hasmapto(a:map, a:mode)
for l:mode in split(a:mode, '.\zs')
execute l:mode . 'map <buffer>' a:to a:map
endfor
endif
endfunction
execute "inoremap <silent> <buffer> " . b:table_mode_separator_map . ' ' .
\ b:table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
function! s:UnMap(map, mode) "{{{2
if !empty(maparg(a:map, a:mode))
for mode in split(a:mode, '.\zs')
execute l:mode . 'unmap <buffer>' a:map
endfor
endif
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-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')
call s:Map('<Plug>(table-mode-motion-right)', g:table_mode_motion_right_map, 'n')
call s:Map('<Plug>(table-mode-cell-text-object-a)', g:table_mode_cell_text_object_a_map, 'ox')
call s:Map('<Plug>(table-mode-cell-text-object-i)', g:table_mode_cell_text_object_i_map, 'ox')
call s:Map('<Plug>(table-mode-realign)', g:table_mode_realign_map, 'n')
call s:Map('<Plug>(table-mode-delete-row)', g:table_mode_delete_row_map, 'n')
call s:Map('<Plug>(table-mode-delete-column)', g:table_mode_delete_column_map, 'n')
call s:Map('<Plug>(table-mode-add-formula)', g:table_mode_add_formula_map, 'n')
call s:Map('<Plug>(table-mode-eval-formula)', g:table_mode_eval_formula_map, 'n')
call s:Map('<Plug>(table-mode-echo-cell)', g:table_mode_echo_cell_map, 'n')
call s:Map('<Plug>(table-mode-sort)', g:table_mode_sort_map, 'n')
else
call s:UnMap(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')
call s:UnMap(g:table_mode_motion_right_map, 'n')
call s:UnMap(g:table_mode_cell_text_object_a_map, 'ox')
call s:UnMap(g:table_mode_cell_text_object_i_map, 'ox')
call s:UnMap(g:table_mode_realign_map, 'n')
call s:UnMap(g:table_mode_delete_row_map, 'n')
call s:UnMap(g:table_mode_delete_column_map, 'n')
call s:UnMap(g:table_mode_add_formula_map, 'n')
call s:UnMap(g:table_mode_eval_formula_map, 'n')
call s:UnMap(g:table_mode_echo_cell_map, 'n')
call s:UnMap(g:table_mode_sort_map, 'n')
endif
endif
endfunction
function! tablemode#SyntaxEnable()
exec 'syntax match Table'
\ '/' . tablemode#table#StartExpr() . '\zs|.\+|\ze' . tablemode#table#EndExpr() . '/'
\ 'contains=TableBorder,TableSeparator,TableColumnAlign containedin=ALL'
syntax match TableSeparator /|/ contained
syntax match TableColumnAlign /:/ contained
syntax match TableBorder /[\-+]\+/ contained
hi! link TableBorder Delimiter
hi! link TableSeparator Delimiter
hi! link TableColumnAlign Type
endfunction
function! s:ToggleSyntax()
if tablemode#IsActive()
call tablemode#SyntaxEnable()
else
silent! execute "iunmap <silent> <buffer> " . b:table_mode_separator_map
syntax clear Table
syntax clear TableBorder
syntax clear TableSeparator
syntax clear TableColumnAlign
hi! link TableBorder NONE
hi! link TableSeparator NONE
hi! link TableColumnAlign NONE
endif
endfunction
function! s:SetActive(bool) "{{{2
let b:table_mode_active = a:bool
call s:ToggleSyntax()
call s:ToggleMapping()
if tablemode#IsActive()
doautocmd User TableModeEnabled
else
doautocmd User TableModeDisabled
endif
endfunction
function! s:ConvertDelimiterToSeparator(line, ...) "{{{2
@@ -83,15 +137,6 @@ function! s:Tableizeline(line, ...) "{{{2
endfunction
" Public API {{{1
function! tablemode#sid() "{{{2
return maparg('<SID>', 'n')
endfunction
nnoremap <SID> <SID>
function! tablemode#scope() "{{{2
return s:
endfunction
function! tablemode#IsActive() "{{{2
if g:table_mode_always_active | return 1 | endif

View File

@@ -1,22 +1,3 @@
" ============================== Header ======================================
" File: autoload/tablemode/align.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: https://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Borrowed from Tabular
" Private Functions {{{1
" function! s:StripTrailingSpaces(string) - Remove all trailing spaces {{{2
@@ -32,22 +13,13 @@ function! s:Padding(string, length, where) "{{{3
elseif a:where =~# 'r'
return repeat(" ", gap_length) . a:string
elseif a:where =~# 'c'
let right = spaces / 2
let right = gap_length / 2
let left = right + (right * 2 != gap_length)
return repeat(" ", left) . a:string . repeat(" ", right)
endif
endfunction
" Public Functions {{{1
function! tablemode#align#sid() "{{{2
return maparg('<sid>', 'n')
endfunction
nnoremap <sid> <sid>
function! tablemode#align#scope() "{{{2
return s:
endfunction
" function! tablemode#align#Split() - Split a string into fields and delimiters {{{2
" Like split(), but include the delimiters as elements
" All odd numbered elements are delimiters
@@ -92,20 +64,26 @@ function! tablemode#align#Split(string, delim)
endfunction
function! tablemode#align#alignments(lnum, ncols) "{{{2
let achr = g:table_mode_align_char
let alignments = []
if tablemode#table#IsBorder(a:lnum+1)
let hcols = tablemode#align#Split(getline(a:lnum+1), '[' . g:table_mode_corner . g:table_mode_corner_corner . ']')
for idx in range(len(hcols))
" Right align if header
call add(alignments, 'l')
if hcols[idx] =~# g:table_mode_align_char . '$' | let alignments[idx] = 'r' | endif
if hcols[idx] !~# '[^0-9\.]' | let alignments[idx] = 'r' | endif
if hcols[idx] =~# achr . '[^'.achr.']\+' . achr
let alignments[idx] = 'c'
elseif hcols[idx] =~# achr . '$'
let alignments[idx] = 'r'
endif
" if hcols[idx] !~# '[^0-9\.]' | let alignments[idx] = 'r' | endif
endfor
end
return alignments
endfunction
function! tablemode#align#Align(lines) "{{{2
if empty(a:lines) | return [] | endif
let lines = map(a:lines, 'map(v:val, "v:key =~# \"text\" ? tablemode#align#Split(v:val, g:table_mode_separator) : v:val")')
for line in lines

View File

@@ -0,0 +1,5 @@
function! tablemode#logger#log(message)
if g:table_mode_verbose
echom message
endif
endfunction

View File

@@ -1,22 +1,3 @@
" ============================== Header ======================================
" File: autoload/tablemode/spreadsheet.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: https://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Private Functions {{{1
function! s:Sum(list) "{{{2
let result = 0.0
@@ -37,20 +18,11 @@ function! s:Average(list) "{{{2
endfunction
" Public Functions {{{1
function! tablemode#spreadsheet#sid() "{{{2
return maparg('<sid>', 'n')
endfunction
nnoremap <sid> <sid>
function! tablemode#spreadsheet#scope() "{{{2
return s:
endfunction
function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
if tablemode#table#IsRow(a:line)
let line = tablemode#utils#line(a:line)
while tablemode#table#IsRow(line - 1) || tablemode#table#IsBorder(line - 1)
while !tablemode#table#IsHeader(line - 1) && (tablemode#table#IsRow(line - 1) || tablemode#table#IsBorder(line - 1))
let line -= 1
endwhile
if tablemode#table#IsBorder(line) | let line += 1 | endif
@@ -69,7 +41,7 @@ function! tablemode#spreadsheet#GetLastRow(line) "{{{2
if tablemode#table#IsRow(a:line)
let line = tablemode#utils#line(a:line)
while tablemode#table#IsRow(line + 1) || tablemode#table#IsBorder(line + 1)
while tablemode#table#IsTable(line + 1)
let line += 1
endwhile
if tablemode#table#IsBorder(line) | let line -= 1 | endif
@@ -84,15 +56,15 @@ function! tablemode#spreadsheet#MoveToLastRow() "{{{2
endif
endfunction
function! tablemode#spreadsheet#LineNr(row) "{{{2
if tablemode#table#IsRow('.')
let line = tablemode#spreadsheet#GetFirstRow('.')
function! tablemode#spreadsheet#LineNr(line, row) "{{{2
if tablemode#table#IsRow(a:line)
let line = tablemode#spreadsheet#GetFirstRow(a:line)
let row_nr = 0
while tablemode#table#IsRow(line + 1) || tablemode#table#IsBorder(line + 1)
while tablemode#table#IsTable(line + 1)
if tablemode#table#IsRow(line)
let row_nr += 1
if row ==# row_nr | break | endif
if a:row ==# row_nr | break | endif
endif
let line += 1
endwhile
@@ -105,7 +77,7 @@ function! tablemode#spreadsheet#RowNr(line) "{{{2
let line = tablemode#utils#line(a:line)
let rowNr = 0
while tablemode#table#IsRow(line) || tablemode#table#IsBorder(line)
while !tablemode#table#IsHeader(line) && tablemode#table#IsTable(line)
if tablemode#table#IsRow(line) | let rowNr += 1 | endif
let line -= 1
endwhile
@@ -117,13 +89,13 @@ function! tablemode#spreadsheet#RowCount(line) "{{{2
let line = tablemode#utils#line(a:line)
let [tline, totalRowCount] = [line, 0]
while tablemode#table#IsRow(tline) || tablemode#table#IsBorder(tline)
while !tablemode#table#IsHeader(tline) && tablemode#table#IsTable(tline)
if tablemode#table#IsRow(tline) | let totalRowCount += 1 | endif
let tline -= 1
endwhile
let tline = line + 1
while tablemode#table#IsRow(tline) || tablemode#table#IsBorder(tline)
while !tablemode#table#IsHeader(tline) && tablemode#table#IsTable(tline)
if tablemode#table#IsRow(tline) | let totalRowCount += 1 | endif
let tline += 1
endwhile
@@ -166,32 +138,6 @@ function! tablemode#spreadsheet#MoveToStartOfCell() "{{{2
endif
endfunction
function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
if tablemode#table#IsRow(a:line)
let line = tablemode#utils#line(a:line)
while tablemode#table#IsRow(line - 1) || tablemode#table#IsBorder(line - 1)
let line -= 1
endwhile
if tablemode#table#IsBorder(line) | let line += 1 | endif
return line
endif
endfunction
function! tablemode#spreadsheet#GetLastRow(line) "{{{2
if tablemode#table#IsRow(a:line)
let line = tablemode#utils#line(a:line)
while tablemode#table#IsRow(line + 1) || tablemode#table#IsBorder(line + 1)
let line += 1
endwhile
if tablemode#table#IsBorder(line) | let line -= 1 | endif
return line
endif
endfunction
function! tablemode#spreadsheet#DeleteColumn() "{{{2
if tablemode#table#IsRow('.')
for i in range(v:count1)
@@ -234,3 +180,10 @@ function! tablemode#spreadsheet#Average(range, ...) abort "{{{2
return s:Average(call('tablemode#spreadsheet#cell#GetCellRange', args))
endfunction
function! tablemode#spreadsheet#Sort(bang, ...) "{{{2
let opts = a:0 ? a:1 : ''
let bang = a:bang ? '!' : ''
let [firstRow, lastRow] = [tablemode#spreadsheet#GetFirstRow('.'), tablemode#spreadsheet#GetLastRow('.')]
call tablemode#spreadsheet#MoveToStartOfCell()
exec ':'.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col('.').'v/'
endfunction

View File

@@ -1,21 +1,3 @@
" ============================== Header ======================================
" File: autoload/tablemode/spreadsheet/cell.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: https://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Private Functions {{{1
" function! s:ParseRange(range, ...) {{{2
" range: A string representing range of cells.
@@ -55,15 +37,6 @@ endfunction
" Public Functions {{{1
function! tablemode#spreadsheet#cell#sid() "{{{2
return maparg('<sid>', 'n')
endfunction
nnoremap <sid> <sid>
function! tablemode#spreadsheet#cell#scope() "{{{2
return s:
endfunction
" function! tablemode#spreadsheet#cell#GetCells() - Function to get values of cells in a table {{{2
" tablemode#spreadsheet#GetCells(row) - Get values of all cells in a row as a List.
" tablemode#spreadsheet#GetCells(0, col) - Get values of all cells in a column as a List.
@@ -85,7 +58,7 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
if row == 0
let values = []
let line = first_row
while tablemode#table#IsRow(line) || tablemode#table#IsBorder(line)
while tablemode#table#IsTable(line)
if tablemode#table#IsRow(line)
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
call add(values, tablemode#utils#strip(get(split(row_line, g:table_mode_separator), colm>0?colm-1:colm, '')))
@@ -97,7 +70,7 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
let row_nr = 0
let row_diff = row > 0 ? 1 : -1
let line = row > 0 ? first_row : last_row
while tablemode#table#IsRow(line) || tablemode#table#IsBorder(line)
while tablemode#table#IsTable(line)
if tablemode#table#IsRow(line)
let row_nr += row_diff
if row ==# row_nr | break | endif
@@ -200,7 +173,7 @@ function! tablemode#spreadsheet#cell#SetCell(val, ...) "{{{2
if colm < 0 | let colm = tablemode#spreadsheet#ColumnCount(line) + colm + 1 | endif
if tablemode#table#IsRow(line)
let line = tablemode#utils#line(line) + (row - tablemode#spreadsheet#RowNr(line)) * 1
let line = tablemode#spreadsheet#LineNr(line, row)
let line_val = getline(line)
let cstartexpr = tablemode#table#StartCommentExpr()
let values = split(getline(line)[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)], g:table_mode_separator)

View File

@@ -1,34 +1,6 @@
" ============================== Header ======================================
" File: autoload/tablemode/spreadsheet/formula.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: https://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Private Functions {{{1
" Public Functions {{{1
function! tablemode#spreadsheet#formula#sid() "{{{2
return maparg('<sid>', 'n')
endfunction
nnoremap <sid> <sid>
function! tablemode#spreadsheet#formula#scope() "{{{2
return s:
endfunction
function! tablemode#spreadsheet#formula#Add(...) "{{{2
let fr = a:0 ? a:1 : input('f=')
let row = tablemode#spreadsheet#RowNr('.')
@@ -44,7 +16,10 @@ function! tablemode#spreadsheet#formula#Add(...) "{{{2
if getline(fline) =~# 'tmf: '
" Comment line correctly
let line_val = getline(fline)
let line_expr = line_val[match(line_val, tablemode#table#StartCommentExpr()):match(line_val, tablemode#table#EndCommentExpr())]
let start_pos = match(line_val, tablemode#table#StartCommentExpr())
let end_pos = match(line_val, tablemode#table#EndCommentExpr())
if empty(end_pos) | let end_pos = len(line_val) | endif
let line_expr = strpart(line_val, start_pos, end_pos)
let sce = matchstr(line_val, tablemode#table#StartCommentExpr() . '\zs')
let ece = matchstr(line_val, tablemode#table#EndCommentExpr())
call setline(fline, sce . line_expr . '; ' . fr . ece)

View File

@@ -1,32 +1,13 @@
" ============================== Header ======================================
" File: autoload/tablemode/table.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: https://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Private Functions {{{1
function! s:HeaderBorderExpr() "{{{2
function! s:BorderExpr() "{{{2
return tablemode#table#StartExpr() .
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
\ '[' . g:table_mode_fillchar . g:table_mode_corner . g:table_mode_align_char . ']*' .
\ '[' . escape(g:table_mode_fillchar . g:table_mode_header_fillchar . g:table_mode_corner . g:table_mode_align_char, '-') . ']\+' .
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
\ tablemode#table#EndExpr()
endfunction
function! s:DefaultHeaderBorder() "{{{2
function! s:DefaultBorder() "{{{2
if tablemode#IsActive()
return g:table_mode_corner_corner . g:table_mode_fillchar . g:table_mode_corner . g:table_mode_fillchar . g:table_mode_corner_corner
else
@@ -44,11 +25,15 @@ function! s:GenerateHeaderBorder(line) "{{{2
if tablemode#table#IsRow(line - 1) && tablemode#utils#strlen(line_val) < tablemode#utils#strlen(getline(line - 1))
let line_val = getline(line - 1)
endif
if tablemode#utils#strlen(line_val) <= 1 | return s:DefaultHeaderBorder() | endif
if tablemode#utils#strlen(line_val) <= 1 | return s:DefaultBorder() | endif
let border = substitute(line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)], g:table_mode_separator, g:table_mode_corner, 'g')
" To accurately deal with unicode double width characters
let fill_columns = map(split(border, g:table_mode_corner), 'repeat(g:table_mode_fillchar, tablemode#utils#StrDisplayWidth(v:val))')
if tablemode#table#IsHeader(line - 1)
let fill_columns = map(split(border, g:table_mode_corner), 'repeat(g:table_mode_header_fillchar, tablemode#utils#StrDisplayWidth(v:val))')
else
let fill_columns = map(split(border, g:table_mode_corner), 'repeat(g:table_mode_fillchar, tablemode#utils#StrDisplayWidth(v:val))')
endif
let border = g:table_mode_corner . join(fill_columns, g:table_mode_corner) . g:table_mode_corner
let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_corner_corner . '\1' . g:table_mode_corner_corner, '')
@@ -60,7 +45,10 @@ function! s:GenerateHeaderBorder(line) "{{{2
for idx in range(len(hcols))
if hcols[idx] =~# g:table_mode_align_char
if hcols[idx] =~# g:table_mode_align_char . '$'
" center align
if hcols[idx] =~# g:table_mode_align_char . '[^'.g:table_mode_align_char.']\+' . g:table_mode_align_char
let gcols[idx] = g:table_mode_align_char . gcols[idx][1:-2] . g:table_mode_align_char
elseif hcols[idx] =~# g:table_mode_align_char . '$'
let gcols[idx] = gcols[idx][:-2] . g:table_mode_align_char
else
let gcols[idx] = g:table_mode_align_char . gcols[idx][1:]
@@ -82,24 +70,15 @@ function! s:GenerateHeaderBorder(line) "{{{2
return border
endif
else
return s:DefaultHeaderBorder()
return s:DefaultBorder()
endif
endfunction
" Public Functions {{{1
function! tablemode#table#sid() "{{{2
return maparg('<sid>', 'n')
endfunction
nnoremap <sid> <sid>
function! tablemode#table#scope() "{{{2
return s:
endfunction
function! tablemode#table#GetCommentStart() "{{{2
let cstring = &commentstring
if tablemode#utils#strlen(cstring) > 0
return substitute(split(cstring, '%s')[0], '.', '\\\0', 'g')
return substitute(split(cstring, '%s')[0], '[^()]', '\\\0', 'g')
else
return ''
endif
@@ -119,7 +98,7 @@ function! tablemode#table#GetCommentEnd() "{{{2
if tablemode#utils#strlen(cstring) > 0
let cst = split(cstring, '%s')
if len(cst) == 2
return substitute(cst[1], '.', '\\\0', 'g')
return substitute(cst[1], '[^()]', '\\\0', 'g')
else
return ''
endif
@@ -156,16 +135,25 @@ function! tablemode#table#EndExpr() "{{{2
endfunction
function! tablemode#table#IsBorder(line) "{{{2
return getline(a:line) =~# s:HeaderBorderExpr()
return !empty(getline(a:line)) && getline(a:line) =~# s:BorderExpr()
endfunction
function! tablemode#table#IsHeader(line) "{{{2
let line = tablemode#utils#line(a:line)
return tablemode#table#IsBorder(line+1) && !tablemode#table#IsRow(line-1) && !tablemode#table#IsRow(line-2)
" if line <= 0 || line > line('$') | return 0 | endif
return tablemode#table#IsRow(line)
\ && !tablemode#table#IsRow(line-1)
\ && !tablemode#table#IsRow(line-2)
\ && !tablemode#table#IsBorder(line-2)
\ && tablemode#table#IsBorder(line+1)
endfunction
function! tablemode#table#IsRow(line) "{{{2
return !tablemode#table#IsBorder(a:line) && getline(a:line) =~# (tablemode#table#StartExpr() . g:table_mode_separator)
return !tablemode#table#IsBorder(a:line) && getline(a:line) =~# (tablemode#table#StartExpr() . g:table_mode_separator) . '[^' . g:table_mode_separator . ']\+'
endfunction
function! tablemode#table#IsTable(line) "{{{2
return tablemode#table#IsRow(a:line) || tablemode#table#IsBorder(a:line)
endfunction
function! tablemode#table#AddBorder(line) "{{{2
@@ -177,7 +165,7 @@ function! tablemode#table#Realign(line) "{{{2
let lines = []
let [lnum, blines] = [line, []]
while tablemode#table#IsRow(lnum) || tablemode#table#IsBorder(lnum)
while tablemode#table#IsTable(lnum)
if tablemode#table#IsBorder(lnum)
call insert(blines, lnum)
let lnum -= 1
@@ -188,7 +176,7 @@ function! tablemode#table#Realign(line) "{{{2
endwhile
let lnum = line + 1
while tablemode#table#IsRow(lnum) || tablemode#table#IsBorder(lnum)
while tablemode#table#IsTable(lnum)
if tablemode#table#IsBorder(lnum)
call add(blines, lnum)
let lnum += 1

View File

@@ -1,34 +1,6 @@
" ============================== Header ======================================
" File: autoload/tablemode/utils.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: https://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Private Functions {{{1
" Public Functions {{{1
function! tablemode#utils#sid() "{{{2
return maparg('<sid>', 'n')
endfunction
nnoremap <sid> <sid>
function! tablemode#utils#scope() "{{{2
return s:
endfunction
function! tablemode#utils#throw(string) abort "{{{2
let v:errmsg = 'table-mode: ' . a:string
throw v:errmsg

View File

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting. v4.4.1
*table-mode.txt* Table Mode for easy table formatting
===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 4.4.1
VERSION 4.6.4.1
Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/>
@@ -20,7 +20,7 @@ CONTENTS *table-mode-contents*
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 -
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.
@@ -57,7 +57,7 @@ Move between cells :
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.
cell in the current row if one exists.
Manipulation of tables:
Tableize provides 3 easy ways to quickly manipulate tables.
@@ -86,7 +86,7 @@ Table Formulas:
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.
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
@@ -151,6 +151,23 @@ Overview:
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-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
g:loaded_table_mode *table-mode-loaded*
Use this option to disable the plugin: >
@@ -213,6 +230,67 @@ g:table_mode_align_char *table-mode-align-char*
alignments for columns in the table header border. >
let g:table_mode_align_char = ':'
<
g:table_mode_disable_mappings *table-mode-disable-mappings*
Set this to true to disable all mappings. >
let g:table_mode_disable_mappings = 1
<
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>'
<
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>'
>
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>'
>
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>'
>
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>'
>
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>'
>
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'
>
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'
>
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'
>
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'
>
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'
>
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?'
>
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'
>
===============================================================================
MAPPINGS *table-mode-mappings*
@@ -224,7 +302,7 @@ MAPPINGS *table-mode-mappings*
*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.
@@ -271,8 +349,12 @@ MAPPINGS *table-mode-mappings*
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|
|| Expands to a header border. You can change this by changing
|table-mode-separator| option. You can change the character to
|table-mode-separator| option. You can change the character to
be used for te extreme corners of the border by changing
|table-mode-corner-corner| option.
@@ -298,7 +380,7 @@ COMMANDS *table-mode-commands*
*:TableModeDisable*
*table-mode-:TableModeDisable*
:TableModeDisable
Disables Table Mode.
Disables Table Mode.
NOTE this is applicable only if |table-mode-always-active| is
not set.
@@ -338,6 +420,14 @@ COMMANDS *table-mode-commands*
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[!] [i][u][r][n][x][o]
This command sorts column under the cursor and inherits the same flags
as the |:sort| command.
With [!] the order is reversed.
===============================================================================
CONTRIBUTING *table-mode-contributing*

View File

@@ -1,22 +1,3 @@
" =============================================================================
" File: plugin/table-mode.vim
" Description: Table mode for vim for creating neat tables.
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: http://github.com/dhruvasagar/vim-table-mode
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" table-mode.vim is provided *as is* and comes with no warranty
" of any kind, either expressed or implied. In no event will
" the copyright holder be liable for any damamges resulting
" from the use of this software.
" =============================================================================
" Finish if already loaded {{{1
if exists('g:loaded_table_mode')
finish
@@ -35,14 +16,33 @@ endfunction
" Set Global Defaults {{{1
call s:SetGlobalOptDefault('table_mode_corner', '+')
call s:SetGlobalOptDefault('table_mode_verbose', 0)
call s:SetGlobalOptDefault('table_mode_separator', '|')
call s:SetGlobalOptDefault('table_mode_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_header_fillchar', '-')
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_corner_corner', '|')
call s:SetGlobalOptDefault('table_mode_align_char', ':')
call s:SetGlobalOptDefault('table_mode_disable_mappings', 0)
call s:SetGlobalOptDefault('table_mode_motion_up_map', '{<Bar>')
call s:SetGlobalOptDefault('table_mode_motion_down_map', '}<Bar>')
call s:SetGlobalOptDefault('table_mode_motion_left_map', '[<Bar>')
call s:SetGlobalOptDefault('table_mode_motion_right_map', ']<Bar>')
call s:SetGlobalOptDefault('table_mode_cell_text_object_a_map', 'a<Bar>')
call s:SetGlobalOptDefault('table_mode_cell_text_object_i_map', 'i<Bar>')
call s:SetGlobalOptDefault('table_mode_realign_map', '<Leader>tr')
call s:SetGlobalOptDefault('table_mode_delete_row_map', '<Leader>tdd')
call s:SetGlobalOptDefault('table_mode_delete_column_map', '<Leader>tdc')
call s:SetGlobalOptDefault('table_mode_add_formula_map', '<Leader>tfa')
call s:SetGlobalOptDefault('table_mode_eval_formula_map', '<Leader>tfe')
call s:SetGlobalOptDefault('table_mode_echo_cell_map', '<Leader>t?')
call s:SetGlobalOptDefault('table_mode_sort_map', '<Leader>ts')
function! s:TableEchoCell() "{{{1
if tablemode#table#IsRow('.')
@@ -50,23 +50,12 @@ function! s:TableEchoCell() "{{{1
endif
endfunction
function! s:EnableTableSyntax() "{{{1
syntax match Table /^\s*|.\+|\s*$/ contains=TableBorder,TableSeparator,TableColumnAlign containedin=ALL
syntax match TableSeparator /|/ contained
syntax match TableColumnAlign /:/ contained
syntax match TableBorder /[\-+]\+/ contained
endfunction
augroup TableMode
au!
autocmd Syntax * call <SID>EnableTableSyntax()
autocmd Syntax * if tablemode#IsActive() | call tablemode#SyntaxEnable() | endif
augroup END
hi! link TableBorder Delimiter
hi! link TableSeparator Delimiter
hi! link TableColumnAlign Type
" Define Commands & Mappings {{{1
if !g:table_mode_always_active "{{{2
exec "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_toggle_map .
@@ -86,10 +75,15 @@ endif
" }}}2
command! -nargs=? -range Tableize <line1>,<line2>call tablemode#TableizeRange(<q-args>)
command! -nargs=? -bang TableSort call tablemode#spreadsheet#Sort(<bang>0, <q-args>)
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'
nnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
xnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
xnoremap <silent> <Plug>(table-mode-tableize-delimiter) :<C-U>call tablemode#TableizeByDelimiter()<CR>
@@ -103,6 +97,8 @@ nnoremap <silent> <Plug>(table-mode-motion-right) :<C-U>call tablemode#spreadshe
onoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
onoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
xnoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
xnoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
nnoremap <silent> <Plug>(table-mode-delete-row) :call tablemode#spreadsheet#DeleteRow()<CR>
nnoremap <silent> <Plug>(table-mode-delete-column) :call tablemode#spreadsheet#DeleteColumn()<CR>
@@ -112,57 +108,23 @@ nnoremap <silent> <Plug>(table-mode-eval-formula) :call tablemode#spreadsheet#fo
nnoremap <silent> <Plug>(table-mode-echo-cell) :call <SID>TableEchoCell()<CR>
nnoremap <silent> <Plug>(table-mode-sort) :call tablemode#spreadsheet#Sort('')<CR>
if !hasmapto('<Plug>(table-mode-tableize)')
nmap <Leader>tt <Plug>(table-mode-tableize)
xmap <Leader>tt <Plug>(table-mode-tableize)
exec "nmap " . g:table_mode_map_prefix . "t <Plug>(table-mode-tableize)"
exec "xmap " . g:table_mode_map_prefix . "t <Plug>(table-mode-tableize)"
endif
if !hasmapto('<Plug>(table-mode-tableize-delimiter)')
xmap <Leader>T <Plug>(table-mode-tableize-delimiter)
endif
if !hasmapto('<Plug>(table-mode-realign)')
nmap <Leader>tr <Plug>(table-mode-realign)
endif
if !hasmapto('<Plug>(table-mode-motion-up)')
nmap {<Bar> <Plug>(table-mode-motion-up)
endif
if !hasmapto('<Plug>(table-mode-motion-down)')
nmap }<Bar> <Plug>(table-mode-motion-down)
endif
if !hasmapto('<Plug>(table-mode-motion-left)')
nmap [<Bar> <Plug>(table-mode-motion-left)
endif
if !hasmapto('<Plug>(table-mode-motion-right)')
nmap ]<Bar> <Plug>(table-mode-motion-right)
endif
if !hasmapto('<Plug>(table-mode-cell-text-object-a)')
omap a<Bar> <Plug>(table-mode-cell-text-object-a)
endif
if !hasmapto('<Plug>(table-mode-cell-text-object-i)')
omap i<Bar> <Plug>(table-mode-cell-text-object-i)
endif
if !hasmapto('<Plug>(table-mode-delete-row)')
nmap <Leader>tdd <Plug>(table-mode-delete-row)
endif
if !hasmapto('<Plug>(table-mode-delete-column)')
nmap <Leader>tdc <Plug>(table-mode-delete-column)
endif
if !hasmapto('<Plug>(table-mode-add-formula)')
nmap <Leader>tfa <Plug>(table-mode-add-formula)
endif
if !hasmapto('<Plug>(table-mode-eval-formula)')
nmap <Leader>tfe <Plug>(table-mode-eval-formula)
endif
if !hasmapto('<Plug>(table-mode-echo-cell)')
nmap <Leader>t? <Plug>(table-mode-echo-cell)
endif
augroup TableMode "{{{1
au!
autocmd User TableModeEnabled call tablemode#logger#log('Table Mode Enabled')
autocmd User TableModeDisabled call tablemode#logger#log('Table Mode Disabled')
augroup END
" Avoiding side effects {{{1
let &cpo = s:save_cpo

View File

@@ -1,8 +1,6 @@
" vim: fdm=indent
source t/config/options.vim
call vspec#hint({'scope': 'tablemode#align#scope()', 'sid': 'tablemode#align#sid()'})
function! ConvertLines2Dict(lines)
let lines = []
for idx in range(len(a:lines))

View File

@@ -1,8 +1,6 @@
" vim: fdm=indent
source t/config/options.vim
call vspec#hint({'scope': 'tablemode#spreadsheet#cell#scope()', 'sid': 'tablemode#spreadsheet#cell#sid()'})
describe 'cell'
describe 'API'
before
@@ -64,20 +62,19 @@ describe 'cell'
before
new
normal! ggdG
call tablemode#Enable()
normal i|test11|test12|
|test21|test22|
read t/fixtures/sample.txt
call cursor(2, 3)
end
it 'should move left when not on first column'
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'
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')
@@ -92,7 +89,7 @@ describe 'cell'
end
it 'should move to the next row first column if it exists when on last column'
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')
@@ -105,13 +102,12 @@ describe 'cell'
before
new
normal! ggdG
normal! ggdG
call tablemode#Enable()
normal i|test11|test12|
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

View File

@@ -1,9 +1,27 @@
let g:table_mode_corner = '+'
let g:table_mode_separator = '|'
let g:table_mode_fillchar = '-'
let g:table_mode_header_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_corner_corner = '|'
let g:table_mode_align_char = ':'
let g:table_mode_disable_mappings = 0
let g:table_mode_motion_up_map = '{<Bar>'
let g:table_mode_motion_down_map = '}<Bar>'
let g:table_mode_motion_left_map = '[<Bar>'
let g:table_mode_motion_right_map = ']<Bar>'
let g:table_mode_cell_text_object_a_map = 'a<Bar>'
let g:table_mode_cell_text_object_i_map = 'i<Bar>'
let g:table_mode_realign_map = '<Leader>tr'
let g:table_mode_delete_row_map = '<Leader>tdd'
let g:table_mode_delete_column_map = '<Leader>tdc'
let g:table_mode_add_formula_map = '<Leader>tfa'
let g:table_mode_eval_formula_map = '<Leader>tfe'
let g:table_mode_echo_cell_map = '<Leader>t?'
let g:table_mode_sort_map = '<Leader>ts'

View File

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

View File

@@ -1,4 +1,4 @@
| Title | Message |
|------:+--------:|
| t1 | msg1 |
| t2 | msg2 |
| S. No | Title | Message |
|-------+:------+:-------:|
| 1 | t1 | msg1 |
| 2 | t2 | msg2 |

View File

@@ -1,4 +1,4 @@
| Title | Message |
|------:+--------:|
| t1 | msg1 |
| t2 | msg2 |
|S. No|Title|Message|
|-----+:----+:-----:|
|1|t1|msg1|
|2|t2|msg2|

View File

@@ -1,8 +1,8 @@
|--------------+------------------+------------|
| 测试测试 | 测试长度 | 长测试 |
|--------------+------------------+-----------:|
| abc | 测试长度 | 长测试 |
| 测试测试 | 测试长度 | 长测试 |
|--------------+:----------------:+-----------:|
| abc | 测试长度 | 长测试 |
| 长 | 测试测试测试测试 | 测试测试 |
| 测试测试 | 测试 | 测试测测试 |
| 测试测试测试 | 测试测试 | 测试 |
| 测试测试 | 测试 | 测试测测试 |
| 测试测试测试 | 测试测试 | 测试 |
|--------------+------------------+------------|

View File

@@ -1,6 +1,6 @@
|--------+--------+------|
|测试测试|测试长度|长测试|
|--------+--------+-----:|
|--------+:------:+-----:|
|abc|测试长度|长测试|
|长|测试测试测试测试|测试测试|
|测试测试|测试|测试测测试|

View File

@@ -1,8 +1,6 @@
" vim: fdm=indent
source t/config/options.vim
call vspec#hint({'scope': 'tablemode#spreadsheet#formula#scope()', 'sid': 'tablemode#spreadsheet#formula#sid()'})
describe 'Formulas'
describe 'Add Formula'
before
@@ -12,16 +10,16 @@ describe 'Formulas'
it 'should add a formula successfully'
call cursor(6, 15)
call tablemode#spreadsheet#formula#Add("Sum(1:4)")
call tablemode#spreadsheet#formula#Add("Sum(1:3)")
Expect tablemode#spreadsheet#cell#GetCell() == '125.0'
call cursor(8, 15)
Expect getline('.') == '/* tmf: $5,2=Sum(1:4) */'
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: $5,2=Sum(1:4) ; $6,2=Sum(1:-1) */'
Expect getline('.') == '/* tmf: $4,2=Sum(1:3); $5,2=Sum(1:-1) */'
end
end

View File

@@ -1,8 +1,6 @@
" vim: fdm=indent
source t/config/options.vim
call vspec#hint({'scope': 'tablemode#spreadsheet#scope()', 'sid': 'tablemode#spreadsheet#sid()'})
describe 'spreadsheet'
describe 'API'
before
@@ -88,9 +86,8 @@ describe 'spreadsheet'
before
new
normal! ggdG
call tablemode#Enable()
normal i|test11|test12|
|test21|test22|
read t/fixtures/sample.txt
call cursor(2, 3)
end
it 'should delete a row successfully'

View File

@@ -1,8 +1,6 @@
" vim: fdm=indent
source t/config/options.vim
call vspec#hint({'scope': 'tablemode#table#scope()', 'sid': 'tablemode#table#sid()'})
describe 'table'
describe 'IsRow'
before
@@ -42,6 +40,29 @@ describe 'table'
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

View File

@@ -1,8 +1,6 @@
" vim: fdm=indent
source t/config/options.vim
call vspec#hint({'scope': 'tablemode#scope()', 'sid': 'tablemode#sid()'})
describe 'tablemode'
describe 'Activation'
describe 'tablemode#Enable()'

View File

@@ -1,8 +1,6 @@
" vim: fdm=indent
source t/config/options.vim
call vspec#hint({'scope': 'tablemode#utils#scope()', 'sid': 'tablemode#utils#sid()'})
describe 'utils'
describe 'line'
it 'should return the current line number'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 43 KiB