如何在vim中按长度对一系列行进行排序?

7gcisfzg  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(218)

简短的问题我使用这个regex https://stackoverflow.com/a/11531819/4779063在vim中按长度对行进行排序,但我对它进行了一点修改,使其能够与windows和gawk一起工作,所以我最终得到了这样的结果:

vmap <Leader>su ! gawk -f "{ print length(), $0 \| \"sort -n \| cut -d\\  -f2-\"}"<CR>

但每次我尝试使用它时,它都说它可以在我的C:\Users\Username\AppData\Local\Temp\VIi33.tmp中打开.tmp文件
有什么主意吗?

izj3ouym

izj3ouym1#

如果你愿意,你可以尝试只使用vim来按长度对文件进行排序:

:g/^/ s/^.*$/\=substitute(submatch(0),submatch(0),strlen(submatch(0)).'# '.submatch(0),'')/ 
:% sort! n
:% s/^\d\+# //
fxnxkyjh

fxnxkyjh2#

这个GNUAWK程序根据记录或行的长度(通过一个数组)对它们进行排序,并按排序后的顺序打印出来。你能用它吗?

function len_comp_func(i1,v1,i2,v2) {   # define length comparison function for for
  return(length(v1)-length(v2))
}
{
  arr[NR]=$0                            # populate array with all the records
}
END {
  PROCINFO["sorted_in"] = "comp_func"   # define order function
  for (i in arr)                        # traverse in length order
    print arr[i]
}

相关问题