こんにちは。皆さん、VimでC言語してますか?
僕は大学の授業でもっぱらVimでしてますが、一つ面倒なことがあります。僕は自前の関数を main
の後に書く派なので、関数プロトタイプ宣言が必要となります。:(行数)
→yy
→:(main関数の位置)
→p
→$
→r;
としているのですが、これ、どうにかなりませんかね??正直面倒です。
そこで、Vim Scriptの乏しい知識を使って自前でプラグインを作ってみました。その名も、C-prototype.vim
です。
導入
shima-529/C-prototype.vim
で公開してるのでこちらからどうぞ。NeoBundle
を使っている方なら、以下を .vimrc
やらに追加すれば動くはずです。
NeoBundleLazy 'shima-529/C-prototype.vim', {
\ 'autoload' : {'filetypes' : ['c']}
\ }
C++は、クラス内メソッドがあるので今のところ使用しないほうがいいです(この理由はこのプラグインのコードを見てもらえれば分かります)。
使い方
簡単にこのプラグインの使い方を紹介します。いずれもノーマルモードで作動します。
1. z
コマンド
このキーを押すことで、関数プロトタイプ宣言を追加できます。追加位置は #
で始まる最後の文の下です。空行 + 関数プロトタイプ宣言 が追加されます。
e.g.
#include <stdio.h>intmain(void){...}voidf1(){...}doublef2(intparam){...}
↓
#include <stdio.h>voidf1();doublef2(intparam);intmain(void){...}voidf1(){...}doublef2(intparam){...}
なお、下の関数自体の引数や型を変更した場合も、このタイミングで z
を押せば更新されます。
2. dz
コマンド
見ればわかると思いますが、関数プロトタイプ宣言を削除するコマンドです。これは z
コマンドで作成した関数プロトタイプ宣言だけではなく、手打ちで追加したものも削除してくれます。
動作している様子
既存のバグ
ファイル内にプリプロセッサ処理をする文がないと、実行時に追加された部分の末尾が← 11/30 18:40頃修正{
のままとなる。それ故、更にz
を押すとその部分が無限増殖するz
コマンドを叩いた後にUndoしたいときは、z
を叩いた回数分u
しなくてはならないので面倒 (現状、知識不足なので解決不可)
最後に
いやぁ〜、自分の書いたプログラムが動くなんて最高ですね!コードが幼稚でも頭のなかの構想と実際の挙動が一致した時の快感はヤバイです。かくいう僕は進振りで情報系に進む気ゼロですがね。
使ってて何かやばそうなバグとか、ここのコードはこうした方がいいよ〜とかあったら是非コメントまでどうぞ。できる範囲で対応したいと思います。
あと、コードを見てもらえれば分かる通り、ひっどいコードです。一般性はないわ、正規表現は怪しいわ、関数で分けてないわで、僕が見てもウンコードです。これからの課題は、まず正規表現、関数呼び出しだと分かりました。
あ、いや、これは別に「使わないほうが良いョ」って言う訳ではありません。むしろ使ってください。色々なコードを書いてますが、今のところ不具合はありません。このプラグインが少しでもあなたのプログラミングの一助になれば、これ以上の幸せはないです。