2009/08/05


そもそもvimでOOはしんどい。
function! Class_Prototype() dict
  return self
endfunction

function! Class_Override(...) dict
  if a:0 == 0|throw "Invalid Parameter"|endif
  let class = copy(self)
  let class.__NAME__ = a:1
  if type(a:2) == type(class.New)
    let class.New = a:2
  else
    let class.New = self.New
  endif
  let class.Super = self
  return class
endfunction

function! Class_New(...) dict
  let instance = copy(self)
  call remove(instance, "New")
  call remove(instance, "Override")
  let instance.Super = self
  return instance
endfunction

function! Class_ToString() dict
    return self.__NAME__
endfunction

let Object = {
 \ "__NAME__" : "Object",
 \ "Prototype"function("Class_Prototype"),
 \ "Override"function("Class_Override"),
 \ "Super"{},
 \ "New"function("Class_New"),
 \ "ToString"function("Class_ToString")}


function! Human_Sing() dict
  echo self.perfix . "は" . self.name . "。" . self.title . "\n"
  return self
endfunction
function! Human_New(...) dict
  let instance = copy(self)
  let instance.perfix = a:1
  let instance.name = a:2
  let instance.title = a:3
  let instance.Sing = function("Human_Sing")
  return instance
endfunction
let Human = Object.Override("Human", function("Human_New"))

function! Gian_Boxing(who) dict
  echo a:who . "のくせに生意気だぞ!!!\n"
  return self
endfunction
let Gian = Human.Override("Gian", {})
let Gian.Boxing = function("Gian_Boxing")
let Dekisugi = Human.Override("Dekisugi", {})

silent! unlet gian
silent! unlet dekisugi
let gian = Gian.New("俺", "ジャイアン", "ガキ大将")
let dekisugi = Dekisugi.New("僕", "出来杉", "優等生")

call dekisugi.Sing()
call gian.Sing().Boxing("のび太").Boxing("スネ夫")

僕は出来杉。優等生
俺はジャイアン。ガキ大将
のび太のくせに生意気だぞ!!!
スネ夫のくせに生意気だぞ!!!
つかわねー!

参考文献
JSでthisをそのまま返す関数を作っておくと便利?
PHP で引数をそのまま返す関数を作っておくと便利
Posted at by



2009/07/21


別にEditor's Warを起こそうって訳では無いです。
だたvimが弱々しく読める文章だったので補足させて頂きたい。
Emacs の人と Vim の人のキーストロークの数え方の違い。 - 日々、とんは語る。

Ctr キーは1ストロークには入りません!

普段 Emacs を使うとき、どう考えても「修飾キー + 文字キーの組み合わせは一発操作」という感覚でしかありません。

「Ctr + Alt + s」とか、修飾キーが複数であっても、同時押しであれば、僕の中では1ストロークです。

http://d.hatena.ne.jp/tomoya/20090715/1247590638
慣れればそうかもしれませんが、モディファイアキーを使うには両手、もしくは指が2本要ります。片手で済むならばもう片方の手で鼻をほじる事だって出来るんです。なんてすばらしい。

Emacs の人と Vim の人のキーストロークの数え方の違い。 - 日々、とんは語る。

一発で何んでもできるっていうところが重要で、とりあえず、気に入ったコマンドはキーバインドを割り当てます*1。これ常識。

http://d.hatena.ne.jp/tomoya/20090715/1247590638
vimもしますよ。人によってはストロークではなくてモディファイアキーを使った物にマップする人もいます。

Emacs の人と Vim の人のキーストロークの数え方の違い。 - 日々、とんは語る。

何ならキーバインド定義用のマイナーモードとか作って、オンオフを切り替えることで、キーバインドを自由に入れ替えて使う事もできます。

http://d.hatena.ne.jp/tomoya/20090715/1247590638
それもvimで出来ますし、無ければ作れます。

Emacs の人と Vim の人のキーストロークの数え方の違い。 - 日々、とんは語る。

そういった、キー操作カスタマイズの柔軟性が Emacs の利点であり、Vim の場合のアレコレする場合はコマンドを打ち込まないとアレコレできないところに、僕は不満を感じるのかもしれないなぁと、ふと思った。

http://d.hatena.ne.jp/tomoya/20090715/1247590638
vimも設定次第ではいくらでも出来ます。キー登録用のスクリプトもやろうと思えば出来ます。
emacsでも次回起動からも有効にしようと思えば .emacs に書くかと思いますが、間違ってますか?

ただしvimmerはしません。なぜなら...

コマンドを打ち込むのが好きだから。

自分だけのvimrcを作る為に、惜しげなく時間を費やす人達なのです。DropBoxなんかのストレージサービスやgithubなんかにvimrcを置いてしまう人達なんです。
ブログなんかでvimrcを晒しちゃう人達なんです。


えっそれemacsユーザも同じ?変態ですね!

mattn the vimmer!
Posted at by



2009/06/23


アナウンスしてなかったですが、先日書いた「VimからFastLadderを扱えるスクリプトFastLadder.vim書いた。」ですが、LivedoorReaderに対応させています。 let g:fastladder_server = 'http://reader.livedoor.com'
とvimrcに書いておくと :FastLadder
でLivedoorReaderのフィードが見れます。
今後はFastLadderやLivedoorReaderの様にフォルダ単位の閲覧が出来る様に改良して行く予定です。
Posted at by