欲しい結果はこれじゃない…
0
1
10
2
3
4
5
6
7
8
9
あのRubyの生みの親まつもと ゆきひろさんも言っていました
「こうなるからRubyのバージョンには2桁の番号を付けない」と。
追記(2014/11/29)
:sort n
で整数順でソートが出来ました。@thincaさんありがとうございます。Vimステキ
Vimスクリプトで解決しよう
せっかくスクリプトにするのでついでに小数のソートにも対応しましょう
FSort.vim
command!-nargs=? -range=% -bang FSort :<line1>,<line2>calls:FSort(<bang>0,<q-args>)function!s:FComp(lhs, rhs)letl:lhs = str2float(substitute(a:lhs,s:pat,"",""))letl:rhs = str2float(substitute(a:rhs,s:pat,"",""))returnl:lhs ==l:rhs ? 0 : l:lhs <l:rhs ? -1 : 1endfunctionfunction!s:FCompBang(lhs, rhs)return-s:FComp(a:lhs,a:rhs)endfunctionfunction!s:FSort(bang, ...) range
if(a:1!="")lets:pat= matchstr(a:1,'/\@<=.*/\@=')elselets:pat='.\{-}\%\(\d\|-\)\@='endifletlines= []
foriin range(a:firstline,a:lastline)call add(lines, getline(i))endforif(a:bang)callsort(lines,"s:FCompBang")elsecallsort(lines,"s:FComp")endifforiin range(a:firstline,a:lastline)call setline(i,lines[i-a:firstline])endforendfunction
vim内臓の:sort
同様に:FSort!
で逆順とか、:FSort! /\(\(\d\|\.\)\+\s*,\s*\)\{2}/
で以下のように
2つ目のカラムまで読み飛ばして小数で逆順ソートなどできます。
1, 0, 2.4 , 2
4, 1, 2.3 , 0
5, 11, 2.1 , 1
0, 0, 1.4 , 0
6, 9, 1.12, 2
3, 0, 1.1 , 1
8, 1, 0.9 , 1
9, 0, 0.1 , 2
6, 10, 0.03, 0