很多时候我只想整理我所有的#include
的长度在我的源文件和头文件的顶部。vim
允许我以类似的方式按字母数字排序 :{range} sort u
.
在 vim
,如何按行的长度对一系列行进行排序?这样较短的行后面跟着较长的行。
在互联网上搜索,我发现了这个:
:% s/.*/\=printf("%03d", len(submatch(0)))."|".submatch(0)/ | sor n | %s/..../
但这只能对整个文件进行排序,无论如何对我来说都是黑魔法。我试图弄清楚如何使用范围(例如从第 4 行到第 18 行)进行相同的排序,如
:4,18 s/...
你有什么想法?
最佳答案
使用 awk 过滤视觉选择
在 vim 中执行此操作的一种方法是在排序之前使用 awk 的 length() 函数过滤视觉选择。例如:
:'<,'> ! awk '{ print length(), $0 | "sort -n | cut -d\\ -f2-" }'
关于regex - 如何按长度对一系列行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531073/