続・vimの挿入モードで一行消し


考えてみた。


まずは下調べ

  • 通勤電車でVim完全バイブルの27章「式と関数」を読んだ
  • :h functions
VIM::Buffer.current.line =

と同等の関数を発見。

setline()

戻り値が『数値』。処理正常時には0が返ってくるので、空文字列に変換する必要がありそうな感じ。
そこで、ヘルプの組み込み関数を全部確認した。Stringで返して使えそうなものを4点ほど。


べたすぎる発想です。置換して空文字

substitute(setline('.',''),"0","","")

全部消して、0を0回出力すると空文字

repeat(setline('.',''),0)

0をASCIIコードに変換すると空文字

nr2char(repeat(setline('.',''),0))

モードで0をマッピングさせている人はいないでしょうw

maparg(setline('.',''),"")

解説

  1. 最初に思いついたのは置換する方法です。驚き最小限ですw
  2. repeatで文字を出力する方法なんて、全く発想になかったです。前日のid:ns9tksさんコメントも参照
  3. nr2charの使い方用途と全く違い、危険な方法だったりするかも。
  4. 逆転の発想。0をマッピングさせている人がいたらすごい。


vim完全バイブルの27章は、全関数網羅はされていない感じでしたが、Tipsとか載っていてとても参考になりました。
vimのヘルプもいい感じ。サンプルコードも一緒に記載されています。


List型とDict型はvim7からの新機能らしいのですが、List/Dict関連する関数も増えていてるせいか、やけに関数の
数が多かったです。別のエントリーで関数の差分に関して結果を書きます。

結論

  • vimヘルプ重要
  • 採用は2のrepeatで。文字列出力は利用方法として合っている感じがするから


Fuctionとか参考書みてたら、vim7scriptでfizzbuzz問題をやってみたくなった。
週末やってみよう。

ViIMproved‐Vim完全バイブル

ViIMproved‐Vim完全バイブル