【问题标题】:tabular.vim match first occurrence of delimeter but don't align ittabular.vim 匹配第一次出现的分隔符但不对齐
【发布时间】:2015-01-28 15:15:51
【问题描述】:

我想使用 Tabular.vim 来对齐 Ruby 速记哈希。这需要匹配第一个冒号但不对齐它。

#from
foo: bar
bazz: grault
a: b
#to
foo:  bar
bazz: grault
a:    b

\zs 原子用作/:\zs 可以得到所需的结果。我的理解是\zs 在那个位置开始比赛。

如果我使用/^[^:]*\zs 匹配第一个:,我将失去\zs 在第一个示例中的效果。我想了解原因并获得我想要的对齐方式。

#from
foo: bar[:bar]
bazz: grault[:grault]
a: a[:a]
#to
foo:  bar[:bar]
bazz: grault[:grault]
a:    a[:a]

这个similar question 让我成功了,但匹配第一个冒号似乎失去了/zs 原子的效果。

【问题讨论】:

    标签: vim vim-tabular


    【解决方案1】:

    回答我自己的问题,但如果其他人可以更雄辩或描述性地回答,请回答。

    我实际上并没有匹配冒号,而是将冒号之前的所有内容都与[^:] 匹配。 \zs 原子正在做它应该做的事情。

    :Tab /^[^:]*:
    

    【讨论】:

    • [^:] 匹配任何非冒号。因此,您从非冒号的行首开始匹配所有内容。
    • 如果不是很明显,我的正则表达式技能很差。我只有在使用正则表达式测试器后才意识到这一点。您对改进我在答案中使用的正则表达式有什么建议吗?
    • 不需要\zs,也不需要转义冒号。所以^[^:]*: 应该足够了。
    • :Tab /^[^:]*: 前导斜线告诉 Tabular 它是一个正则表达式,但并不是正则表达式的一部分。 (它似乎对我有用......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多