我已经看到了许多为特定预定模式创建vim Tabular模式的方法。例如,在this answer中,我看到了一个映射:
AddTabularPattern 1= /^[^=]*\zs=
允许您这样做:
:Tabularize 1=
上面的正则表达式是硬编码的,以匹配第一个等号字符。有没有办法定义任意字符,以便我可以创建一个匹配任何字符的模式?
例如,我希望能够在第一个“|”上进行以下匹配或者第一个“}”,而不必为每个创建单独的预定义模式。
:Tabularize 1|
:Tabularize 1}
答案 0 :(得分:2)
我不相信这可以通过Tabular直接进行。但是,您可以定义一个包装器命令,该命令接受所需的字符串作为参数:
command! -nargs=1 First exec 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
然后,您可以使用任何字符执行First
,例如:First =
和:First |
,甚至更长的字符串,例如:First ||
和:First &&
。
如果这更适合您的用例,您还可以定义使用当前选择的映射(在正常模式下,光标下的字符)作为参数:
vnoremap <F3> y \| :exec 'Tabularize /^[^' . escape(getreg('"'), '\^$.[?*~') . ']*\zs' . escape(getreg('"'), '\^$.[?*~')<CR>
nnoremap <F3> yl \| :exec 'Tabularize /^[^' . escape(getreg('"'), '\^$.[?*~') . ']*\zs' . escape(getreg('"'), '\^$.[?*~')<CR>
编辑:为了允许范围,请将-range
属性添加到命令定义并传递<line1>
(开头)和<line2>
(结束)到Tabularize
:
command! -nargs=1 -range First exec <line1> . ',' . <line2> . 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
答案 1 :(得分:1)
easy-align插件允许您在行中选择特定的分隔符。
" around 1st =
:EasyAlign=
" around 2nd =
:EasyAlign2=
" around all =
:EasyAlign*=
" around the last =
:EasyAlign-=
同样地,
" around 1st :
:EasyAlign:
" around 2nd :
:EasyAlign2:
" around the second to last |
:EasyAlign-2|
" around all whitespaces
:EasyAlign*\
请注意,=
,:
或|
不是正则表达式,而是"delimiter keys",您可以将其视为常见对齐任务的单字符快捷方式。< / p>
当然,你也可以使用正斜面包围
的模式" around 1st <>
:EasyAlign/<>/
" around all <>
:EasyAlign*/<>/