useful commands
command! -nargs=0 -bar -range=% Reverse
\ let save_mark_t = getpos("'t")
\<bar> <line2>kt
\<bar> exe "<line1>,<line2>g/^/m't"
\<bar> call setpos("'t", save_mark_t)
nnoremap <Leader>r :Reverse <bar> nohlsearch<CR>
xnoremap <Leader>r :Reverse <bar> nohlsearch<CR>
command! -nargs=0 DocTocUpdate execute 'silent !/usr/local/bin/doctoc --notitle --update-only --github --maxlevel 3 %' | execute 'redraw!'
command! -nargs=0 DocTocCreate execute 'silent !/usr/local/bin/doctoc --notitle --github --maxlevel 3 %' | execute 'redraw!'
command! -nargs=1 First execute 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
command! -nargs=1 -range First execute <line1> . ',' . <line2> . 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
command! -nargs=0 Iname execute 'echo expand("%:p")'
Tabularize
[!TIP|label:references:]
- Tabular cheatsheet
- align with first space :
/^\s*\S\+\zs/l0c1l0
- align the second
=
to left :/^\(.\{-}\zs=\)\{2}/l1l0
specifier | comments |
---|---|
l<N> |
left-align (with N spaces padding) |
r<N> |
right-align (with N spaces padding) |
c<N> |
center-align (with N spaces padding) |
:Tabularize /,/r1c1l0
means:
- splitting fields on commas (
:
) - print everything before the first comma right aligned, then 1 space
- then the comma center aligned, then 1 space,
- then everything after the comma left aligned.
including the
<sep>
align to left
:Tabularize /<sep>
- or
:Tabularize /<sep>/l1
- or
align to center
:Tabularize /<sep>/r1c1l0
align without
<sep>
[!NOTE]
help /zs
:Tabularize /<sep>\zs/<specifier>
align with the N pattern
i.e.: the second match (
=
)
- refer to matches the N pattern
-
- align the first
:
or:Tabularize /^[^:]*\zs:
:Tabularize /:.*
-
[!NOTE] only for default left-alignemnt. Not support customized right/middle alignment. i.e.:
/r1c1l0
command! -nargs=1 -range First exec <line1> . ',' . <line2> . 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
- align the first
align with 2nd matches
:Tabularize /^\(.\{-}\zs=\)\{N}/ | `^` means start of the line
or with
\v
(very magic)reference:
:Tabularize /\v^(.{-}\zs\=){N}/<specifier>
- for every N matches
: Tabularize /\(.\{-}\zs=\)\{N}/<specifier> | no `^` means every `{N}` matches
- or
:Tabularize /\v(.{-}\zs\=){N}/<specifier>
- or
align on specific symbol
[!NOTE|label:pre condition:]
- align the first
:
and last matches,
as below:[ isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() , ]
first
:
reference: via
/^[^;]*\zs:
/^[^;]*\zs:/r1c1l0
/^[^;]*/r1c1l0
/^[^:]*\zs:
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
/^[^:]*\zs/r1c1l0
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
/^[^:]*\zs:/r1c1l0
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
/^[^:]*/r1c1l0
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
/^[^:]*:/r1c1l0
:isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
last
,
tips:
- actually the pattern not matches with the final
,
, but matches with)<.*> ,
sample code:
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
/)[^,]*\zs,
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
or even better align
:1,3Tabularize /,
or:'<,'>Tabularize /,
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
:Tabularize /)[^,]*\zs,
isRunning : proc.getOrDefault( 'run' , false ) , name : proc.getOrDefault( 'name' , '') , runningStage : proc.getOrDefault( 'stage' , ['all'] ) , type : proc.type.split('^.*\\u00BB\\s*').last() ,
- actually the pattern not matches with the final