Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态vim表格模式?_Vim_Formatting_Format_Tabular - Fatal编程技术网

动态vim表格模式?

动态vim表格模式?,vim,formatting,format,tabular,Vim,Formatting,Format,Tabular,我见过许多为特定的预定模式创建vim表格模式的方法。例如,在中,我看到了以下映射: AddTabularPattern 1= /^[^=]*\zs= 它允许您执行以下操作: :Tabularize 1= 上面的正则表达式是硬编码的,以匹配第一个equals字符。有没有办法定义一个任意字符,这样我就可以创建一个匹配任意字符的模式 例如,我希望能够执行以下操作来匹配第一个“|”或第一个“}”,而不必为每个“}”创建单独的预定义模式 :Tabularize 1| :Tabularize 1

我见过许多为特定的预定模式创建vim表格模式的方法。例如,在中,我看到了以下映射:

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*//
我尝试了第一种解决方案,虽然它非常聪明,但不幸的是,当您有范围选择时,它似乎不起作用,这是我使用表格的主要方式。