regex - 如何按长度对一系列行进行排序?

标签 regex sorting vim

很多时候我只想整理我所有的#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/

相关文章:

java - 用文件中的数据填充 java hashmap

javascript - 用于手中测量的正则表达式

CSS 巨大的单行文件缩进不起作用

vim - 如何自动缩进行?

vim - 将键映射到自身和另一个键而不覆盖键的先前映射

php - 通过 .htaccess 从 URL 隐藏目录名称

regex - 在 shell 脚本中使用正则表达式实现多行模式

c - 在 C 中对 CSV 文件进行排序

arrays - 如何使用 CoffeeScript 对数组进行排序?

python - 如何在 Python 中对对象进行排序