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,456