■■■■■■□■■■■■■□■■■■■■□□□□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■■■■■□■■□□□□
■■□□■■□■■□□■■□■■□□□□□■■□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■□□■■□□□□□■■
■■□□■■□■■■■■■□■■■■■■□■■■■■■□■■■■■■

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Vimのスクリプト書いてみた

多分こんなのはあるんだろうけど、勉強も兼ねてVimスクリプトを書いてみました。
foo[0-3]barとかゆうのを
foo0bar
foo1bar
foo2bar
foo3bar
って展開。
コメントの英語が変なのは気にしない
※あまりに馬鹿丸出しだったのでコッソリ修正(07/11/10 08:38)
※スペルミス修正。がっかりだよ…(07/11/10 08:43)

command! ExpandSerialNumber call s:ExpandSerialNumber()
"-----------------------------------------------------------
" expand serial number
" syntax  : foo[nStart-nEnd][...]
" example : before
"                  0: foo[0-1][2-0]
"           after
"                  0: foo02
"                  1: foo01
"                  2: foo00
"                  3: foo12
"                  4: foo11
"                  5: foo10
"-----------------------------------------------------------
function! s:ExpandSerialNumber()
  let strPat = '\(.\{-}\)\[\(\d\+\)-\(\d\+\)\]\(.*\)'
  let nUndone = 1 " number of expr which has not been expanded
  let nOffset = 0

  while nUndone > 0
    let nLine = line(".") + nOffset
    let strLine = getline(nLine)
    let strMat = matchstr(strLine, strPat)

    " split [prefix, start-value, end-value, suffix]
    let strPre   = substitute(strMat, strPat, '\1', '')
    let strStart = substitute(strMat, strPat, '\2', '')
    let strEnd   = substitute(strMat, strPat, '\3', '')
    let strSuf   = substitute(strMat, strPat, '\4', '')

    if (strStart != "") && (strEnd != "")
      " str2int (I'm lazy...)
      let nStart = strStart + 0
      let nEnd   = strEnd + 0

      " if start-value > end-value, reverse flow direction
      let bReverse = nStart > nEnd ? 1 : 0
      let j = nEnd
      while j != nStart
        call append(nLine, strPre . j . strSuf) " append expanded string
        " if start-value > end-value, reverse flow direction
        let j += !bReverse ? -1 : 1
      endwhile

      call setline(nLine, strPre . j . strSuf) " replace expr to expanded string
      " add number of expanded string to nUndone
      let nUndone += !bReverse ? nEnd - nStart : nStart - nEnd
    else
      " if no expr is expanded, decrement nUndone and increment nOffset
      let nUndone -= 1
      let nOffset += 1
    endif
  endwhile
  return strPre
endfunction

テーマ:雑記 - ジャンル:コンピュータ

  1. 2007/11/10(土) 00:02:52|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0
<<bbLeanSkin mod 071110 アイコン表示するよバージョン | ホーム | もやしもん デスクトップトイ>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://nocd5.blog59.fc2.com/tb.php/186-c73fc5da
この記事にトラックバックする(FC2ブログユーザー)
home

プロフィール

Author:nocd5
30歳(男)
会社員

Last.fm



最近の記事

カテゴリー

カレンダー

07 | 2017/08 | 09
Sun Mon Tue Wed Thu Fri Sat
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Amazonアソシエイト

RSSフィード

リンク

このブログをリンクに追加する

FC2ブログランキング

FC2Blog Ranking

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。