我希望能找到一种在Vim中对选定块进行排序的方法。场景是这样的,我有如下内容:
{:a
:c
:b}
# after sort, it should be
{:a
:b
:c}
目前我需要输入:a
和:c
到新行,对所选块运行排序,然后再把括号放回原处。我正在寻找一种不需要进行这个额外操作的排序方法。
我希望能找到一种在Vim中对选定块进行排序的方法。场景是这样的,我有如下内容:
{:a
:c
:b}
# after sort, it should be
{:a
:b
:c}
目前我需要输入:a
和:c
到新行,对所选块运行排序,然后再把括号放回原处。我正在寻找一种不需要进行这个额外操作的排序方法。
:'<,'>sort /^.\{-}:/ |%s/{\|}//g
你可以通过将大括号内的内容读入寄存器来实现此目的。
"ayi{
sort(split(getreg('a')))
modifiable
标志,因为您正在更改非可见缓冲区。它会就地对缓冲区a
进行排序。然后,您可以将其粘贴到大括号vi{"ap
中。
显然,您应该将整个过程放在函数/宏或命令中。
:global
和:sort
对范围进行排序非常容易。以下命令将对花括号之间的行进行排序:
:g/^{/+1,/^}/-1sort
:substitute
可以做到这一点::%s/{\zs\|\ze}/\r/g
:g/^{/+1,/^}/-1sort
:%s/{\zs\n\|\n\ze}//g