2014年3月31日月曜日

僕がVim中毒者になるまで

はじめに

プログラマにとって相棒とも言える存在であるエディタ。
Sakura 秀丸、SublimeText, TeraPad, notepad++, gedit, Emacs, Vim,nanoなど、たくさんのエディタが存在します。

そんな中でも、今の俺のお気に入りにエディタはVim←タイトル見りゃわかるわ

まずはじめに、俺のエディタ履歴を書いてみたいと思います。

2010年4月授業でプログラムを初めて使う。言語はC。授業ではTerapadを使っていたが、家族共用のPCしか持っていなかった俺はメモ帳でコーディングする。
同年8月父に頼んでTeraPadをインストールしてもい、TeraPadを使うようになる。
2011年3月PHPをいじるようになる。Sakuraエディタと出会うも、そんなに使わず。
2012年10月Linux(Ubuntu)を初めて使う。geditと出会い使いはじめる。windowsでは相変わらずTeraPad。
2013年1月Notepad++と出会う。スペースでインデントを取る人間なのでインデント崩れが気に食わないが便利なのでwindowsでは使う。
2013年3月研究室のUbuntuを破壊し、先生にviエディタを教えてもらう。使いにくいエディタだと思った。
2013年4月Windows版のgeditがあることを知る。晴れてgedit厨となる。
2014年1月マウスレスでコーディングをしようとEmacsを使う。慣れれば奇跡的なコーディングが出来るというあこがれを糧に頑張る
1日後Vimの存在を知り、そちらに移行する。こっちのほうが相性がいい気がしたというただそれだけの理由で。
2014年3月31日この記事を書いている。今は立派なVim中毒者だ。

僕がVimに惹かれたきっかけとなった記事がこれだ!



Vimと出会った頃の俺はgedit厨であったため、やろうとしていることはまさにこの人と同じなのだ。
しかも、この人の文章の書き方、なかなか気に入っている。

ちなみに、Vimを知ったきっかけはUbuntu Serverを使ったことである。
今までは
$vi
って打つとUbuntuの標準でインストールされているvim-tiny(であってるよね?)が起動されていて、これの機能が少なくて使いにくいのなんのって。
これがUbuntuServerではvimが起動される。
色分けされていて見やすいなと思ったので、
"vi 色分け"でぐぐったら、どうやらviとvimというのがあるらしいと知ったのである。
そして、"vim 機能"でググってこのブログに出会ったというわけである。

Vimに対する認識もこの著者と同じで、この人がやったとおりにやればVimを使えると思った具合である。

実際、Vimを使いこなすまでの手順が具体的に書いてあり、すごくわかりやすい。
このブログの中で紹介されているこの記事の訳も言葉の選び方のセンスをとても気に入っている。
それより何より、わかりやすい。

