2007-09-27

Vim tips

  • :Exploreでカレントバッファのファイル相対の file explorer が開く.
    • :Sexplore で split する.
  • :Explore は netrw のヘルプで説明されている(:help netrw-contenst
  • netrw でリモートファイルが編集できる.
  • $ vi rsync://example.com/.bashrc
    

2007-09-25

vim-addons コマンド

Debian では vim-addons コマンドで vim-scripts パッケージで用意されたプラグインを ~/.vim ディレクトリ以下にコピーしたり,~/.vim ディレクトリ以下から削除したりできる.

$ vim-addons status
$ vim-addons install bufexplorer
$ vim-addons remove bufexplorer

Vim の Project プラグイン

  • :Project で呼び出す.
  • .vimprojects がデフォルトでは使用される.
  • .vimprojects:

    Test=~/test CD=. in=enter.vim out=leave.vim filter="*" flags=  {
        main.hs
        sub.hs
    }
    
  • キー
  • \r | ディレクトリのファイルをプロジェクトファイルに挿入
    \C | エントリ作成ウィザード

2007-09-23

Haskell で状態更新ループ

parsec で式のリストを作り,それを先頭から順に読んで状態を更新していくループを実装してみる.

仕様: 空白を含む数字の列を1桁の数列とみなし,それを順に足しあげていく.加算の結果を状態とする.

まず1桁の数字を読んで文字として返すパーザ:

digit_ws = do d <- digit
              skipMany space
              return d

数値の列を返すパーザ:

digits = do cs <- many1 digit_ws
            return $ map (read . (: [])) cs

read . (: []) は数字文字1個を数値に変換する関数(ちょっと不自然...).

このパーザでパーズする関数:

p cs = case parse digits "" cs of
       Left err  -> []
       Right val -> val

まず単純に使ってみる.

main = do cs <- getContents
          print $ p cs

これを実行すると

$ echo "12345" | runghc digits.hs
[1,2,3,4,5]

となる.

足しあげてみよう.

seqsum ior []  =    return ()
seqsum ior lst = do modifyIORef ior (+ (head lst))
                    readIORef ior >>= print
                    seqsum ior (tail lst)

main は次のようになる.

main = do cs <- getContents
          ior <- newIORef 0
          seqsum ior (p cs)
          readIORef ior >>= print

$ echo "12345" | runghc digits.hs
1
3
6
10
15
15

2007-09-22

Haskell の Data.IORef

IO モナド中で更新できる値を扱う。

main = do ior <- newIORef 0
          writeIORef ior 5
          v <- readIORef ior
          print v               -- => 5
          modifyIORef ior (+ 1)
          v <- readIORef ior
          print v               -- => 6

2007-09-03

Trac のソース表示での TAB

  • Trac のソース表示での TAB はデフォルトでは 8 spaces になっている.
  • これを変更するには conf/trac.ini の [mimeviewer] セクションの tab_width を変更すればよい.