:Exploreでカレントバッファのファイル相対の file explorer が開く.:Sexploreで split する.
:Exploreは netrw のヘルプで説明されている(:help netrw-contenst)- netrw でリモートファイルが編集できる.
$ vi rsync://example.com/.bashrc
:Exploreでカレントバッファのファイル相対の file explorer が開く.
:Sexplore で split する.:Explore は netrw のヘルプで説明されている(:help netrw-contenst)$ vi rsync://example.com/.bashrc
Debian では vim-addons コマンドで vim-scripts パッケージで用意されたプラグインを ~/.vim ディレクトリ以下にコピーしたり,~/.vim ディレクトリ以下から削除したりできる.
$ vim-addons status $ vim-addons install bufexplorer $ vim-addons remove bufexplorer
.vimprojects:
Test=~/test CD=. in=enter.vim out=leave.vim filter="*" flags= {
main.hs
sub.hs
}
| \r | | ディレクトリのファイルをプロジェクトファイルに挿入 |
| \C | | エントリ作成ウィザード |
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
IO モナド中で更新できる値を扱う。
main = do ior <- newIORef 0
writeIORef ior 5
v <- readIORef ior
print v -- => 5
modifyIORef ior (+ 1)
v <- readIORef ior
print v -- => 6