Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

sortあるある

$
0
0

欲しい結果はこれじゃない…

0
1
10
2
3
4
5
6
7
8
9

あのRubyの生みの親まつもと ゆきひろさんも言っていました
「こうなるからRubyのバージョンには2桁の番号を付けない」と。

追記(2014/11/29)

:sort nで整数順でソートが出来ました。@thincaさんありがとうございます。Vimステキ:heart:

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

Viewing all articles
Browse latest Browse all 5608

Trending Articles