--/--/--

スポンサーサイト

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

2008/11/26

vim - textwidth と formatoptions と gq

これがやりたかったんだ、というオプションとコマンドを発見。

vim で set textwidth=n と設定すると、一行が n 文字に達すると、これを越えないように、空白の後で改行が挿入される。しかしデフォルトだと、これがマルチバイト文字の間では動作しない。例えば、日本語の文書を横 40 文字で改行したいという場合、set textwidth=80 (マルチバイト文字なので2倍) としただけでは、期待する動作とならない。

これを解決するのが formatoptions というオプション。色んなフラグを設定できるのだけど、この中に m という、文字コードが 255 より後のマルチバイト文字の間でも改行する というフラグがある。これを有効化すると、先の例で期待する動作を得られる。

もう1つ便利なのが、formatoptions の q というフラグ。vim だとデフォルトで有効化されているのだけど、set compatible していると、デフォルトでは無効となっている。q フラグは、gq で整形するというものである。1GgqG とやれば、文書全体を整形できる。

この辺は vim で日本語文書を書くときに便利なので、抑えておきたい。

2008/11/24

マグロ

松方弘樹さん釣り上げた!300キロの特大マグロ

でかすぎて笑った。

2008/11/24

HHK

HHKもう一台買いたいなぁ。金がないのだけれども。

2008/11/22

Gmail の theme

Terminal が秀逸すぎる。

2008/11/13

Windows 環境

先々週ぐらいに構築したのだけど、先週の中頃くらいからすっかり使っていない。またモニタはずして、xmonad with デュアルディスプレイにしてしまおうかな。

2008/11/12

検索と大文字小文字の区別

google なんかは大文字小文字の区別をしない(と思ってる)けど、たまに大文字小文字を区別する web 検索エンジンがある。google での検索に慣れていると、これに引っかかり、うまいこと検索できないことがある。

一方で、テキストエディタや grep でのテキストファイルの検索では、普段から大文字小文字の区別を意識している。

後者のテキストファイルの検索でもそうなのだけど、なにかぼんやりとしたものを検索したいときには、大文字小文字の区別をしてほしくない。逆に明確に探したいものが分かっている場合には、大文字小文字を区別したい。テキストエディタや grep では、オプションでこの動作を切り替えることができるけど、web 検索エンジンではできない(と調べもせずに思ってる)。

とまぁ、前者の事例にたった今ぶちあたって、こんなことをぼんやりと考えた。

2008/11/05

C++

C++ にはあんまりいい印象を持ってなくて、触れたこともなかった。しかし今日、初めて C++ のソースコードを真面目に読んだ。読んでいるのは mysql の csv storage engine。cc ファイルと h ファイルがそれぞれ 2 つずつだけの小さなソースコード。つまみ食いならぬつまみ読みとは言えど、案外すんなりと読めて、軽く驚いている。

2008/11/05

Huffman 符号化

聞いたことは何度もあるけど、思い返せば仕組みを覚えてないなと思い、調べて Java で実装した。

感想としては、仕組みは簡単かつ簡潔。よくできてるなーと思った。対して実装はそこそこ面倒くさいなと。楽なほうなのだろうけど。

2008/11/03

git reset --hard

動作を把握せずに使うと、実におそろしいコマンド。特定の過去のリビジョンの状態にリセットするのだけど、そのリビジョン以降のコミットが全て無効になってしまう。

例えば、コミット5からコミット2に git reset --hardすると、コミット2より後の、差分やログといった情報が消え去ってしまう。場合によっては取り返しのつかないことになってしまう。

2008/11/03

Project Euler: Problem 24

Problem 24

単純に順列を列挙し、100万番目を取り出しているだけ。

実行結果

$ runhaskell 24.hs
[2,7,8,3,9,1,5,6,0,4]

プログラム

1 perm :: [a] -> [[a]]
2 perm [] = [[]]
3 perm xs = concat [map (x:) (perm xs') | (x, xs') <- f xs]
4   where f [] = []
5         f (x:xs) = (x, xs) : [(x', x:xs') | (x', xs') <- f xs]
6
7 fn = perm [0..9!! 1000000
8
9 main = print $ fn
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。