使用Case对列表进行排序

时间:2016-02-05 09:30:58

标签: list sorting vim

示例:

let list = [['aen', '2'], ['ben', '3'], ['Aen', '4'], ['Ben', '5']]

sort(list, 1)

输出:

let list = [['aen', '2'], ['Aen', '4'], ['ben', '3'], ['Ben', '5']]

预期产出:

let list = [['Aen', '4'], ['aen', '2'], ['Ben', '5'], ['ben', '3']]

在python中很容易做到,但似乎无法使用带有vim列表的python sorted()命令。

如何按预期对列表进行排序?

更新

也许解决方案是:

for i in range(0,len(list)-1) 
  let @b= join(list[i], "|||") 
endfor

这会将所有行放入寄存器,但如何对寄存器中的行进行排序?

修改: 在python的帮助下找到 解决方案 (在Vim函数内)

python3 << endpython
import vim
list2 = vim.eval('list')
list3 = sorted(list2, key=lambda v: (v[0].upper(), v[0].islower()))
vim.command("let list= %s"% list3)
endpython

echo list --> [['Aen', '4'], ['aen', '2'], ['Ben', '5'], ['ben', '3']]

3 个答案:

答案 0 :(得分:1)

Reman :在python的帮助下找到 解决方案 (在Vim函数中)

sudo rstudio-server status

答案 1 :(得分:0)

sort()采用可选参数,这是一个函数。定义返回-1,0或1的函数,具体取决于子列表的第一个元素。

请注意,您必须为更改的词法顺序定义函数。

可能相反,您可以使用tr()对转置版本进行排序,然后在排序后转置回来。

答案 2 :(得分:0)

我想在python中获得你期望的结果,你也必须编写自己的比较函数。在vim中,你可以先impl。比较函数,并将函数ref传递给sort()函数。

请查看:h sort(了解详情