动态vim表格模式?
我见过许多为特定的预定模式创建vim表格模式的方法。例如,在中,我看到了以下映射:动态vim表格模式?,vim,formatting,format,tabular,Vim,Formatting,Format,Tabular,我见过许多为特定的预定模式创建vim表格模式的方法。例如,在中,我看到了以下映射: AddTabularPattern 1= /^[^=]*\zs= 它允许您执行以下操作: :Tabularize 1= 上面的正则表达式是硬编码的,以匹配第一个equals字符。有没有办法定义一个任意字符,这样我就可以创建一个匹配任意字符的模式 例如,我希望能够执行以下操作来匹配第一个“|”或第一个“}”,而不必为每个“}”创建单独的预定义模式 :Tabularize 1| :Tabularize 1
AddTabularPattern 1= /^[^=]*\zs=
它允许您执行以下操作:
:Tabularize 1=
上面的正则表达式是硬编码的,以匹配第一个equals字符。有没有办法定义一个任意字符,这样我就可以创建一个匹配任意字符的模式
例如,我希望能够执行以下操作来匹配第一个“|”或第一个“}”,而不必为每个“}”创建单独的预定义模式
:Tabularize 1|
:Tabularize 1}
我不相信直接通过表格就可以做到这一点。但是,您可以定义一个包装器命令,该命令接受所需字符串作为参数:
command! -nargs=1 First exec 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
vnoremap <F3> y \| :exec 'Tabularize /^[^' . escape(getreg('"'), '\^$.[?*~') . ']*\zs' . escape(getreg('"'), '\^$.[?*~')<CR>
nnoremap <F3> yl \| :exec 'Tabularize /^[^' . escape(getreg('"'), '\^$.[?*~') . ']*\zs' . escape(getreg('"'), '\^$.[?*~')<CR>
编辑:为了允许范围,将-range
属性添加到命令定义中,并将
(开始)和
(结束)传递到制表中:
command! -nargs=1 -range First exec <line1> . ',' . <line2> . 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
命令-nargs=1-范围第一执行','..'将转义(,'\^$.[?*~').]*\zs.转义(,'\^$.[?*~')制表
插件允许您在行中选择特定的分隔符
" 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*\
请注意,=
、:
或|
不是正则表达式,但可以将其视为常见对齐任务的1字符快捷方式
当然,您也可以使用正则表达式,方法是用斜线围绕模式
" around 1st <>
:EasyAlign/<>/
" around all <>
:EasyAlign*/<>/
大约1号
:EasyAlign//
“到处都是
:EasyAlign*//
我尝试了第一种解决方案,虽然它非常聪明,但不幸的是,当您有范围选择时,它似乎不起作用,这是我使用表格的主要方式。