usage

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")'

[!TIP|label:references:]

specifiercomments

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
    • 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 (=)

  • align on first matche

    • align the first :

      :Tabularize /^[^:]*\zs:

      or

      :Tabularize /:.*
    • via vim cmd

      [!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 with 2nd matches

    :Tabularize /^\(.\{-}\zs=\)\{N}/
                 |
                `^` means start of the line
  • for every N matches

    : Tabularize /\(.\{-}\zs=\)\{N}/<specifier>
                 |
                 no `^` means every `{N}` matches
    • or

      :Tabularize /\v(.{-}\zs\=){N}/<specifier>

[!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() ,

Last updated