【问题标题】:Dynamic vim Tabular patterns?动态vim表格模式?
【发布时间】:2013-12-07 00:23:50
【问题描述】:

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

AddTabularPattern 1=    /^[^=]*\zs=

您可以这样做:

:Tabularize 1=

上面的正则表达式被硬编码以匹配第一个等于字符。有没有办法定义一个任意字符,以便我可以创建一个匹配任何字符的模式?

例如,我希望能够执行以下操作以匹配第一个“|”或第一个“}”,而不必为每个创建单独的预定义模式。

:Tabularize 1| 
:Tabularize 1} 

【问题讨论】:

    标签: vim formatting format tabular


    【解决方案1】:

    我不相信这可以直接通过 Tabular 实现。但是,您可以定义一个接受所需字符串作为参数的包装器命令:

    command! -nargs=1 First exec 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
    

    然后您可以使用任何字符执行First,例如:First =:First |,甚至更长的字符串,例如:First ||:First &amp;&amp;

    如果这更适合您的用例,您还可以定义使用当前选择(在正常模式下,光标下的字符)作为参数的映射:

    vnoremap <F3> y \| :exec 'Tabularize /^[^' . escape(getreg('"'), '\^$.[?*~') . ']*\zs' . escape(getreg('"'), '\^$.[?*~')<CR>
    nnoremap <F3> yl \| :exec 'Tabularize /^[^' . escape(getreg('"'), '\^$.[?*~') . ']*\zs' . escape(getreg('"'), '\^$.[?*~')<CR>
    

    编辑:为了允许范围,将-range 属性添加到命令定义并将&lt;line1&gt;(开始)和&lt;line2&gt;(结束)传递给Tabularize

    command! -nargs=1 -range First exec <line1> . ',' . <line2> . 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
    

    【讨论】:

    • 我尝试了第一个解决方案,虽然它非常聪明,但不幸的是,当您选择范围时,它似乎不起作用,这是我使用表格的主要方式。
    【解决方案2】:

    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",您可以将其视为常见对齐任务的 1 个字符的快捷方式。

    当然,你也可以使用正则表达式,用斜线包围模式

    " around 1st <>
    :EasyAlign/<>/
    " around all <>
    :EasyAlign*/<>/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 2020-01-31
      • 2012-10-19
      • 2017-03-14
      相关资源
      最近更新 更多