如何在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
答案 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