Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何根据vim中字母/符号的第二次出现对文本进行排序?_Sorting_Vim - Fatal编程技术网

Sorting 如何根据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

在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

查看
:帮助:排序

因此,您需要定义一个
{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
后面的部分进行排序。感谢您的帮助和详细的帖子。