Sorting 如何根据vim中字母/符号的第二次出现对文本进行排序?
在vim中,如何按符号的第三次出现对文本进行排序? 我想按左括号中的第三个“[”对如下文本进行排序Sorting 如何根据vim中字母/符号的第二次出现对文本进行排序?,sorting,vim,Sorting,Vim,在vim中,如何按符号的第三次出现对文本进行排序? 我想按左括号中的第三个“[”对如下文本进行排序 [url=URL]url B[/url] [text2]description [url=URL]url A[/url] [text1]description ^ i、 e上述文本将被排序为: [url=URL]url A[/url] [text1]description [url=URL]url B[/url] [text2]description
[url=URL]url B[/url] [text2]description
[url=URL]url A[/url] [text1]description
^
i、 e上述文本将被排序为:
[url=URL]url A[/url] [text1]description
[url=URL]url B[/url] [text2]description
查看
:帮助:排序:
因此,您需要定义一个{pattern}
,它跳过前两个[
和第三个[
的文本。定义这样一个正则表达式的方法有很多,其中之一是:
:%sort /\[.\{-}\[.\{-}\ze\[/
这将匹配第一个[
(转义,因为[…]
是一个字符集合),然后尽可能少的字符(\{-}
),再次相同,然后在(\ze
)之前停止匹配第三个[
(实际上,\ze
不需要所有相同的[
将对相同的内容进行排序;差异只会在之后开始)
提示
您可以使用/…
命令(和:set-hlsearch
)开发/检查正则表达式;它将突出显示与之匹配的所有内容。查看:help:sort
:
因此,您需要定义一个{pattern}
,它跳过前两个[
和第三个[
的文本。定义这样一个正则表达式的方法有很多,其中之一是:
:%sort /\[.\{-}\[.\{-}\ze\[/
这将匹配第一个[
(转义,因为[…]
是一个字符集合),然后尽可能少的字符(\{-}
),再次相同,然后在(\ze
)之前停止匹配第三个[
(实际上,\ze
不需要所有相同的[
将对相同的内容进行排序;差异只会在之后开始)
提示
您可以使用/…
命令(和:set-hlsearch
)开发/检查正则表达式;它将突出显示与它匹配的所有内容。您在[
上排序没有意义,我想您应该从第三个[
排序到最后。然后:
% 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
进入
你在[
上排序没有意义,我想你应该从第三个[
开始排序到最后。然后:
% 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
进入
\ze
是不必要的。因为无论\ze
之前的内容是否在匹配结果中,结果都会被排序忽略。啊哈……你在解释中提到了……我的错,没有仔细阅读解释。@Kent:是的,我在回答中提到了这一点。但我认为正确的原因是第三个[
是一个静态字符,因此无论是否排除它,它都不会影响排序。不过,在一般情况下这很重要,所以我将其保留在了。在“一般”情况下,如果[
这是一个动态字符,\ze
只有在使用r
选项时才有意义,对吗?@Kent也没有,为了避免跳过后面的内容,或者换个说法,对\ze
后面的部分进行排序。谢谢你们的帮助和详细的帖子。没有必要使用\ze
因为无论\ze
之前的内容是否在匹配结果中,结果都会被排序忽略。啊哈……你在解释中提到了……我的错,没有仔细阅读解释。@Kent:是的,我在回答中提到了这一点。但我认为正确的原因是第三个[
是一个静态字符,因此它不会影响排序,不管它是否被排除在外。但是,在一般情况下,它确实很重要,所以我将它保留在了。在“一般”情况下,如果[
这是一个动态字符,\ze
只有在使用r
选项时才有意义,对吗?@Kent也没有,为了避免跳过后面的内容,或者换个说法,对\ze
后面的部分进行排序。感谢您的帮助和详细的帖子。