mirror of
https://github.com/junegunn/vim-easy-align.git
synced 2025-11-10 19:03:50 -05:00
Implement g:easy_align_bypass_fold switch (#14) with a small fix
This commit is contained in:
36
README.md
36
README.md
@@ -640,6 +640,42 @@ let g:easy_align_delimiters = {
|
|||||||
\ }
|
\ }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Other options
|
||||||
|
-------------
|
||||||
|
|
||||||
|
### Disabling &foldmethod during alignment
|
||||||
|
|
||||||
|
[It is reported](https://github.com/junegunn/vim-easy-align/issues/14) that
|
||||||
|
&foldmethod of `expr` or `syntax` can significantly slow down the alignment when
|
||||||
|
editing a large, complex file with many folds. To alleviate this issue,
|
||||||
|
EasyAlign provides an option to temporarily set &foldmethod to manual during the
|
||||||
|
alignment task. In order to enable this feature, set `g:easy_align_bypass_fold`
|
||||||
|
switch to 1.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:easy_align_bypass_fold = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Left/right/center mode switch in interactive mode
|
||||||
|
|
||||||
|
In interactive mode, you can choose the alignment mode you want by pressing
|
||||||
|
enter keys. The non-bang command, `:EasyAlign` starts in left-alignment mode
|
||||||
|
and changes to right and center mode as you press enter keys, while the bang
|
||||||
|
version first starts in right-alignment mode.
|
||||||
|
|
||||||
|
- `:EasyAlign`
|
||||||
|
- Left, Right, Center
|
||||||
|
- `:EasyAlign!`
|
||||||
|
- Right, Left, Center
|
||||||
|
|
||||||
|
If you do not prefer this default mode transition, you can define your own
|
||||||
|
settings as follows.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:easy_align_interactive_modes = ['l', 'r']
|
||||||
|
let g:easy_align_bang_interactive_modes = ['c', 'r']
|
||||||
|
```
|
||||||
|
|
||||||
Advanced examples and use cases
|
Advanced examples and use cases
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -254,6 +254,7 @@ function! s:split_line(line, nth, modes, cycle, fc, lc, pattern, stick_to_left,
|
|||||||
" Phase 1: split
|
" Phase 1: split
|
||||||
let ignorable = 0
|
let ignorable = 0
|
||||||
let token = ''
|
let token = ''
|
||||||
|
let phantom = 0
|
||||||
while 1
|
while 1
|
||||||
let matches = matchlist(string, pattern, idx)
|
let matches = matchlist(string, pattern, idx)
|
||||||
" No match
|
" No match
|
||||||
@@ -284,8 +285,7 @@ function! s:split_line(line, nth, modes, cycle, fc, lc, pattern, stick_to_left,
|
|||||||
" If the string is non-empty and ends with the delimiter,
|
" If the string is non-empty and ends with the delimiter,
|
||||||
" append an empty token to the list
|
" append an empty token to the list
|
||||||
if idx == len(string)
|
if idx == len(string)
|
||||||
call add(tokens, '')
|
let phantom = 1
|
||||||
call add(delims, '')
|
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
@@ -295,6 +295,9 @@ function! s:split_line(line, nth, modes, cycle, fc, lc, pattern, stick_to_left,
|
|||||||
let ignorable = s:highlighted_as(a:line, len(string) + a:fc - 1, a:ignore_groups)
|
let ignorable = s:highlighted_as(a:line, len(string) + a:fc - 1, a:ignore_groups)
|
||||||
call add(tokens, leftover)
|
call add(tokens, leftover)
|
||||||
call add(delims, '')
|
call add(delims, '')
|
||||||
|
elseif phantom
|
||||||
|
call add(tokens, '')
|
||||||
|
call add(delims, '')
|
||||||
endif
|
endif
|
||||||
let [pmode, mode] = [mode, s:shift(a:modes, a:cycle)]
|
let [pmode, mode] = [mode, s:shift(a:modes, a:cycle)]
|
||||||
|
|
||||||
@@ -926,9 +929,17 @@ function! s:align(bang, first_line, last_line, expr)
|
|||||||
while len(args) > 1
|
while len(args) > 1
|
||||||
let args = call('s:do_align', args)
|
let args = call('s:do_align', args)
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
|
let bypass_fold = get(g:, 'easy_align_bypass_fold', 0)
|
||||||
|
let ofm = &l:foldmethod
|
||||||
|
try
|
||||||
|
if bypass_fold | let &l:foldmethod = 'manual' | endif
|
||||||
for [line, content] in items(todo)
|
for [line, content] in items(todo)
|
||||||
call setline(line, s:rtrim(content))
|
call setline(line, s:rtrim(content))
|
||||||
endfor
|
endfor
|
||||||
|
finally
|
||||||
|
if bypass_fold | let &l:foldmethod = ofm | endif
|
||||||
|
endtry
|
||||||
|
|
||||||
let copts = s:compact_options(opts)
|
let copts = s:compact_options(opts)
|
||||||
let nbmode = s:modes(0)[0]
|
let nbmode = s:modes(0)[0]
|
||||||
|
|||||||
@@ -524,3 +524,14 @@ you can extend the rules by setting a dictionary named
|
|||||||
\ }
|
\ }
|
||||||
|
|
||||||
|
|
||||||
|
Disabling &foldmethod during alignment *g:easy_align_bypass_fold*
|
||||||
|
-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
It is reported that &foldmethod of expr or syntax can significantly slow
|
||||||
|
down the alignment when editing a large, complex file with many folds. To
|
||||||
|
alleviate this issue, EasyAlign provides an option to temporarily set
|
||||||
|
&foldmethod to manual during the alignment task. In order to enable this
|
||||||
|
feature, set g:easy_align_bypass_fold to 1.
|
||||||
|
|
||||||
|
let g:easy_align_bypass_fold = 1
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
Execute (Clean up test environment):
|
Execute (Clean up test environment):
|
||||||
|
Save g:easy_align_ignore_groups, g:easy_align_ignore_unmatched
|
||||||
|
Save g:easy_align_indentation, g:easy_align_delimiter_align
|
||||||
|
Save g:easy_align_interactive_modes, g:easy_align_bang_interactive_modes
|
||||||
|
Save g:easy_align_delimiters
|
||||||
|
|
||||||
let g:easy_align_delimiters = {}
|
let g:easy_align_delimiters = {}
|
||||||
silent! unlet g:easy_align_ignore_groups
|
silent! unlet g:easy_align_ignore_groups
|
||||||
silent! unlet g:easy_align_ignore_unmatched
|
silent! unlet g:easy_align_ignore_unmatched
|
||||||
@@ -155,3 +160,5 @@ Expect javascript:
|
|||||||
"user: pass": "r00t: pa55"
|
"user: pass": "r00t: pa55"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
Restore
|
||||||
|
|||||||
@@ -10,3 +10,11 @@ Do (FIXME invalid judgement - block-wise visual mode):
|
|||||||
Expect:
|
Expect:
|
||||||
a | b | c
|
a | b | c
|
||||||
|
|
||||||
|
Do (TODO Workaround: reset visualmode() on error):
|
||||||
|
\<C-V>\<Esc>
|
||||||
|
:%EasyAlign|\<CR>
|
||||||
|
:%EasyAlign|\<CR>
|
||||||
|
|
||||||
|
Expect:
|
||||||
|
a | b | c
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
Execute (Clean up test environment):
|
Execute (Clean up test environment):
|
||||||
|
Save g:easy_align_ignore_groups, g:easy_align_ignore_unmatched
|
||||||
|
Save g:easy_align_indentation, g:easy_align_delimiter_align
|
||||||
|
Save g:easy_align_interactive_modes, g:easy_align_bang_interactive_modes
|
||||||
|
Save g:easy_align_delimiters
|
||||||
|
|
||||||
" TODO: revert after test
|
" TODO: revert after test
|
||||||
silent! unlet g:easy_align_ignore_groups
|
silent! unlet g:easy_align_ignore_groups
|
||||||
silent! unlet g:easy_align_ignore_unmatched
|
silent! unlet g:easy_align_ignore_unmatched
|
||||||
@@ -1283,3 +1288,5 @@ Expect:
|
|||||||
a = b = c
|
a = b = c
|
||||||
aabba = bbbbb
|
aabba = bbbbb
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
Restore
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# http://en.wikibooks.org/wiki/LaTeX/Tables
|
# http://en.wikibooks.org/wiki/LaTeX/Tables
|
||||||
Execute:
|
Execute:
|
||||||
|
Save g:easy_align_delimiters, g:easy_align_bypass_fold
|
||||||
let g:easy_align_delimiters = {}
|
let g:easy_align_delimiters = {}
|
||||||
|
silent! unlet g:easy_align_bypass_fold
|
||||||
|
|
||||||
Given tex (table with escaped &):
|
Given tex (table with escaped &):
|
||||||
\begin{tabular}{ l c r }
|
\begin{tabular}{ l c r }
|
||||||
@@ -9,8 +11,9 @@ Given tex (table with escaped &):
|
|||||||
777&8\&8&999\\
|
777&8\&8&999\\
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
|
# FIXME vip doesn't work if folded
|
||||||
Do (Align around all &s and \\s):
|
Do (Align around all &s and \\s):
|
||||||
vip\<Enter>*&
|
VG\<Enter>*&
|
||||||
|
|
||||||
Expect tex:
|
Expect tex:
|
||||||
\begin{tabular}{ l c r }
|
\begin{tabular}{ l c r }
|
||||||
@@ -20,7 +23,7 @@ Expect tex:
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
Do (right-align with explicit ignore_unmatched):
|
Do (right-align with explicit ignore_unmatched):
|
||||||
vip\<Enter>\<Enter>\<C-U>\<C-U>*&
|
VG\<Enter>\<Enter>\<C-U>\<C-U>*&
|
||||||
|
|
||||||
Expect tex:
|
Expect tex:
|
||||||
\begin{tabular}{ l c r }
|
\begin{tabular}{ l c r }
|
||||||
@@ -30,7 +33,7 @@ Expect tex:
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
Do (center-align with explicit ignore_unmatched):
|
Do (center-align with explicit ignore_unmatched):
|
||||||
vip\<Enter>\<Enter>\<Enter>\<C-U>\<C-U>*&
|
VG\<Enter>\<Enter>\<Enter>\<C-U>\<C-U>*&
|
||||||
|
|
||||||
Expect tex:
|
Expect tex:
|
||||||
\begin{tabular}{ l c r }
|
\begin{tabular}{ l c r }
|
||||||
@@ -47,7 +50,7 @@ Given tex (simple table with \hline):
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
Do:
|
Do:
|
||||||
vip\<Enter>*&
|
VG\<Enter>*&
|
||||||
|
|
||||||
Expect tex:
|
Expect tex:
|
||||||
\begin{tabular}{ l c r }
|
\begin{tabular}{ l c r }
|
||||||
@@ -68,7 +71,7 @@ Given tex (table with lines w/o &s):
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
Do (left-align*):
|
Do (left-align*):
|
||||||
vip\<Enter>*&
|
VG\<Enter>*&
|
||||||
|
|
||||||
Expect tex:
|
Expect tex:
|
||||||
\begin{tabular}{|r|l|}
|
\begin{tabular}{|r|l|}
|
||||||
@@ -82,7 +85,7 @@ Expect tex:
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
Do(left-align* and right-align around 2nd):
|
Do(left-align* and right-align around 2nd):
|
||||||
vip\<Enter>*&
|
VG\<Enter>*&
|
||||||
gv\<Enter>\<Enter>2&
|
gv\<Enter>\<Enter>2&
|
||||||
|
|
||||||
Expect tex:
|
Expect tex:
|
||||||
@@ -96,3 +99,63 @@ Expect tex:
|
|||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
|
Given tex:
|
||||||
|
\begin{tabular}{}
|
||||||
|
32&1.14\e1&&5.65\e2&&&&1.16\e1&&1.28\e1&\\
|
||||||
|
64&1.03\e1&0.1&4.98\e2&0.2&&&9.21\e2&0.3&1.02\e1&0.3\\
|
||||||
|
128&9.86\e2&0.1&4.69\e2&0.1&&&8.46\e2&0.1&9.45\e2&0.1\\
|
||||||
|
256&9.65\e2&0.0&4.59\e2&0.0&&&8.15\e2&0.1&9.11\e2&0.1\\
|
||||||
|
% 512&9.55\e2&0.0&4.56\e2&0.0&&&8.01\e2&0.0&8.96\e2&0.0\\
|
||||||
|
1024&9.49\e2&0.0&4.53\e2&0.0&&&7.94\e2&0.0&8.89\e2&0.0\\
|
||||||
|
2048&9.47\e2&0.0&4.52\e2&0.0&&&7.91\e2&0.0&8.85\e2&0.0\\
|
||||||
|
4096&9.46\e2&0.0&4.51\e2&0.0%&&&7.90\e2&0.0&8.83\e2&0.0\\
|
||||||
|
8192&9.45\e2&0.0&4.51\e2&0.0&&&&&&\\
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
Execute (Alignment around &s, foldmethod should not change):
|
||||||
|
setlocal foldmethod=syntax
|
||||||
|
%EasyAlign*&
|
||||||
|
AssertEqual 'syntax', &l:foldmethod
|
||||||
|
|
||||||
|
setlocal foldmethod=manual
|
||||||
|
%EasyAlign*&
|
||||||
|
AssertEqual 'manual', &l:foldmethod
|
||||||
|
|
||||||
|
Expect tex:
|
||||||
|
\begin{tabular}{}
|
||||||
|
32 & 1.14\e1 & & 5.65\e2 & & & & 1.16\e1 & & 1.28\e1 & \\
|
||||||
|
64 & 1.03\e1 & 0.1 & 4.98\e2 & 0.2 & & & 9.21\e2 & 0.3 & 1.02\e1 & 0.3 \\
|
||||||
|
128 & 9.86\e2 & 0.1 & 4.69\e2 & 0.1 & & & 8.46\e2 & 0.1 & 9.45\e2 & 0.1 \\
|
||||||
|
256 & 9.65\e2 & 0.0 & 4.59\e2 & 0.0 & & & 8.15\e2 & 0.1 & 9.11\e2 & 0.1 \\
|
||||||
|
% 512&9.55\e2&0.0&4.56\e2&0.0&&&8.01\e2&0.0&8.96\e2&0.0\\
|
||||||
|
1024 & 9.49\e2 & 0.0 & 4.53\e2 & 0.0 & & & 7.94\e2 & 0.0 & 8.89\e2 & 0.0 \\
|
||||||
|
2048 & 9.47\e2 & 0.0 & 4.52\e2 & 0.0 & & & 7.91\e2 & 0.0 & 8.85\e2 & 0.0 \\
|
||||||
|
4096 & 9.46\e2 & 0.0 & 4.51\e2 & 0.0%&&&7.90\e2&0.0&8.83\e2&0.0\\
|
||||||
|
8192 & 9.45\e2 & 0.0 & 4.51\e2 & 0.0 & & & & & & \\
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
Execute (g:easy_align_bypass_fold set, foldmethod should not change):
|
||||||
|
let g:easy_align_bypass_fold = 1
|
||||||
|
setlocal foldmethod=syntax
|
||||||
|
%EasyAlign*&
|
||||||
|
AssertEqual 'syntax', &l:foldmethod
|
||||||
|
|
||||||
|
setlocal foldmethod=manual
|
||||||
|
%EasyAlign*&
|
||||||
|
AssertEqual 'manual', &l:foldmethod
|
||||||
|
|
||||||
|
Expect tex:
|
||||||
|
\begin{tabular}{}
|
||||||
|
32 & 1.14\e1 & & 5.65\e2 & & & & 1.16\e1 & & 1.28\e1 & \\
|
||||||
|
64 & 1.03\e1 & 0.1 & 4.98\e2 & 0.2 & & & 9.21\e2 & 0.3 & 1.02\e1 & 0.3 \\
|
||||||
|
128 & 9.86\e2 & 0.1 & 4.69\e2 & 0.1 & & & 8.46\e2 & 0.1 & 9.45\e2 & 0.1 \\
|
||||||
|
256 & 9.65\e2 & 0.0 & 4.59\e2 & 0.0 & & & 8.15\e2 & 0.1 & 9.11\e2 & 0.1 \\
|
||||||
|
% 512&9.55\e2&0.0&4.56\e2&0.0&&&8.01\e2&0.0&8.96\e2&0.0\\
|
||||||
|
1024 & 9.49\e2 & 0.0 & 4.53\e2 & 0.0 & & & 7.94\e2 & 0.0 & 8.89\e2 & 0.0 \\
|
||||||
|
2048 & 9.47\e2 & 0.0 & 4.52\e2 & 0.0 & & & 7.91\e2 & 0.0 & 8.85\e2 & 0.0 \\
|
||||||
|
4096 & 9.46\e2 & 0.0 & 4.51\e2 & 0.0%&&&7.90\e2&0.0&8.83\e2&0.0\\
|
||||||
|
8192 & 9.45\e2 & 0.0 & 4.51\e2 & 0.0 & & & & & & \\
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
Restore
|
||||||
|
|||||||
Reference in New Issue
Block a user