Zen-Coding for

C-type Lang

自己紹介


名前:津田伸秀
サイト:  http://vivi.dyndns.org/    twitter:vivisuke
facebook:https://www.facebook.com/nobuhide.tsuda
年齢不詳のおじさん、ぼちぼちソフト作家、自宅研究員(主席)
趣味:テニス、オセロ、思考ゲーム・パズル類
Qt/C++ 使い, webアプリ(PHP, JS, jQ, SQL)も出来るよ
Windows用テキストエディタ ViVi を延々開発中
パズルアプリ(Android・tmlib)も公開中だよ
最近は、世界最速「さくさくエディタ」 開発中だよ
迷走中、お仕事募集中でござるぞ

Background

Zen-Coding


  • HTML記述に使用されている
    • パラメータを先に入力し、展開する方式
    • table, ul などとっても便利
    • 3倍速く記述可能
    • デモ

Zen-Coding

  • C/C++コーディングにも使用したい
    • C/C++構文は結構冗長性がある
  • 既に存在しているかとも思った、無い模様
    • → じゃあ、作ってみましょう
    • C/C++ だけではなく C# などにも対応

提案手法

仕様


  • 指定子、パラメータ入力直後に Ctrl + ,(カンマ)
  • 行単位で構文生成
  • 指定子:構文の先頭文字を並べる
    • un → unsing namespace std;
    • ts → typedef struct {} Name;
  • 括弧や推測可能なものは省略可能
    • f → for(int i = 0; i < N; ++i) {}
    • f k NN → for(int k= 0; k < NN; ++k) {}
    • w → while (true) { }
    • w fast != last → while (fast != last) { }

Implementation


  • 世界最速「さくさくエディタ」 0.4 に実装
    • 行単位での処理なので実装は簡単
  • ハードコーディング+ユーザ定義
    • 外部ファイルでルール指定可能
    • 書式:<Key> <Tab> <Text>
  • 詳細はこちら

ユーザ定義ファイル


  • 書式:Key Tab Text
  • 空白、Tab で始まる行はコメント
  • Text 中には \n, \t, \s, \c, \\ を記述可能
    • \c はカーソル位置
    • \s は半角空白
  • \{string\} でパラメータ位置、デフォルト指定可能
    • i if (\{true\}) {\n\t\c\n}
    • 余分に指定されたパラメータは最後の位置に全挿入

デモンストレーション

単純な文


  • r → return;
  • rt → return true;
  • # → #include "
  • #< → #include <
  • #0 → #if 0
  • // → //-----・・・-----
  • uns → using namespace std;
  • tuc → typedef unsigned char uchar;
  • im → int main() { ※ return 0; }
    • 注:※ はカーソル位置

パラメータ付き文


  • r 式 → return 式;
  • if 式 → if (式) { ※ }
  • while 式 → while (式) { ※ }
  • d 式 → do { ※ } while (式);
    • 注:※ はカーソル位置

省略・推測


  • f → for (int i = 0; i < N; ++i) { }
  • f k → for (int k = 0; k < N; ++k) { }
  • f 100 → for (int i = 0; i < 100; ++i) { }
  • f 10 100 → for (int i = 10; i < 100; ++i) { }
  • f LAST → for (int i = 0; i < LAST; ++i) { }
  • f <= → for (int i = 0; i <= N; ++i) { }
  • f - → for (int i = N; --i >= 0; ) { }
  • f 100 10 → for (int i = 100; --i >= 10; ) { }

その他言語サポート


  • python
    • for i in range(N):
  • Ruby
    • for i in 1..N do end
  • PHP
    • for ($i = 0; $i < N; ++$i) { }

ユーザ定義ファイルによる指定


  • 設定>Edit Zen-Coding で設定ファイル編集可能
  • 編集保存すれば、直ぐに反映
  • ユーザの設定が優先される
  • 記述例:
    • wh Tab while (\{true\}) {\n\t\c\n}

比較・評価

同様の機能・手法


  • ファイル読込
  • 短文
  • vi の abbreviations
  • snipets
  • マクロ関数

ファイル読み込み


  • エディタによっては、テキストファイルをカーソル位置に挿入する機能があり、定形文書を挿入可能
  • 欠点:
    • 手順が多い
    • パラメータを指定できない

短文入力


  • エディタによっては、登録テキストをカーソル位置に挿入する機能がある
  • ファイル挿入に比べれば手順は少ない
  • 欠点:
    • パラメータ指定が不可

vi abbreviations


  • 「.virc」ファイルに展開元、展開後テキストを記述
  • キーワードなどを短いテキストで入力することが可能
  • 欠点:
    • テキスト展開がスペースキーのために i、a などといったよく使う1文字を展開元として(実際上)指定できない
    • 常に空白が付加されてしまう
    • パラメータ指定が不可

snipets


  • 機能的に Zen-Coding に似ている
  • パラメータを後で修正可能

マクロ関数


  • C言語:あらかじめマクロ定義を行っておくことで、タイプ数を減少させることが可能
  • #define rep(i,a,b) for(i=a;i<b;++i)
  • 可読性が低下

まとめ


  • C系言語用 Zen-Coding 仕様を考案、実装した
  • if 文などはあまりストローク数を減らすメリットは無い
    • 手が覚えてないと使いこなすのは難易度が高い
  • return, #include 等はよく使用し、便利である
    • 思考が必要ない場合は、特に有用
  • VisualStudio プラグインとしても実装したい
  • よかったら使ってみてね
  • フィードバックよろしくっ

Zen-Coding for C-type Lang.

By Nobuhide Tsuda

Zen-Coding for C-type Lang.

  • 2,482