Change option name and shorthand notations

- `mode_sequence` (`ms`) -> `align` (`a`)
- `stick_to_left` (`<` / `s01`)

This commit does not break backward compatibility.
`mode_sequence` is still allowed.
This commit is contained in:
Junegunn Choi
2014-07-23 22:15:01 +09:00
parent f9a49e441d
commit 2fa6a040f6
5 changed files with 179 additions and 87 deletions

View File

@@ -171,13 +171,13 @@ You can override these default rules or define your own rules with
#### Examples #### Examples
| With visual map | Description | Equivalent command | | With visual map | Description | Equivalent command |
| ------------------- | ---------------------------------- | ---------------------- | | ------------------- | ---------------------------------- | --------------------- |
| `<Enter><Space>` | Around 1st whitespaces | `:'<,'>EasyAlign\ ` | | `<Enter><Space>` | Around 1st whitespaces | `:'<,'>EasyAlign\ ` |
| `<Enter>2<Space>` | Around 2nd whitespaces | `:'<,'>EasyAlign2\ ` | | `<Enter>2<Space>` | Around 2nd whitespaces | `:'<,'>EasyAlign2\ ` |
| `<Enter>-<Space>` | Around the last whitespaces | `:'<,'>EasyAlign-\ ` | | `<Enter>-<Space>` | Around the last whitespaces | `:'<,'>EasyAlign-\ ` |
| `<Enter>-2<Space>` | Around the 2nd to last whitespaces | `:'<,'>EasyAlign-2\ ` | | `<Enter>-2<Space>` | Around the 2nd to last whitespaces | `:'<,'>EasyAlign-2\ ` |
| `<Enter>:` | Around 1st colon (`key: value`) | `:'<,'>EasyAlign:` | | `<Enter>:` | Around 1st colon (`key: value`) | `:'<,'>EasyAlign:` |
| `<Enter><Right>:` | Around 1st colon (`key : value`) | `:'<,'>EasyAlign:s0l1` | | `<Enter><Right>:` | Around 1st colon (`key : value`) | `:'<,'>EasyAlign:<l1` |
| `<Enter>=` | Around 1st operators with = | `:'<,'>EasyAlign=` | | `<Enter>=` | Around 1st operators with = | `:'<,'>EasyAlign=` |
| `<Enter>3=` | Around 3rd operators with = | `:'<,'>EasyAlign3=` | | `<Enter>3=` | Around 3rd operators with = | `:'<,'>EasyAlign3=` |
| `<Enter>*=` | Around all operators with = | `:'<,'>EasyAlign*=` | | `<Enter>*=` | Around all operators with = | `:'<,'>EasyAlign*=` |
@@ -211,7 +211,7 @@ keys listed below. The meaning of each option will be described in
| `CTRL-D` | `delimiter_align` | left, center, right | | `CTRL-D` | `delimiter_align` | left, center, right |
| `CTRL-U` | `ignore_unmatched` | 0, 1 | | `CTRL-U` | `ignore_unmatched` | 0, 1 |
| `CTRL-G` | `ignore_groups` | [], ['String'], ['Comment'], ['String', 'Comment'] | | `CTRL-G` | `ignore_groups` | [], ['String'], ['Comment'], ['String', 'Comment'] |
| `CTRL-O` | `mode_sequence` | Input string (`/[lrc]+\*{0,2}/`) | | `CTRL-A` | `align` | Input string (`/[lrc]+\*{0,2}/`) |
| `<Left>` | `stick_to_left` | `{ 'stick_to_left': 1, 'left_margin': 0 }` | | `<Left>` | `stick_to_left` | `{ 'stick_to_left': 1, 'left_margin': 0 }` |
| `<Right>` | `stick_to_left` | `{ 'stick_to_left': 0, 'left_margin': 1 }` | | `<Right>` | `stick_to_left` | `{ 'stick_to_left': 0, 'left_margin': 1 }` |
| `<Down>` | `*_margin` | `{ 'left_margin': 0, 'right_margin': 0 }` | | `<Down>` | `*_margin` | `{ 'left_margin': 0, 'right_margin': 0 }` |
@@ -275,20 +275,20 @@ You can even omit spaces between the arguments, so concisely (or cryptically):
Nice. But let's make it even shorter. Option values can be written in shorthand Nice. But let's make it even shorter. Option values can be written in shorthand
notation. notation.
- `:EasyAlign*/[:;]\+/s1l0` - `:EasyAlign*/[:;]\+/<l0`
The following table summarizes the shorthand notation. The following table summarizes the shorthand notation.
| Option | Expression | | Option | Expression |
| ------------------ | ---------- | | ------------------ | -------------- |
| `filter` | `[gv]/.*/` | | `filter` | `[gv]/.*/` |
| `left_margin` | `l[0-9]+` | | `left_margin` | `l[0-9]+` |
| `right_margin` | `r[0-9]+` | | `right_margin` | `r[0-9]+` |
| `stick_to_left` | `s[01]` | | `stick_to_left` | `<` or `s[01]` |
| `ignore_unmatched` | `iu[01]` | | `ignore_unmatched` | `iu[01]` |
| `ignore_groups` | `ig\[.*\]` | | `ignore_groups` | `ig\[.*\]` |
| `align` | `a[lrc*]*` |
| `delimiter_align` | `d[lrc]` | | `delimiter_align` | `d[lrc]` |
| `mode_sequence` | `m[lrc*]*` |
| `indentation` | `i[ksdn]` | | `indentation` | `i[ksdn]` |
For your information, the same operation can be done in interactive mode as For your information, the same operation can be done in interactive mode as
@@ -345,7 +345,7 @@ Alignment options
| `ignore_unmatched` | boolean | 1 | Whether to ignore lines without matching delimiter | | `ignore_unmatched` | boolean | 1 | Whether to ignore lines without matching delimiter |
| `indentation` | string | `k` | Indentation method (*k*eep, *d*eep, *s*hallow, *n*one) | | `indentation` | string | `k` | Indentation method (*k*eep, *d*eep, *s*hallow, *n*one) |
| `delimiter_align` | string | `r` | Determines how to align delimiters of different lengths | | `delimiter_align` | string | `r` | Determines how to align delimiters of different lengths |
| `mode_sequence` | string | | Alignment modes for multiple occurrences of delimiters | | `align` | string | | Alignment modes for multiple occurrences of delimiters |
There are 4 ways to set alignment options (from lowest precedence to highest): There are 4 ways to set alignment options (from lowest precedence to highest):
@@ -364,7 +364,7 @@ There are 4 ways to set alignment options (from lowest precedence to highest):
| `ignore_unmatched` | `CTRL-U` | `iu[01]` | `g:easy_align_ignore_unmatched` | | `ignore_unmatched` | `CTRL-U` | `iu[01]` | `g:easy_align_ignore_unmatched` |
| `indentation` | `CTRL-I` | `i[ksdn]` | `g:easy_align_indentation` | | `indentation` | `CTRL-I` | `i[ksdn]` | `g:easy_align_indentation` |
| `delimiter_align` | `CTRL-D` | `d[lrc]` | `g:easy_align_delimiter_align` | | `delimiter_align` | `CTRL-D` | `d[lrc]` | `g:easy_align_delimiter_align` |
| `mode_sequence` | `CTRL-O` | `m[lrc*]*` | | | `align` | `CTRL-A` | `m[lrc*]*` | |
### Filtering lines ### Filtering lines
@@ -626,38 +626,38 @@ To recap:
:EasyAlign! **= :EasyAlign! **=
``` ```
In addition to these, you can fine-tune alignments over multiple occurrences of In addition to these, you can fine-tune alignments over multiple occurrences
the delimiters with 'mode_sequence' option. (The option can also be set of the delimiters with 'align' option. (The option can also be set in
in interactive mode with the special key `CTRL-O`) interactive mode with the special key `CTRL-A`)
```vim ```vim
" Left alignment over the first two occurrences of delimiters " Left alignment over the first two occurrences of delimiters
:EasyAlign = { 'mode_sequence': 'll' } :EasyAlign = { 'align': 'll' }
" Right, left, center alignment over the 1st to 3rd occurrences of delimiters " Right, left, center alignment over the 1st to 3rd occurrences of delimiters
:EasyAlign = { 'm': 'rlc' } :EasyAlign = { 'a': 'rlc' }
" Using shorthand notation " Using shorthand notation
:EasyAlign = mrlc :EasyAlign = arlc
" Right, left, center alignment over the 2nd to 4th occurrences of delimiters " Right, left, center alignment over the 2nd to 4th occurrences of delimiters
:EasyAlign 2=mrlc :EasyAlign 2=arlc
" (*) Repeating alignments (default: l, r, or c) " (*) Repeating alignments (default: l, r, or c)
" Right, left, center, center, center, center, ... " Right, left, center, center, center, center, ...
:EasyAlign *=mrlc :EasyAlign *=arlc
" (**) Alternating alignments (default: lr or rl) " (**) Alternating alignments (default: lr or rl)
" Right, left, center, right, left, center, ... " Right, left, center, right, left, center, ...
:EasyAlign **=mrlc :EasyAlign **=arlc
" Right, left, center, center, center, ... repeating alignment " Right, left, center, center, center, ... repeating alignment
" over the 3rd to the last occurrences of delimiters " over the 3rd to the last occurrences of delimiters
:EasyAlign 3=mrlc* :EasyAlign 3=arlc*
" Right, left, center, right, left, center, ... alternating alignment " Right, left, center, right, left, center, ... alternating alignment
" over the 3rd to the last occurrences of delimiters " over the 3rd to the last occurrences of delimiters
:EasyAlign 3=mrlc** :EasyAlign 3=arlc**
``` ```
### Extending alignment rules ### Extending alignment rules

