table-mode


Ⅰ. 插件描述

VIM Table Mode for instant table creation.

Ⅱ. 基本信息

创建日期:  2013-03-16
使用用户:  416
Github星:  1050
插件作者:  Dhruva Sagar

Ⅲ. 安装方法

使用Vundle管理器安装

在你的.vimrc下添加:
Plugin 'dhruvasagar/table-mode'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall

对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。

使用NeoBundle管理器安装

在你的.vimrc下添加:
NeoBundle 'dhruvasagar/table-mode'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall

使用VimPlug管理器安装

在你的.vimrc下添加:
Plug 'dhruvasagar/table-mode'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall

使用Pathogen管理器安装

在终端中运行以下命令:
cd ~/.vim/bundle
git clone https://github.com/dhruvasagar/vim-table-mode

Ⅳ. 文档说明

# VIM Table Mode v4.6.7 Build Status

An awesome automatic table creator & formatter allowing one to create neat
tables as you type.

Getting Started

Installation

There are several ways to do this

  1. I recommend installing <a
    href="https://github.com/Shougo/neobundle.vim">NeoBundle and then just

add NeoBundle 'dhruvasagar/vim-table-mode' to your ~/.vimrc

  1. If you are using <a
    href="https://github.com/tpope/vim-pathogen">pathogen.vim, then

add a git submodule for your plugin:

$ cd ~/.vim
$ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode
  1. 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

Creating table on-the-fly

To start using the plugin in the on-the-fly mode use :TableModeToggle mapped to <Leader>tm by default (which means \ t m if you didn't override the <Leader> by :let mapleader = ',' to have , t m).

Tip :
You can use the following to quickly enable / disable table mode in insert
mode by using || or __ :

function! s:isAtStartOfLine(mapping)
  let text_before_cursor = getline('.')[0 : col('.')-1]
  let mapping_pattern = '\V' . escape(a:mapping, '\')
  let comment_pattern = '\V' . escape(substitute(&l:commentstring, '%s.*$', '', ''), '\')
  return (text_before_cursor =~? '^' . ('\v(' . comment_pattern . '\v)?') . '\s*\v' . mapping_pattern . '\v$')
endfunction

inoreabbrev <expr> <bar><bar>
          \ <SID>isAtStartOfLine('\|\|') ?
          \ '<c-o>:TableModeEnable<cr><bar><space><bar><left><left>' : '<bar><bar>'
inoreabbrev <expr> __
          \ <SID>isAtStartOfLine('__') ?
          \ '<c-o>:silent! TableModeDisable<cr>' : '__'

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 you’re 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 |
+-----------------+--------------------------+------------+

Markdown and ReST filetypes have automatically configured corners.

You can also define in a table header border how it's content should be
aligned, whether center, right or left by using a : character defined by
g:table_mode_align_char option.

If you manipulate the table when table mode is disabled or copy paste a table
from clipboard from outside and it ends up being misaligned, you can realign
it using :TableModeRealign or using the default mapping
<Leader>tr defined by g:table_mode_relign_map option.

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
on the fly as you type, formatting existing content into a table is equally

  1. You can visually select multiple lines and call :Tableize on it,
  2. 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.

Moving around

Now you can move between cells using table mode motions [|,
]|, {| & }| to move left | right | up |
down cells respectively. The left | right motions wrap around the table
and move to the next | previous row after the last | first cell in the
current row if one exists.

Manipulating Table

  • Cell Text Object :

    Tableize provides a text object for manipulating table cells. Following
    the vim philosophy the you have i| & a| for the
    inner and around (including the immidiate right table separator) the
    table cell.

  • 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.

Advanced Usage: Spreadsheet Capabilities

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.

NOTE: You can now use the mapping <Leader>t?

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. You can use negative indice to represent column relative to the
      last, -1 being the last.
    • $n,m: This matches the table cell n,m (row, column). So in this case
      the formula would be evaluated and the result will be placed in this

      1. You can also use negative values to refer to cells relative to
      2. size, -1 being the last (row or column).
  • The formula can be a simple mathematical expression involving cells
    which are also defined by the same format as that of the target cell. You
    can use all native vim functions within the formula. Apart from that table
    mode also provides 2 special functions Sum and Average. Both these
    functions take a range as input. A range can be of two forms :

    • 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

<img
src="https://raw.github.com/axil/vim-table-mode/master/youtube.png"/>

Change Log

See <a
href="https://github.com/dhruvasagar/vim-table-mode/blob/master/CHANGELOG.md">
CHANGELOG.md

Contributing

Reporting an Issue :

Contributing to code :

  • Fork it.
  • Commit your changes and give your commit message some love.
  • Push to your fork on github.
  • Open a Pull Request.

Credit

I must thank Tim Pope for inspiration. The initial concept was created by him
named cucumbertables.vim.

Also a shout out to godlygeek who developed the incredible <a
href="http://github.com/godlygeek/tabular">Tabular plugin.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]










添加新评论