さて、これで俺も晴れてVimデビューを果たしたわけだが、使いにくいのなんのってw
だいたい、ESCが遠い。
それで、使い始めたのがCtrl + [。
これもESCと同様の動作をしてくれるが、ESCを押すよりも大きく手を動かさなくて済むので重宝している。
はじめのうちはhjklを連打するのに必死で。
インサートモードでコマンド打ってみたりw
まぁ、しゃあないよね。
そして、このブログ中に紹介されている動画
でも紹介されているように、VimってUSキーボードで使うように設計されてるんじゃね?って変なことを考えだしてしまったため、とてもUSキーボードが欲しくなりました。←この頃には$とか0とかの移動をするようになったためカーソルの連打数も減りました。
また、動画中で紹介されているcitとかci",cwを使うようになり、Vimってちょっと便利かもって思い始めました。

そしてVim中毒者へ


そんな時に出会ってしまった記事が日本語キーボードを英字配列風にするである。
そして、この記事を理解するにあたって同時に参考にしたのがXmodmapでお好みのキーバインドである。
これらのお陰でVimを何倍心地よく使えたのかわからない。
それと同時に、HHKのUS配列のキーボードがすごく欲しくなってしまった。
この配列である。
カーソルキーが無い上にEscキーが近くにある。Ctrlキーも押しやすい。
まさにVimmerのためにあるキーボードではないかと思ってしまったのである。
この頃から、僕は研究室で「こいつ怖い」と言われ始めるようになったのである。

更に僕はVimを使い続け、ついにExcelでhjklを連打し、間違えたと思ったらCtrl + [を押すようになったのである!
これは立派なVim病の症状である。

まず手始めに使い始めたのがvichromeである。
これはChromeの拡張機能で、要はChromeをVimっぽくするってやつである。

そして、僕にトドメをさしたのはこの記事だろう。
Vim以外でVimする

ちなみに、これを見つける数日前にHappy Hacking Keyboard Liteを餞別として頂いたのである。
このキーボード、カーソルキーがFnを押しながらであれば使えるが、通常は使えないのでVim以外のエディタではイライラの原因以外の何物でも無いことを発見してしまったのである。

窓嫌いではあるが、Excel VBAでプログラミングしていた時に、エディタの仕様が違うとイライラして仕方がなかったので一度Vimで書いてコピペという非効率的なことをしていた時に出会ってしまった。
これ、マジで便利。
各ソフトごとにいちいちVimライクにするプラグインを入れなくていいし、そもそもプラグインが存在しない奴すらVimライクにできるのである。
↑これを後輩に教えたら、Vimmerやばいって返ってきたw

Vim中毒者になって思うこと


Vim中毒者になり始めの頃に
Emacsユーザが「実践Vim」を読んだ感想
という記事を読んだ。
現在は、この記事以上に最高のレビューは無いのでは無いかと思っている。

僕は、この記事を読んでいこう"."コマンドを多様することになり、そのちっぽけな点の威力に驚愕している。
また、この記事で触れられていますが、「え、そこへまず移動するの」といったように、EmacsユーザとVimユーザではカーソル移動ですら感覚が違います。
Emacsでカーソルを動かすとき, 1文字単位かword単位か, シンボル単位で目を動かして移動を行っています. それは Emacsがそのような移動を提供をしているからだということに気付かされました.」とこの方も書いていますが、コーディングの時の思考がエディタによって形成されていくんだなと感じました。

先日、この事の意味を痛感する出来事がありました。
研究室の引き継ぎで俺が作ったヘッダファイルの使い方を教えるためにプログラムの簡単な練習問題をやってもらいました。
geditを使ってコーディングしている後輩の画面を見ていたのですが、感覚が全然違うんですよね。
今回使ったのが行列演算のプログラムなのですが、行列を初期化するとき、その後輩は

obj.setMatrix(0,0,1);
obj.setMatrix(0,1,2);
obj.setMatrix(0,2,3);

obj.setMatrix(1,0,4);
obj.setMatrix(1,1,5);
obj.setMatrix(1,2,6);

obj.setMatrix(2,0,7);
obj.setMatrix(2,1,8);
obj.setMatrix(2,2,9);

みたいにしてたんですね。(まぁ、俺だったらそもそも配列を一つ用意してそれを初期化し、for文でset関数を呼び出しますが)

これを書くのに、まず
obj.setMatrix(0,0,1);
を書き、それをコピペして8回貼り付ける。
この時点でvimと違うのはC-pを連打しなければならない点です。
まず、連打ということに大きな違和感を覚えました。

次に、数字を変更していくために一つづつ消して変えていく。
当たり前っちゃ当たり前ですが、VimmerとしてはC-aやC-xが無いことに煩わしさを覚えますよね。


さて、次にVimでこれを実行する方法ですが、
obj.setMatrix(0,0,1);
と記述するまでは一緒。
次に、qaYp$hh<C-a>hh.q
と入力し、2行目が完成します。
更にそのまま@aと打てば3行目も完成します。
改行は普通に入れときます。
次に先頭の行に戻り、
qa4Y3jp$hh<C-a>4h.j.4l.j.4h.2k0q
って打てば次の三行が出来上がりです。
↑5,6,7行目の処理が重複してるからもっといいのがあるかも

残りの3行は@aって打てば出来上がり。
Vimなら行数や列数の変更があってもこの機能でなんとでもできます←そもそも、配列を用意せずにこれを行うことはおすすめしませんが。

このように、geditを使っている時とは「思考」のレベルで違うんです。
編集に対する考え方が違う。

Vim中毒とは、単に手がVimの動きをしてしまうだけでなく、Vimに思考を支配されることではないのかなと感じています。

2014年3月30日日曜日

yamyで窓でもVimる-part2-

前回、Vimライクな動作の仕様を大雑把に(厳格に決めてないところはエンジニアとして致命的だと思うんだ)決めたわけですが、今回はそれを実装すべく、具体的に設定ファイルを書いていこうと思います。

まず、ファイル名は.mayuならなんでも良さそうなのでmyVim.mayuにしました。
そして、前回同様、Vimedit.mayuを参考に書いていきましょう。

まず、モードなんですが、ロック機能を使います。
L0 Normal Mode
L1 Insert Mode
L2 Overwrite Once
L3 Overwrite Continously
L4 Character-wise Visual Mode
L5 Block-wise Visual Mode
L6 Line-wise Visual mode

にしました。
ここまでパクって怒られないものかと...
ちなみに言いますと、Overwrite Onceを&Prefixを使って再現しようとして失敗しました。

keymap2 OverwirteOnce : Global
    key L0-*S-i = Delete *S-i #a~z,数字キー、記号キーも同様に定義してあるよ!
keymap Global
    key L0-r = &Prefix(OverwriteOnce)
    key L0-i = &Toggle(Lock1,on)

なんて書くと、一件よさそに見えるのですが、

abcdefg

のcとdの間でriって押すとするじゃないですか、すると

abciefg

ってなってくれるところまでは嬉しいのですが、本来はここでノーマルモードでなきゃいけないのですがインサートモードになってしまうんです。


この問題が解決できずに結局vimedit.mayuを参考にする結果となりました。

ちなみに、L0はVimモードのON,Offも兼ねるようにしてあります。
VimモードのOn,Offの切り替えにはAlt + 左ダイヤモンドキーを割り当てました。右ダイヤモンドキーはWindowsキーとして使います。
また、左ダイヤモンドキーを単独で押した場合にはL0~L9のすべてをOffにするようにしました。
すべてのロックを解除したいときに助かるかなと。

次に、と言ってもまたVimedit.mayuをパクるだけですが、安全のためにすべてのキーを無効にするんだそうです。
とは言っても、挿入モードと上書きモードはそのまま出力されたほうが嬉しいので、
key L0-~L1-~L2-~L3-*a = &Ignore
と言った感じで記述していきました。


そして、次に書いたのがキーでバッグです。
何がL0~L9のどれがOnでどれがOffかわからない時に重宝します。
一度、左ダイヤモンドキーのキーコードを間違えたがためにL0がOnになりっぱなしの自体に陥りましたが、この機能に救われて何とか原因を発見することができました。
  key ~L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_0 = Space S-L o c k S-O f f _0 Space
  key *L0-~L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_1 = Space S-L o c k S-O f f _1 Space
  key *L0-*L1-~L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_2 = Space S-L o c k S-O f f _2 Space
  key *L0-*L1-*L2-~L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_3 = Space S-L o c k S-O f f _3 Space
  key *L0-*L1-*L2-*L3-~L4-*L5-*L6-*L7-*L8-*L9-C-S-_4 = Space S-L o c k S-O f f _4 Space
  key *L0-*L1-*L2-*L3-*L4-~L5-*L6-*L7-*L8-*L9-C-S-_5 = Space S-L o c k S-O f f _5 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-~L6-*L7-*L8-*L9-C-S-_6 = Space S-L o c k S-O f f _6 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-*L6-~L7-*L8-*L9-C-S-_7 = Space S-L o c k S-O f f _7 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-~L8-*L9-C-S-_8 = Space S-L o c k S-O f f _8 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-~L9-C-S-_9 = Space S-L o c k S-O f f _9 Space
  key L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_0 = Space S-L o c k S-O n _0 Space
  key *L0-L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_1 = Space S-L o c k S-O n _1 Space
  key *L0-*L1-L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_2 = Space S-L o c k S-O n _2 Space
  key *L0-*L1-*L2-L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_3 = Space S-L o c k S-O n _3 Space
  key *L0-*L1-*L2-*L3-L4-*L5-*L6-*L7-*L8-*L9-C-S-_4 = Space S-L o c k S-O n _4 Space
  key *L0-*L1-*L2-*L3-*L4-L5-*L6-*L7-*L8-*L9-C-S-_5 = Space S-L o c k S-O n _6 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-L6-*L7-*L8-*L9-C-S-_6 = Space S-L o c k S-O n _6 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-*L6-L7-*L8-*L9-C-S-_7 = Space S-L o c k S-O n _7 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-L8-*L9-C-S-_7 = Space S-L o c k S-O n _8 Space
  key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-L9-C-S-_9 = Space S-L o c k S-O n _9 Space

これは便利でした。

次に記述したのはEscとかCtrl + [を押した時にノーマルモードに戻る支持。
key L0-*ESC = &Toggle(Lock1,off) &Toggle(Lock2,off) &Toggle(Lock3,off) &Toggle(Lock4,off) &Toggle(Lock5,off)
  key L0-C-*LeftSquareBracket = &Toggle(Lock1,off) &Toggle(Lock2,off) &Toggle(Lock3,off) &Toggle(Lock4,off) &Toggle(Lock5,off)

次に、ノーマルモードでの命令をテキトーに書いてみましょう。
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = Home
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = End
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-h = Left
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-j = Down
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-k = Up
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-l = Right
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-y = C-c
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-y = Up End S-Down S-End C-c Right
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-p = C-v
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-p = Up End C-v
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-x = Delete
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-f = PageDown
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-b = PageUp
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-d = &Variable(0,10) &Repeat((Up))
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-u = &Variable(0,10) &Repeat((Down))
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-u = C-z
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-r = C-y
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-Tab = Space Space Space Space


keymap2 DeletePre : Global
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = S-End C-x
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = S-Home C-x
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-d = Up End S-Down S-End C-x

keymap2 LeftIndentPre : Global
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Comma = Home &Variable(0,4) &Repeat((Delete))

keymap2 RightIndentPre : Global
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Period = Home &Variable(0,4) &Repeat((Space))


keymap2 ChangePre : Global
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = S-End C-x &Toggle(Lock1,on)
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = S-Home C-x &Toggle(Lock1,on)

keymap Global
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-d = &Prefix(DeletePre)
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Comma = &Prefix(LeftIndentPre)
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Period = &Prefix(RightIndentPre)
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-c = &Prefix(ChangePre)

ただこれだけ。
大したことはありませんね。

あとは、コロンで始まる命令たちをどうしてあげるかですが、とりあえず放置する方向で。

次に、モードの切り替えはこんなもんで大丈夫でしょうか?
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-*S-i = &Toggle(Lock1,on)          
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-o = End Enter &Toggle(Lock1,on)    
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-o = Home Enter Up &Toggle(Lock1,on)
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-*S-a = &Toggle(Lock1,on)          
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-r = &Toggle(Lock2,on)
  key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-r = &Toggle(Lock3,on)

インサートモードは多分何も記述しなくても大丈夫なのでは無いかと思うんですがどうなんでしょうね?

次に、上書き(1回)モードですが、
右辺をDelete *S-a &Toggle(Lock2,off)みたいにすれば大丈夫なんじゃないかな。
もう一個の方の上書きモードは最後の&Toggleをなくすことと、
ESC or Ctrl + [が押された時に&Toggle(Lock3,off)を発生させればいいのかなと。

あとはVisualモードですが、どうやるんだろうこれ(´・ω・`)
せっせとVimedit.mayuを参考にします。
それにしても、この設定ファイル綺麗だなぁと。
俺の作ってるファイルのベタ書き具合がひどいのなんのってwww
まぁ、とりあえずは動けばいいやで行くので。

矩形選択は...TeraPadのショートカットキーらしい。
なので実装しない方向で。

そして、基本的にノーマルモードの動きにシフトをつけているだけみたいなので、せっせとコピペして完成!

しかし、こんな設定ではVimライクとはなかなか言えないですね。
回数指定でコマンド実行とか、.コマンドが使えないあたりはなんというか...
しかも、矩形選択からの挿入ができないのも辛い。
やっぱりVimって優秀なんですよ。
しばらくはこれで使ってみて、見えてきた改善点を修正しながらバージョン2,バージョン3と作っていこうかなと思います。

最後に触れておきますが、今回俺が頑張って作ったように書いていますけれども、基本的にvimedit.mayuのパクリなので。
このブログの方には感謝です。





2014年3月29日土曜日

yamyで窓をVimにする

普段Pear OSを使っているのですが、最近Excel VBAを使って母の要望に特化した家計簿を作ろうというプロジェクトを始動さました(この時期に始めると、この春から大学に入学し忙しくなるのでおじゃんになってしまいそうですが)。

ここで、Excel VBAに対する愚痴になってしまうのですが、エディタにVimが使えないのはいかがなものかと思うんですね。

最近、Vimの使えない環境に追いやられると発狂してしまう俺は標準のエディタを使っているとキーボードを叩き割りたくなるので、コードを一旦Vimにコピペして編集。編集が終わったら今度はExcelにコピペといった具合に非効率的な作業をしています。
Vim歴2,3ヶ月でこの症状がでるんですから、Vimって恐ろしいほどの中毒性があるんだなと思います((((;゚Д゚))))ガクガクブルブル

そこでなんとかならないかと調べていたら、このような素晴らしい記事を見つけました。
そこで、この記事中で紹介されているvimedit.mayuをコピペしてみたのですが動かない。

なんでかと思い、説明をじっくり読んでちょっとずつ自分で設定ファイルを書いてみたら動くじゃありませんか!

たぶん、どこかの仕様がこの著者と違うかそのたぐいだろうと思うのですが、カーソルをhjklで動かせるようにしただけで、だいぶストレスが解消されました。

そこで、もうちょっと読み進めていると、このマニュアル、最高ですね!
曖昧なところがなく、例もあるため読みやすい。
素晴らしいなものと出会ったなと感動で涙が出そう(嘘)です。
あ、でも感動したところまではほんとです。

そこで、ここまで素晴らしいマニュアルと、vimedit.mayuを参考にしながら書けば、自分仕様のVimemulatorができるのでは無いかと何故か思ってしまったため、作ってみたいと思います。

それにしても、このvimedit、よく出来ているなと思います。
Lock機能を使ってVim風にするなんて発想がまず思いつきませんでした。
それに、コメントもきっちりと書いてあって開発者の鏡だなと思いました。
しかも、2バイト文字が使われていない!
コードって人格が現れるんですね!
そして、そんな尊敬できる方の素晴らしい発想を早速ですが、ものすごく申し訳ないと思いながらパクらせていただきます。←大丈夫なのかな?非常に恐れ多いのですが


まずは想定する動作環境から。
このPCしか使わないつもりなので、以下の環境でのみ動けば十分ということで。
PCはDellのInspilon 620-s
CPUはIntel(R) Core(TM) i5-2320
メモリは8.00GB
キーボードは先日ボランティア先の方から、大学に行く餞別として頂いたHappy Hacking Keyboard Lite US配列(その方も前の職場を離れるときに餞別として頂いたものらしく、Lite2ではなくLite。端子もPS-2だったので、変換コードを探すのに数軒電気屋を回りました。なかなか気に入っています。)
マウスは何でもいいよね?いちおう今使ってるのはPC買った時についてきたちゃっちーやつ。
ディスプレイの仕様もどうでもいいことにしちゃおう。

とりあえず、動作環境はこんなもんでOKでしょうか?

そして、次に仕様を考えていきたいと思います。


必要なモードは
  • ノーマルモード
  • 挿入モード
  • 上書きモード
    • r押すとなるやつ
    • <S-r>押すとなるやつ
  • ヴィジュアルモード
    • v押すとなるやつ
    • <S-v>押すとなるやつ
    • <C-v>押すとなるやつ
にします。
コマンドモードは、一回一回':'から初めて押すことにします。

さて、ここで大事なのは「妥協」です。
ほとんどのエディタでは"Home"キーを押すと行頭にジャンプしますが、もしそれがファイルの先頭に移動するようなエディタがあったら、yamyを使って0を押した時にファイル先頭に飛んでしまったとしてもそれは仕様なのです。
仕様のとおりに設定ファイルを作るのではなく、設定ファイルが仕様なのです←それでいいのか?ww

まぁ、メーラとかExcel VBAで使えれば十分なわけで。
想定する環境外で動かす必要性に迫られたらまた別途作っていきましょうといったところです。

それでは、「俺が」Vimで多用するコマンドたちを以下に記してみます。




hjkl←これがなきゃvimどころかviとすら言えない
0,^,$,(g_ってあんまり使わないけど、使うことあるのかな?)
v,<S-v>,<C-v>
y,Y
p,P
dd,x
i,r,R,o,O,c
<C-f>,<C-b>,<C-d>,<C-u>
zz
w,b,e,f
u,<C-r>
=,>>,<<





そして、連ねながら思った、再現するのが難しそうなので今回諦めるコマンドたちをいかに
q←マクロ
zf←折りたたみ。もちろんスペースキーで展開するコマンドも
<C-n>,<C-p>←補完
~
<C-a>,<C-x>



そして、再現したいコロンで始まるコマンドたち
w←上書き
e←開く
q←閉じる
wq←名前をつけて閉じる(wとqの組み合わせだが一応)


再現できないであろう転んで始まるコマンドたち
new,tabnew,gt,split...←絶対無理だろと思う。できる方がいたら教えて下さい。尊敬します。そしてできたらコードもください。



さて、こんなことを始めてしまったら、家計簿ができるのはいつになるのかと思ってしまいますが、今日はこんなところでやめておきます。

それでは。