View File

@@ -51,7 +51,8 @@ let s:known_options = {
\ 'margin_left': [0, 1], 'margin_right': [0, 1], 'stick_to_left': [0], \ 'margin_left': [0, 1], 'margin_right': [0, 1], 'stick_to_left': [0],
\ 'left_margin': [0, 1], 'right_margin': [0, 1], 'indentation': [1], \ 'left_margin': [0, 1], 'right_margin': [0, 1], 'indentation': [1],
\ 'ignore_groups': [3 ], 'ignore_unmatched': [0 ], 'delimiter_align': [1], \ 'ignore_groups': [3 ], 'ignore_unmatched': [0 ], 'delimiter_align': [1],
\ 'mode_sequence': [1 ], 'ignores': [3], 'filter': [1] \ 'mode_sequence': [1 ], 'ignores': [3], 'filter': [1],
\ 'align': [1 ]
\ } \ }
let s:option_values = { let s:option_values = {
@@ -65,7 +66,8 @@ let s:shorthand = {
\ 'margin_left': 'lm', 'margin_right': 'rm', 'stick_to_left': 'stl', \ 'margin_left': 'lm', 'margin_right': 'rm', 'stick_to_left': 'stl',
\ 'left_margin': 'lm', 'right_margin': 'rm', 'indentation': 'idt', \ 'left_margin': 'lm', 'right_margin': 'rm', 'indentation': 'idt',
\ 'ignore_groups': 'ig', 'ignore_unmatched': 'iu', 'delimiter_align': 'da', \ 'ignore_groups': 'ig', 'ignore_unmatched': 'iu', 'delimiter_align': 'da',
\ 'mode_sequence': 'm', 'ignores': 'ig', 'filter': 'f' \ 'mode_sequence': 'a', 'ignores': 'ig', 'filter': 'f',
\ 'align': 'a'
\ } \ }
if exists("*strdisplaywidth") if exists("*strdisplaywidth")
@@ -229,6 +231,7 @@ function! s:normalize_options(opts)
" Backward-compatibility " Backward-compatibility
if k == 'margin_left' | let k = 'left_margin' | endif if k == 'margin_left' | let k = 'left_margin' | endif
if k == 'margin_right' | let k = 'right_margin' | endif if k == 'margin_right' | let k = 'right_margin' | endif
if k == 'mode_sequence' | let k = 'align' | endif
let ret[k] = v let ret[k] = v
unlet v unlet v
endfor endfor
@@ -668,7 +671,7 @@ function! s:interactive(range, modes, n, d, opts, rules, vis, live)
endif endif
elseif c == 13 " Enter key elseif c == 13 " Enter key
let mode = s:shift(a:modes, 1) let mode = s:shift(a:modes, 1)
if has_key(opts, 'm') if has_key(opts, 'a')
let opts.m = mode . strpart(opts.m, 1) let opts.m = mode . strpart(opts.m, 1)
endif endif
elseif ch == '-' elseif ch == '-'
@@ -723,15 +726,15 @@ function! s:interactive(range, modes, n, d, opts, rules, vis, live)
silent! call remove(opts, 'stl') silent! call remove(opts, 'stl')
silent! call remove(opts, 'lm') silent! call remove(opts, 'lm')
silent! call remove(opts, 'rm') silent! call remove(opts, 'rm')
elseif ch == "\<C-O>" elseif ch == "\<C-A>" || ch == "\<C-O>"
let modes = tolower(s:input("Mode sequence: ", get(opts, 'm', mode), a:vis)) let modes = tolower(s:input("Alignment ([lrc...][[*]*]): ", get(opts, 'a', mode), a:vis))
if match(modes, '^[lrc]\+\*\{0,2}$') != -1 if match(modes, '^[lrc]\+\*\{0,2}$') != -1
let opts['m'] = modes let opts['a'] = modes
let mode = modes[0] let mode = modes[0]
while mode != s:shift(a:modes, 1) while mode != s:shift(a:modes, 1)
endwhile endwhile
else else
silent! call remove(opts, 'm') silent! call remove(opts, 'a')
endif endif
elseif ch == "\<C-_>" || ch == "\<C-X>" elseif ch == "\<C-_>" || ch == "\<C-X>"
if a:live && regx && !empty(d) if a:live && regx && !empty(d)
@@ -811,8 +814,8 @@ endfunction
let s:shorthand_regex = let s:shorthand_regex =
\ '\s*\%(' \ '\s*\%('
\ .'\(lm\?[0-9]\+\)\|\(rm\?[0-9]\+\)\|\(iu[01]\)\|\(s\%(tl\)\?[01]\)\|' \ .'\(lm\?[0-9]\+\)\|\(rm\?[0-9]\+\)\|\(iu[01]\)\|\(\%(s\%(tl\)\?[01]\)\|<\)\|'
\ .'\(da\?[clr]\)\|\(ms\?[lrc*]\+\)\|\(i\%(dt\)\?[kdsn]\)\|\([gv]/.*/\)\|\(ig\[.*\]\)' \ .'\(da\?[clr]\)\|\(\%(ms\?\|a\)[lrc*]\+\)\|\(i\%(dt\)\?[kdsn]\)\|\([gv]/.*/\)\|\(ig\[.*\]\)'
\ .'\)\+\s*$' \ .'\)\+\s*$'
function! s:parse_shorthand_opts(expr) function! s:parse_shorthand_opts(expr)
@@ -828,7 +831,7 @@ function! s:parse_shorthand_opts(expr)
let match = matchlist(expr, regex) let match = matchlist(expr, regex)
if empty(match) | break | endif if empty(match) | break | endif
for m in filter(match[ 1 : -1 ], '!empty(v:val)') for m in filter(match[ 1 : -1 ], '!empty(v:val)')
for key in ['lm', 'rm', 'l', 'r', 'stl', 's', 'iu', 'da', 'd', 'ms', 'm', 'ig', 'i', 'g', 'v'] for key in ['lm', 'rm', 'l', 'r', 'stl', 's', '<', 'iu', 'da', 'd', 'ms', 'm', 'ig', 'i', 'g', 'v', 'a']
if stridx(tolower(m), key) == 0 if stridx(tolower(m), key) == 0
let rest = strpart(m, len(key)) let rest = strpart(m, len(key))
if key == 'i' | let key = 'idt' | endif if key == 'i' | let key = 'idt' | endif
@@ -837,7 +840,7 @@ function! s:parse_shorthand_opts(expr)
let key = 'f' let key = 'f'
endif endif
if key == 'idt' || index(['d', 'f', 'm'], key[0]) >= 0 if key == 'idt' || index(['d', 'f', 'm', 'a'], key[0]) >= 0
let opts[key] = rest let opts[key] = rest
elseif key == 'ig' elseif key == 'ig'
try try
@@ -850,6 +853,8 @@ function! s:parse_shorthand_opts(expr)
catch catch
call s:exit("Invalid ignore_groups: ". a:expr) call s:exit("Invalid ignore_groups: ". a:expr)
endtry endtry
elseif key == '<'
let opts['stl'] = 1
else else
let opts[key] = str2nr(rest) let opts[key] = str2nr(rest)
endif endif
@@ -1025,7 +1030,7 @@ function! s:process(range, mode, n, ch, opts, regexp, rules, bvis)
let [nth, recur] = s:parse_nth(a:n) let [nth, recur] = s:parse_nth(a:n)
let dict = s:build_dict(a:rules, a:ch, a:regexp, a:opts) let dict = s:build_dict(a:rules, a:ch, a:regexp, a:opts)
let [mode_sequence, recur] = s:build_mode_sequence( let [mode_sequence, recur] = s:build_mode_sequence(
\ get(dict, 'mode_sequence', recur == 2 ? s:alternating_modes(a:mode) : a:mode), \ get(dict, 'align', recur == 2 ? s:alternating_modes(a:mode) : a:mode),
\ recur) \ recur)
if recur && a:bvis if recur && a:bvis
@@ -1050,11 +1055,11 @@ endfunction
function s:summarize(opts, recur, mode_sequence) function s:summarize(opts, recur, mode_sequence)
let copts = s:compact_options(a:opts) let copts = s:compact_options(a:opts)
let nbmode = s:interactive_modes(0)[0] let nbmode = s:interactive_modes(0)[0]
if !has_key(copts, 'm') && ( if !has_key(copts, 'a') && (
\ (a:recur == 2 && s:alternating_modes(nbmode) != a:mode_sequence) || \ (a:recur == 2 && s:alternating_modes(nbmode) != a:mode_sequence) ||
\ (a:recur != 2 && (a:mode_sequence[0] != nbmode || len(a:mode_sequence) > 1)) \ (a:recur != 2 && (a:mode_sequence[0] != nbmode || len(a:mode_sequence) > 1))
\ ) \ )
call extend(copts, { 'm': a:mode_sequence }) call extend(copts, { 'a': a:mode_sequence })
endif endif
return copts return copts
endfunction endfunction

View File

@@ -1,4 +1,4 @@
easy-align.txt vim-easy-align Last change: May 31 2014 easy-align.txt vim-easy-align Last change: July 23 2014
VIM-EASY-ALIGN - TABLE OF CONTENTS *easyalign* *easy-align* *easy-align-toc* VIM-EASY-ALIGN - TABLE OF CONTENTS *easyalign* *easy-align* *easy-align-toc*
============================================================================== ==============================================================================
@@ -158,7 +158,7 @@ shortcuts for the most common use cases with the concept of "alignment rule".
An alignment rule is a predefined set of options for common alignment tasks, An alignment rule is a predefined set of options for common alignment tasks,
which is identified by a single character, DELIMITER KEY, such as <Space> , which is identified by a single character, DELIMITER KEY, such as <Space> ,
`=`, `:`, `.`, `|`, `&`, and `,`. `=`, `:`, `.`, `|`, `&`, `#`, and `,`.
Think of it as a shortcut. Instead of writing regular expression and setting Think of it as a shortcut. Instead of writing regular expression and setting
several options, you can just type in a single character. several options, you can just type in a single character.
@@ -231,7 +231,7 @@ With these mappings, you can align text with only a few keystrokes.
- `-` Around the last occurrences of delimiters (`-1`) - `-` Around the last occurrences of delimiters (`-1`)
- `-2` Around the second to last occurrences of delimiters - `-2` Around the second to last occurrences of delimiters
- ... - ...
4. Delimiter key (a single keystroke; <Space> , `=`, `:`, `.`, `|`, `&`, `,`) 4. Delimiter key (a single keystroke; <Space> , `=`, `:`, `.`, `|`, `&`, `#`, `,`)
Predefined alignment rules~ Predefined alignment rules~
@@ -246,6 +246,7 @@ Predefined alignment rules~
`.` | Multi-line method chaining `.` | Multi-line method chaining
`,` | Multi-line method arguments `,` | Multi-line method arguments
`&` | LaTeX tables (matches `&` and `\\` ) `&` | LaTeX tables (matches `&` and `\\` )
`#` | Ruby/Python comments
<Bar> | Table markdown <Bar> | Table markdown
*g:easy_align_delimiters* *g:easy_align_delimiters*
@@ -260,13 +261,13 @@ Examples~
*easy-align-5-3-2* *easy-align-5-3-2*
With visual map | Description | Equivalent command~ With visual map | Description | Equivalent command~
------------------- | ---------------------------------- | ---------------------- ------------------- | ---------------------------------- | ---------------------
<Enter><Space> | Around 1st whitespaces | :'<,'>EasyAlign\ <Enter><Space> | Around 1st whitespaces | :'<,'>EasyAlign\
<Enter>2<Space> | Around 2nd whitespaces | :'<,'>EasyAlign2\ <Enter>2<Space> | Around 2nd whitespaces | :'<,'>EasyAlign2\
<Enter>-<Space> | Around the last whitespaces | :'<,'>EasyAlign-\ <Enter>-<Space> | Around the last whitespaces | :'<,'>EasyAlign-\
<Enter>-2<Space> | Around the 2nd to last whitespaces | :'<,'>EasyAlign-2\ <Enter>-2<Space> | Around the 2nd to last whitespaces | :'<,'>EasyAlign-2\
<Enter>: | Around 1st colon (`key: value`) | :'<,'>EasyAlign: <Enter>: | Around 1st colon (`key: value`) | :'<,'>EasyAlign:
<Enter><Right>: | Around 1st colon (`key : value`) | :'<,'>EasyAlign:s0l1 <Enter><Right>: | Around 1st colon (`key : value`) | :'<,'>EasyAlign:<l1
<Enter>= | Around 1st operators with = | :'<,'>EasyAlign= <Enter>= | Around 1st operators with = | :'<,'>EasyAlign=
<Enter>3= | Around 3rd operators with = | :'<,'>EasyAlign3= <Enter>3= | Around 3rd operators with = | :'<,'>EasyAlign3=
<Enter>*= | Around all operators with = | :'<,'>EasyAlign*= <Enter>*= | Around all operators with = | :'<,'>EasyAlign*=
@@ -306,7 +307,7 @@ following sections (|easy-align-alignment-options|).
CTRL-D | `delimiter_align` | left, center, right CTRL-D | `delimiter_align` | left, center, right
CTRL-U | `ignore_unmatched` | 0, 1 CTRL-U | `ignore_unmatched` | 0, 1
CTRL-G | `ignore_groups` | [], ['String'], ['Comment'], ['String', 'Comment'] CTRL-G | `ignore_groups` | [], ['String'], ['Comment'], ['String', 'Comment']
CTRL-O | `mode_sequence` | Input string (`/[lrc]+\*{0,2}/` ) CTRL-A | `align` | Input string (`/[lrc]+\*{0,2}/` )
<Left> | `stick_to_left` | `{ 'stick_to_left': 1, 'left_margin': 0 }` <Left> | `stick_to_left` | `{ 'stick_to_left': 1, 'left_margin': 0 }`
<Right> | `stick_to_left` | `{ 'stick_to_left': 0, 'left_margin': 1 }` <Right> | `stick_to_left` | `{ 'stick_to_left': 0, 'left_margin': 1 }`
<Down> | `*_margin` | `{ 'left_margin': 0, 'right_margin': 0 }` <Down> | `*_margin` | `{ 'left_margin': 0, 'right_margin': 0 }`
@@ -375,20 +376,20 @@ You can even omit spaces between the arguments, so concisely (or cryptically):
Nice. But let's make it even shorter. Option values can be written in shorthand Nice. But let's make it even shorter. Option values can be written in shorthand
notation. notation.
- `:EasyAlign*/[:;]\+/s1l0` - `:EasyAlign*/[:;]\+/<l0`
The following table summarizes the shorthand notation. The following table summarizes the shorthand notation.
Option | Expression~ Option | Expression~
------------------ | ---------- ------------------ | --------------
`filter` | `[gv]/.*/` `filter` | `[gv]/.*/`
`left_margin` | `l[0-9]+` `left_margin` | `l[0-9]+`
`right_margin` | `r[0-9]+` `right_margin` | `r[0-9]+`
`stick_to_left` | `s[01]` `stick_to_left` | `<` or `s[01]`
`ignore_unmatched` | `iu[01]` `ignore_unmatched` | `iu[01]`
`ignore_groups` | `ig\[.*\]` `ignore_groups` | `ig\[.*\]`
`align` | `a[lrc*]*`
`delimiter_align` | `d[lrc]` `delimiter_align` | `d[lrc]`
`mode_sequence` | `m[lrc*]*`
`indentation` | `i[ksdn]` `indentation` | `i[ksdn]`
For your information, the same operation can be done in interactive mode as For your information, the same operation can be done in interactive mode as
@@ -448,7 +449,7 @@ ALIGNMENT OPTIONS *easy-align-alignment-options*
`ignore_unmatched` | boolean | 1 | Whether to ignore lines without matching delimiter `ignore_unmatched` | boolean | 1 | Whether to ignore lines without matching delimiter
`indentation` | string | `k` | Indentation method (keep, deep, shallow, none) `indentation` | string | `k` | Indentation method (keep, deep, shallow, none)
`delimiter_align` | string | `r` | Determines how to align delimiters of different lengths `delimiter_align` | string | `r` | Determines how to align delimiters of different lengths
`mode_sequence` | string | | Alignment modes for multiple occurrences of delimiters `align` | string | | Alignment modes for multiple occurrences of delimiters
There are 4 ways to set alignment options (from lowest precedence to highest): There are 4 ways to set alignment options (from lowest precedence to highest):
@@ -470,7 +471,7 @@ There are 4 ways to set alignment options (from lowest precedence to highest):
`ignore_unmatched` | CTRL-U | `iu[01]` | `g:easy_align_ignore_unmatched` `ignore_unmatched` | CTRL-U | `iu[01]` | `g:easy_align_ignore_unmatched`
`indentation` | CTRL-I | `i[ksdn]` | `g:easy_align_indentation` `indentation` | CTRL-I | `i[ksdn]` | `g:easy_align_indentation`
`delimiter_align` | CTRL-D | `d[lrc]` | `g:easy_align_delimiter_align` `delimiter_align` | CTRL-D | `d[lrc]` | `g:easy_align_delimiter_align`
`mode_sequence` | CTRL-O | `m[lrc*]*` | `align` | CTRL-A | `m[lrc*]*` |
< Filtering lines >___________________________________________________________~ < Filtering lines >___________________________________________________________~
@@ -556,7 +557,10 @@ For example if you set `ignore_groups` option to be an empty list, you get
'grape: fruits': 3 'grape: fruits': 3
} }
< <
Satisfied? If a pattern in `ignore_groups` is prepended by a `!`, it will have the
opposite meaning. For instance, if `ignore_groups` is given as `['!Comment']`,
delimiters that are not highlighted as Comment will be ignored during the
alignment.
< Ignoring unmatched lines >__________________________________________________~ < Ignoring unmatched lines >__________________________________________________~
@@ -724,36 +728,36 @@ To recap:
:EasyAlign! **= :EasyAlign! **=
< <
In addition to these, you can fine-tune alignments over multiple occurrences of In addition to these, you can fine-tune alignments over multiple occurrences of
the delimiters with 'mode_sequence' option. (The option can also be set in the delimiters with 'align' option. (The option can also be set in interactive
interactive mode with the special key CTRL-O) mode with the special key CTRL-A)
> >
" Left alignment over the first two occurrences of delimiters " Left alignment over the first two occurrences of delimiters
:EasyAlign = { 'mode_sequence': 'll' } :EasyAlign = { 'align': 'll' }
" Right, left, center alignment over the 1st to 3rd occurrences of delimiters " Right, left, center alignment over the 1st to 3rd occurrences of delimiters
:EasyAlign = { 'm': 'rlc' } :EasyAlign = { 'a': 'rlc' }
" Using shorthand notation " Using shorthand notation
:EasyAlign = mrlc :EasyAlign = arlc
" Right, left, center alignment over the 2nd to 4th occurrences of delimiters " Right, left, center alignment over the 2nd to 4th occurrences of delimiters
:EasyAlign 2=mrlc :EasyAlign 2=arlc
" (*) Repeating alignments (default: l, r, or c) " (*) Repeating alignments (default: l, r, or c)
" Right, left, center, center, center, center, ... " Right, left, center, center, center, center, ...
:EasyAlign *=mrlc :EasyAlign *=arlc
" (**) Alternating alignments (default: lr or rl) " (**) Alternating alignments (default: lr or rl)
" Right, left, center, right, left, center, ... " Right, left, center, right, left, center, ...
:EasyAlign **=mrlc :EasyAlign **=arlc
" Right, left, center, center, center, ... repeating alignment " Right, left, center, center, center, ... repeating alignment
" over the 3rd to the last occurrences of delimiters " over the 3rd to the last occurrences of delimiters
:EasyAlign 3=mrlc* :EasyAlign 3=arlc*
" Right, left, center, right, left, center, ... alternating alignment " Right, left, center, right, left, center, ... alternating alignment
" over the 3rd to the last occurrences of delimiters " over the 3rd to the last occurrences of delimiters
:EasyAlign 3=mrlc** :EasyAlign 3=arlc**
< <
< Extending alignment rules >_________________________________________________~ < Extending alignment rules >_________________________________________________~
@@ -774,8 +778,10 @@ Examples~
> >
let g:easy_align_delimiters = { let g:easy_align_delimiters = {
\ '>': { 'pattern': '>>\|=>\|>' }, \ '>': { 'pattern': '>>\|=>\|>' },
\ '/': { 'pattern': '//\+\|/\*\|\*/', 'ignore_groups': ['String'] }, \ '/': {
\ '#': { 'pattern': '#\+', 'ignore_groups': ['String'], 'delimiter_align': 'l' }, \ 'pattern': '//\+\|/\*\|\*/',
\ 'delimiter_align': 'l',
\ 'ignore_groups': ['!Comment'] },
\ ']': { \ ']': {
\ 'pattern': '[[\]]', \ 'pattern': '[[\]]',
\ 'left_margin': 0, \ 'left_margin': 0,

View File

@@ -40,14 +40,21 @@ Expect:
apple;:;;banana :: cake apple;:;;banana :: cake
data ;; exchange:;::format data ;; exchange:;::format
Execute (shorthand notation of mode_sequence and margin): Execute (DEPRECATED: shorthand notation of mode_sequence and margin):
%EasyAlign/[:;]\+/mrc*l2r2 %EasyAlign/[:;]\+/mrc*l2r2
Expect: Expect:
apple ;:;; banana :: cake apple ;:;; banana :: cake
data ;; exchange :;:: format data ;; exchange :;:: format
Execute (deep indentation): Execute (shorthand notation of align and margin):
%EasyAlign/[:;]\+/arc*l2r2
Expect:
apple ;:;; banana :: cake
data ;; exchange :;:: format
Execute (DEPRECATED: deep indentation):
%EasyAlign/[:;]\+/mrc*l2r2 %EasyAlign/[:;]\+/mrc*l2r2
%EasyAlign*/[:;]\+/idmrl* %EasyAlign*/[:;]\+/idmrl*
@@ -55,6 +62,14 @@ Expect:
apple ;:;; banana :: cake apple ;:;; banana :: cake
data ;; exchange :;:: format data ;; exchange :;:: format
Execute (deep indentation):
%EasyAlign/[:;]\+/arc*l2r2
%EasyAlign*/[:;]\+/idarl*
Expect:
apple ;:;; banana :: cake
data ;; exchange :;:: format
Execute (stick_to_left): Execute (stick_to_left):
%EasyAlign*/[:;]\+/stl1l0dlrm3 %EasyAlign*/[:;]\+/stl1l0dlrm3
@@ -62,6 +77,13 @@ Expect:
apple;:;; banana:: cake apple;:;; banana:: cake
data;; exchange:;:: format data;; exchange:;:: format
Execute (<):
%EasyAlign*/[:;]\+/<l0dlrm3
Expect:
apple;:;; banana:: cake
data;; exchange:;:: format
Execute (different regular expression): Execute (different regular expression):
%EasyAlign*/../{'lm':'<','rm':'>'} %EasyAlign*/../{'lm':'<','rm':'>'}

View File

@@ -758,7 +758,7 @@ Expect ruby:
dddddd /= 123 dddddd /= 123
gg <=> ee gg <=> ee
Do (Alignment using mode_sequence, delimiter_align): Do (DEPRECATED: Alignment using mode_sequence, delimiter_align):
vip\<Enter>\<C-O>\<Backspace>cr*\<Enter>\<C-D>= vip\<Enter>\<C-O>\<Backspace>cr*\<Enter>\<C-D>=
Expect ruby: Expect ruby:
@@ -787,7 +787,37 @@ Expect ruby:
dddddd /= 123 dddddd /= 123
gg <=> ee gg <=> ee
Do (mode_sequence starting from 2nd, delimiter_align = center): Do (Alignment using align, delimiter_align):
vip\<Enter>\<C-A>\<Backspace>cr*\<Enter>\<C-D>=
Expect ruby:
a =
a = 1
bbbb .= 2
ccccccc = 3
ccccccccccccccc
ddd = #
eeee === eee = eee = eee = f
fff = ggg += gg &&= gg
g != hhhhhhhh == # 8
i := 5
i %= 5
i *= 5
j =~ 5
j >= 5
aa => 123
aa <<= 123
aa >>= 123
bbb => 123
c => 1233123
d => 123
dddddd &&= 123
dddddd ||= 123
dddddd /= 123
gg <=> ee
Do (DEPRECATED: mode_sequence starting from 2nd, delimiter_align = center):
vip\<Enter>\<C-O>\<Backspace>rc**\<Enter>\<C-D>\<C-D>2= vip\<Enter>\<C-O>\<Backspace>rc**\<Enter>\<C-D>\<C-D>2=
Expect ruby: Expect ruby:
@@ -816,6 +846,35 @@ Expect ruby:
dddddd /= 123 dddddd /= 123
gg <=> ee gg <=> ee
Do (align starting from 2nd, delimiter_align = center):
vip\<Enter>\<C-A>\<Backspace>rc**\<Enter>\<C-D>\<C-D>2=
Expect ruby:
a =
a = 1
bbbb .= 2
ccccccc = 3
ccccccccccccccc
ddd = #
eeee === eee = eee = eee = f
fff = ggg += gg &&= gg
g != hhhhhhhh == # 8
i := 5
i %= 5
i *= 5
j =~ 5
j >= 5
aa => 123
aa <<= 123
aa >>= 123
bbb => 123
c => 1233123
d => 123
dddddd &&= 123
dddddd ||= 123
dddddd /= 123
gg <=> ee
Do (around all =s, do not ignore unmatched): Do (around all =s, do not ignore unmatched):
vip\<Enter>\<C-U> vip\<Enter>\<C-U>
\<C-L>0\<Enter> \<C-L>0\<Enter>