2016-02-05 55 views
0

例子:排序与案例列表

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中,这将是很容易做到,但它似乎没有TE是可能使用python sorted()命令和vim列表。

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

UPDATE:

也许一个解决办法是:

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

这将使在寄存器中的所有行,但我怎么能在一个寄存器中的行排序?

EDIT: 发现一个溶液用蟒的帮助(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']] 

回答

0

sort()有一个可选参数,该参数的函数。根据子列表的第一个元素定义返回-1,0或1的函数。

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

可以改为将换位版本排序为tr(),然后在排序后转回。

+0

请参阅更新。 Btw..is funcref不仅用于比较数字? – Reman

0

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

请查看详细

+0

你好肯特。我不知道如何在python命令中导入vim列表。在python中,如果我对'key = s.lower'和'key = itemgetter(0)'的组合没有错误,你可以这样做。不知道如何在vim中编写比较函数,我会查阅帮助文件。 python'key = str.lower'中的 – Reman

+0

不会给你想要的东西。 'A a B b'。 – Kent

+1

如果你的问题是如何将变量/列表从py传递给vim,你已经提出了另一个问题,并且我发布了一个答案。也许你可以再次检查它:http://stackoverflow.com/questions/17656320/using-python-in-vimscript-how-to-export-a-value-from-a-python-script-back-to-vi – Kent

1

再制造检查:h sort(:发现一个解决方案与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']]