今日は、vimの勉強のページをおさらいしてみた。

はてなの社員っぽい人がプレゼンしているみたい。

5月2日の技術勉強会 - はてな技術発表会日記 - 機能変更、お知らせなど

vimは、学生時代からの付き合いで、もう5年目だ。4回生の時はメモ帳とEmacsだったけど、
夏休みくらいから、VimEmacsに変わりました。今では完全にvim一色。Windowsでも、
vimつかってるし。だから、職場でも、家でもほとんどのASCIIファイルは、vimが起動するように設定している。

感想。
すごくためになるページでした。最近、こういう話ができる人がめっきり少なくなったので、
懐かしかった。こういうノリも、懐かしい。
ただ、普通の人からみると変な人だと思われるんだろうね。
例えば、冒頭。

じゃあ今回は、なんかこれだけは知っておけーのvim勉強会を開催します。イェーイ。
目的はぁ、なんか普通にサーバーに入って普段vimを使ってない人がぁ。ちょっとApacheのconf編集しようかなー。
っとかってなると、すげーなんか色々手間どって嫌な感じになるからぁ。なんか、そういう、なんか、要するになんか、
wで保存とかddで、一行切るとかpで、ちょっと一行貼り付けとか、って言う人ぐらいの最低限の操作は知ってるけど、
それ以上のことはよくわかんないからconfファイルの設定が、あ、編集が面倒くさいっていう人向けに今回行います。
はまりどころとしては、Fedora Coreでviってrootで打つと、普通のユーザーだとalias vi='vim'ってのが、設定されている
からvimになるんですけど、rootだとbin/vi っていうコンパイルオプションで、滅茶苦茶シンプルなvimが使われちゃうんで、範囲選択とかが使えないんで、vimってうって起動するといいと思います。

多分、普通の人は一行目から???なんだろうね。。
ちなみに、うちで使っている○○ール○○○○パックは20MB以上のファイルをアップロードできないが、それは、
上記のconfファイルをいじればすぐに解決できる問題。まぁ、多少の言語でも対応する必要ありだけど。PHPだったら、
php.iniとか。ソース間ではtime_outの設定とかね。

まぁ大変勉強になりました。全部は覚えきらんけど。

日記の機能は、次期バージョン対応予定ということで、データをHTMLフォーマットに変換するエンジンを組み始めた。
名前は何にしよう。何も決めてないので、安易に、DiaryViewとした。

はてなダイアリーでも、Wikiでもおなじみの

一列目に+や-がきたら

  1. こんなのや、
  2. こんなのや、
  • こんな風になる

という機能を実装した。これ、行頭というのがポイント。
はてなダイアリーでもそうだが、2文字目にしても反応がない。
これをどうやったのか 要するに正規表現をつかっちゃえばよいのである。
ちなみに、こんなかんじ。


<?php
/** <ol>対策.
* @param string 文字列
* @return 整形データ
*/
function formatOL( $string ) {
/**{{{*/
//データは、\nで区切られていると思ってよい.
$array = explode("\n", $string);
$ret = ""; //変換された後のデータ.
$isInOL = false; //OL状態にあったのか、そうでないのか.
for( $iCounter = 0; $iCounter < count($array); $iCounter++ ) {
$temp = $array[$iCounter]."\n";
if ( $temp[0] == "+" ) {
//OLの対称である.今はじめて+に出くわしたのか、前の行も+があったんかをチェックする必要あり.
if ( $isInOL == false ) {
//初めてOLを使うので、+を<OL>\n\t\t<li />に置換すればOK
//$temp = ereg_replace( "[^\+]", "<ol>\n\t\t<li/>", $temp );
$temp = ereg_replace( "[/^\+/]", "<ol>\n<li />", $temp );
$isInOL = true;
} else {
//<ol>の中にある.+を<li />に置換すればOK
$temp = ereg_replace( "[/^\+/]", "<li />", $temp);
}
} else {
//OLの対称ではないが、+状態から、抜け出たのか、何も関係ないのかをチェックする必要あり.
if ( $isInOL == false ) {
//もともと何にも関係ないので、そのままスルー
} else {
//+状態から抜け出したので、末尾に、</ol>を加える必要あり.
$temp .= "\n</ol>\n";
$isInOL = false;
}
}
$ret .= $temp;
}
return $ret;
}
/**}}}*/

/** <ul>対策
* @param string 文字列
* @return 整形データ
*/
function formatUL( $string ) {
/**{{{*/
//データは、\nで区切られていると思ってよい.
$array = explode("\n", $string);
$ret = ""; //変換された後のデータ.
$isInUL = false; //OL状態にあったのか、そうでないのか.
for( $iCounter = 0; $iCounter < count($array); $iCounter++ ) {
$temp = $array[$iCounter]. "\r\n";
if ( $temp[0] == "-" ) {
//ULの対称である.今はじめて+に出くわしたのか、前の行も+があったんかをチェックする必要あり.
if ( $isInUL == false ) {
//初めてULを使うので、+を<OL>\n\t\t<li />に置換すればOK -にヒットさせる場合は、文末におく.
$temp = ereg_replace( "[/^-]", "<ul><li />", $temp );
$isInUL = true;
} else {
//<ul>の中にある.+を<li />に置換すればOK
$temp = ereg_replace( "[/^-]", "<li />", $temp);
}
} else {
//ULの対称ではないが、+状態から、抜け出たのか、何も関係ないのかをチェックする必要あり.
if ( $isInUL == false ) {
//もともと何にも関係ないので、そのままスルー
} else {
//-状態から抜け出したので、末尾に、</ul>を加える必要あり.
$temp .= "\n</ul>\n";
$isInUL = false;
}
}
$ret .= $temp;
}
return $ret;
}
/**}}}*/


?>