mirror of
https://github.com/dhruvasagar/vim-table-mode.git
synced 2025-11-08 11:03:47 -05:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e909c0668 |
@@ -1,10 +1,10 @@
|
||||
" ============================== Header ==================================={{{
|
||||
" ============================== 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: http://github.com/dhruvasagar/vim-table-mode
|
||||
" Version: 3.0
|
||||
" Version: 3.1
|
||||
" 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.
|
||||
@@ -113,6 +113,10 @@ function! s:StartExpr() "{{{2
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:HeaderBorderExpr() "{{{2
|
||||
return '^\s*' . g:table_mode_corner . '[' . g:table_mode_fillchar . g:table_mode_corner . ']*' . g:table_mode_corner . '$'
|
||||
endfunction
|
||||
|
||||
function! s:EndExpr() "{{{2
|
||||
let cend = s:GetCommentEnd()
|
||||
if s:Strlen(cend) > 0
|
||||
@@ -148,7 +152,8 @@ function! s:IsTableModeActive() "{{{2
|
||||
endfunction
|
||||
|
||||
function! s:RowGap() "{{{2
|
||||
return g:table_mode_border ? 2 : 1
|
||||
" Getting rid of borders, so the row gap is now just 1
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! s:ToggleMapping() "{{{2
|
||||
@@ -159,8 +164,13 @@ function! s:ToggleMapping() "{{{2
|
||||
|
||||
execute "inoremap <silent> <buffer> " . b:table_mode_separator_map . ' ' .
|
||||
\ b:table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
|
||||
|
||||
execute "inoreabbrev <silent> <buffer> " . g:table_mode_corner .
|
||||
\ g:table_mode_fillchar . "<Esc>:call tablemode#AddHeaderBorder('.')<CR>A"
|
||||
else
|
||||
execute "iunmap <silent> <buffer> " . b:table_mode_separator_map
|
||||
|
||||
execute "iunabbrev <silent> <buffer> " . g:table_mode_corner . g:table_mode_fillchar
|
||||
endif
|
||||
endfunction
|
||||
|
||||
@@ -169,48 +179,24 @@ function! s:SetActive(bool) "{{{2
|
||||
call s:ToggleMapping()
|
||||
endfunction
|
||||
|
||||
function! s:GenerateBorder(line) "{{{2
|
||||
let line_val = getline(a:line)
|
||||
function! s:GenerateHeaderBorder(line) "{{{2
|
||||
let line = s:Line(a:line)
|
||||
if tablemode#IsATableRow(line - s:RowGap())
|
||||
let line_val = getline(line - s:RowGap())
|
||||
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')
|
||||
let border = substitute(border, '[^' . g:table_mode_corner . ']', g:table_mode_fillchar, 'g')
|
||||
|
||||
let cstartexpr = s:StartCommentExpr()
|
||||
if s:Strlen(cstartexpr) > 0 && getline(a:line) =~# cstartexpr
|
||||
if s:Strlen(cstartexpr) > 0 && getline(line) =~# cstartexpr
|
||||
let sce = matchstr(line_val, s:StartCommentExpr())
|
||||
let ece = matchstr(line_val, s:EndCommentExpr())
|
||||
return sce . border . ece
|
||||
elseif getline(a:line) =~# s:StartExpr()
|
||||
elseif getline(line) =~# s:StartExpr()
|
||||
let indent = matchstr(line_val, s:StartExpr())
|
||||
return indent . border
|
||||
else
|
||||
return border
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:UpdateLineBorder(line) "{{{2
|
||||
let line = s:Line(a:line)
|
||||
|
||||
let hf = s:StartExpr() . g:table_mode_corner . '[' . g:table_mode_corner .
|
||||
\ g:table_mode_fillchar . ']*' . g:table_mode_corner . '\?' . s:EndExpr()
|
||||
|
||||
let rowgap = s:RowGap()
|
||||
let border = s:GenerateBorder(line)
|
||||
|
||||
let [prev_line, next_line] = [getline(line-1), getline(line+1)]
|
||||
if next_line =~# hf
|
||||
if s:Strlen(border) > s:Strlen(s:GenerateBorder(line + rowgap)) || !tablemode#IsATableRow(line + rowgap)
|
||||
call setline(line+1, border)
|
||||
endif
|
||||
else
|
||||
call append(line, border)
|
||||
endif
|
||||
|
||||
if prev_line =~# hf
|
||||
if s:Strlen(border) > s:Strlen(s:GenerateBorder(line - rowgap)) || !tablemode#IsATableRow(line - rowgap)
|
||||
call setline(line-1, border)
|
||||
endif
|
||||
else
|
||||
call append(line-1, border)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
@@ -220,8 +206,16 @@ function! s:ConvertDelimiterToSeparator(line, ...) "{{{2
|
||||
if delim ==# ','
|
||||
silent! execute a:line . 's/' . "[\'\"][^\'\"]*\\zs,\\ze[^\'\"]*[\'\"]/__COMMA__/g"
|
||||
endif
|
||||
silent! execute a:line . 's/' . s:StartExpr() . '\zs\ze.\|' . delim . '\|.\zs\ze' . s:EndExpr() . '/' .
|
||||
|
||||
let [cstart, cend] = [s:GetCommentStart(), s:GetCommentEnd()]
|
||||
let [match_char_start, match_char_end] = ['.', '.']
|
||||
if s:Strlen(cend) > 0 | let match_char_end = '[^' . cend . ']' | endif
|
||||
if s:Strlen(cstart) > 0 | let match_char_start = '[^' . cstart . ']' | endif
|
||||
|
||||
silent! execute a:line . 's/' . s:StartExpr() . '\zs\ze' . match_char_start .
|
||||
\ '\|' . delim . '\|' . match_char_end . '\zs\ze' . s:EndExpr() . '/' .
|
||||
\ g:table_mode_separator . '/g'
|
||||
|
||||
if delim ==# ','
|
||||
silent! execute a:line . 's/' . "[\'\"][^\'\"]*\\zs__COMMA__\\ze[^\'\"]*[\'\"]/,/g"
|
||||
endif
|
||||
@@ -231,7 +225,6 @@ function! s:Tableizeline(line, ...) "{{{2
|
||||
let delim = g:table_mode_delimiter
|
||||
if a:0 && type(a:1) == type('') && !empty(a:1) | let delim = a:1[1:-1] | endif
|
||||
call s:ConvertDelimiterToSeparator(a:line, delim)
|
||||
if g:table_mode_border | call s:UpdateLineBorder(a:line) | endif
|
||||
endfunction
|
||||
|
||||
function! s:IsFirstCell() "{{{2
|
||||
@@ -614,20 +607,14 @@ function! tablemode#TableModeToggle() "{{{2
|
||||
endfunction
|
||||
|
||||
function! tablemode#TableizeRange(...) range "{{{2
|
||||
let shift = 1
|
||||
if g:table_mode_border | let shift += 1 | endif
|
||||
call s:Tableizeline(a:firstline, a:1)
|
||||
undojoin
|
||||
" The first one causes 2 extra lines for top & bottom border while the
|
||||
" following lines cause only 1 for the bottom border.
|
||||
let lnum = a:firstline + shift + (g:table_mode_border > 0)
|
||||
while lnum < (a:firstline + (a:lastline - a:firstline + 1)*shift)
|
||||
let lnum = a:firstline
|
||||
while lnum < (a:firstline + (a:lastline - a:firstline + 1)*s:RowGap())
|
||||
call s:Tableizeline(lnum, a:1)
|
||||
undojoin
|
||||
let lnum = lnum + shift
|
||||
let lnum = lnum + s:RowGap()
|
||||
endwhile
|
||||
|
||||
if g:table_mode_border | call tablemode#TableRealign(lnum - shift) | endif
|
||||
call tablemode#TableRealign(lnum - s:RowGap())
|
||||
endfunction
|
||||
|
||||
function! tablemode#TableizeByDelimiter() "{{{2
|
||||
@@ -639,18 +626,38 @@ function! tablemode#TableizeByDelimiter() "{{{2
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tablemode#AddHeaderBorder(line) "{{{2
|
||||
call setline(a:line, s:GenerateHeaderBorder(a:line))
|
||||
endfunction
|
||||
|
||||
function! tablemode#TableRealign(line) "{{{2
|
||||
let line = s:Line(a:line)
|
||||
|
||||
let [lnums, lines] = [[], []]
|
||||
let tline = line
|
||||
let [bline, tline] = [0, line]
|
||||
while tablemode#IsATableRow(tline)
|
||||
call insert(lnums, tline)
|
||||
call insert(lines, getline(tline))
|
||||
let tline = tline - s:RowGap()
|
||||
endwhile
|
||||
|
||||
" If we reached header walking upwards
|
||||
if getline(tline) =~# s:HeaderBorderExpr() && tablemode#IsATableRow(tline - s:RowGap())
|
||||
let bline = tline
|
||||
let tline = tline - s:RowGap()
|
||||
" Insert the header line
|
||||
call insert(lnums, tline)
|
||||
call insert(lines, getline(tline))
|
||||
endif
|
||||
|
||||
let tline = line + s:RowGap()
|
||||
|
||||
" If we start at header
|
||||
if !bline && getline(tline) =~# s:HeaderBorderExpr()
|
||||
let bline = tline
|
||||
let tline = tline + s:RowGap()
|
||||
endif
|
||||
|
||||
while tablemode#IsATableRow(tline)
|
||||
call add(lnums, tline)
|
||||
call add(lines, getline(tline))
|
||||
@@ -662,9 +669,11 @@ function! tablemode#TableRealign(line) "{{{2
|
||||
for lnum in lnums
|
||||
let index = index(lnums, lnum)
|
||||
call setline(lnum, lines[index])
|
||||
undojoin
|
||||
call s:UpdateLineBorder(lnum)
|
||||
endfor
|
||||
|
||||
if bline
|
||||
call tablemode#AddHeaderBorder(bline)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tablemode#IsATableRow(line) "{{{2
|
||||
@@ -837,6 +846,8 @@ function! tablemode#AddFormula() "{{{2
|
||||
let fr = input('f=')
|
||||
let row = tablemode#RowNr('.')
|
||||
let colm = tablemode#ColumnNr('.')
|
||||
let indent = indent('.')
|
||||
let indent_str = repeat(' ', indent)
|
||||
|
||||
if fr !=# ''
|
||||
let fr = '$' . row . ',' . colm . '=' . fr
|
||||
@@ -860,7 +871,7 @@ function! tablemode#AddFormula() "{{{2
|
||||
let [cmss, cmse] = [cms[0], '']
|
||||
endif
|
||||
endif
|
||||
let fr = cmss . ' tmf: ' . fr . ' ' . cmse
|
||||
let fr = indent_str . cmss . ' tmf: ' . fr . ' ' . cmse
|
||||
call append(fline-1, fr)
|
||||
call cursor(cursor_pos)
|
||||
endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
*table-mode.txt* Table Mode for easy table formatting. v3.0
|
||||
*table-mode.txt* Table Mode for easy table formatting. v3.1
|
||||
===============================================================================
|
||||
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
|
||||
VERSION 3.0
|
||||
VERSION 3.1
|
||||
|
||||
Author: Dhruva Sagar <http://dhruvasagar.com/>
|
||||
License: MIT <http://opensource.org/licenses/MIT/>
|
||||
@@ -36,7 +36,7 @@ Create Table on the fly:
|
||||
|
||||
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.
|
||||
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
|
||||
@@ -130,7 +130,6 @@ 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.
|
||||
@@ -154,12 +153,6 @@ g:loaded_table_mode *table-mode-loaded*
|
||||
Use this option to disable the plugin: >
|
||||
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 = '+'
|
||||
@@ -172,7 +165,7 @@ 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 = '-'
|
||||
<
|
||||
|
||||
@@ -330,6 +323,12 @@ MAPPINGS *table-mode-mappings*
|
||||
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*
|
||||
|
||||
|
||||
@@ -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.4.0
|
||||
" Version: 3.1
|
||||
" 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.
|
||||
@@ -24,22 +24,18 @@ if exists('g:loaded_table_mode')
|
||||
finish
|
||||
endif
|
||||
let g:loaded_table_mode = 1
|
||||
"}}}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', '-')
|
||||
@@ -55,7 +51,6 @@ 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')
|
||||
"}}}1
|
||||
|
||||
function! s:TableMotion() "{{{1
|
||||
let direction = nr2char(getchar())
|
||||
@@ -63,7 +58,6 @@ function! s:TableMotion() "{{{1
|
||||
call tablemode#TableMotion(direction)
|
||||
endfor
|
||||
endfunction
|
||||
" }}}1
|
||||
|
||||
" Define Commands & Mappings {{{1
|
||||
if !g:table_mode_always_active "{{{2
|
||||
@@ -108,11 +102,9 @@ execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_add_formul
|
||||
\ " :TableAddFormula<CR>"
|
||||
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_eval_expr_map .
|
||||
\ " :TableEvalFormulaLine<CR>"
|
||||
"}}}1
|
||||
|
||||
" Avoiding side effects {{{1
|
||||
let &cpo = s:save_cpo
|
||||
" }}}1
|
||||
|
||||
" ModeLine {{{
|
||||
" vim: sw=2 sts=2 fdl=0 fdm=marker
|
||||
|
||||
Reference in New Issue
Block a user