如何在vim中第二次出现字母/符号对文本进行排序?

时间:2014-01-24 09:53:41

标签: sorting vim

如何在vim中按第三次出现的符号对文本进行排序? 我想按照第三个左括号' ['

[url=URL]url B[/url] [text2]description
[url=URL]url A[/url] [text1]description
                     ^

,上面的文字排序将是:

[url=URL]url A[/url] [text1]description
[url=URL]url B[/url] [text2]description

2 个答案:

答案 0 :(得分:3)

查看:help :sort

:[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]
[...]
When /{pattern}/ is specified and there is no [r] flag
the text matched with {pattern} is skipped, so that
you sort on what comes after the match.

因此,您需要定义跳过前两个{pattern}的文本[以及跳过第三个[的文本。有许多方法可以定义这样的正则表达式,一种是:

:%sort /\[.\{-}\[.\{-}\ze\[/

这匹配第一个[(转义,因为[...]是一个字符集),然后是尽可能少的字符(.\{-}),再次相同,然后停止匹配之前(\ze)第三个[(实际上,不需要\ze,因为所有相同的[将排序相同;差异只会在之后开始。)

提示

您可以使用/...命令(和:set hlsearch)开发/检查正则表达式;它会突出显示与之匹配的所有内容。

答案 1 :(得分:2)

你对[进行排序没有意义,我想你想要从第3 [个到最后排序。然后:

% sort /\v^(\[[^[]*){2}/

这将排序

[url=URL]url B[/url] [text2]description
[url=URL]url B[/url] [text3]description
[url=URL]url B[/url] [text4]description
[url=URL]url B[/url] [text7]description
[url=URL]url B[/url] [text5]description
[url=URL]url A[/url] [text1]description

[url=URL]url A[/url] [text1]description
[url=URL]url B[/url] [text2]description
[url=URL]url B[/url] [text3]description
[url=URL]url B[/url] [text4]description
[url=URL]url B[/url] [text5]description
[url=URL]url B[/url] [text7]description