如何在vim中混洗列表?

Rem*_*man 23 sorting random vim list

在Vim中刷新列表的最佳方法是什么?

我试图在vim中随机排序(使用vimscript).我为此创建了一个包含所有行号的列表(在我的选择中).

如果我从第10行到第20行选择,我的列表将是:

mylist = ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20']
Run Code Online (Sandbox Code Playgroud)

我想随机对行进行排序,并使用for循环将它们放回新序列中的相同选择中.为了实现这一点,我想多次洗牌,但不知道如何洗牌.

另一个解决方案是从我的上一个随机选择一个索引.

无法找出最好的方法.

我知道我可以使用python,ruby或其他语言对行进行排序,但我不想安装它们.我想在上面使用vimscript实现.

rom*_*inl 31

您可以使用"UNIX样式"并使用包中的shuf命令coreutils:

:10,20!shuf<CR>
Run Code Online (Sandbox Code Playgroud)

  • 我选择的武器:`:'<,'>!sort -R`,或者使用`randomize-lines`中的`rl` (10认同)
  • @Remonn你是否有任何实质性的主张,为什么`:!sort -R`没有做好随机排序?因为我刚刚比较了**[sort.c](http://lingrok.org/xref/coreutils/src/sort.c)**和**[shuf.c](http://lingrok.org/xref) /coreutils/src/shuf.c)**实现,并且必须给sort.c略微优势,因为它更通用(例如,尝试`sort -uR`,或使用特定的键). (4认同)

Ban*_*eil 9

更新截至2019年:

osx现在包含一个-R排序的标志,所以你应该可以使用

:'<,'>!sort -R

===上一个答案:===

排序在osx中​​没有-R标志,因此:

brew install coreutils

在vim中选择行,然后运行:

:'<,'>!gsort -R

  • 截至 2019 年,sort 在 macOS 中具有 -R 标志,因此不再需要使用 gsort。 (2认同)