Komodo Editのマクロのサンプル(現在日時の挿入)

Komodoネタ第3弾です。
個人的にKomodoでのマクロは是非使っておきたい機能だと思いますので、
簡単なマクロを作って雰囲気を紹介します。

準備

まずは自作マクロ用のフォルダを作っておくとバックアップや移行 *1 が楽になります。

Toolboxを開いて何もないところを右クリックして Add→New Folder から適当な名前を入れます。
(メニューバーに表示する場合はNew Folderの代わりにNew Custom Menu)

そうすると

C:\Users\<ユーザ名>\AppData\Local\ActiveState\KomodoEdit\7.1\tools\<入力した名前>

に物理フォルダが作られます。

マクロの作成

右クリックの Add→New Macro から適当な名前を入れ、Language は JavaScript を選択。
以下の様なスクリプトを書きます。

(function() {
    var d = new Date;
    var dateStr = '' +
    d.getFullYear() + '/' +
    ('0' + (d.getMonth() + 1)).slice(-2) + '/' +
    ('0' + d.getDate()).slice(-2);
    ko.views.manager.currentView.scimoz.replaceSel(dateStr);
})();

Key Bindings タブで「Ctrl+;」を Add し OKボタンで保存。
※キーアサインはExcelと同じ

これでCtrl+;で「2013/02/06」といった文字列がエディタに挿入されるようになります。

ちなみにマクロ右クリックの「Edit Macro」からならエディタ側で編集できます。

スニペットでも

実はこの程度ならマクロを持ち出すまでもなくスニペットでもっと簡単に [[%date:%Y/%m/%d]] とか [[%date:%H:%M:%S]] と書くだけで同じ事ができるんですよね。


さらにそれをマクロから呼び出したりも。

var dateStr = ko.interpolate.interpolateString('%date:%Y/%m/%d');
ko.views.manager.currentView.scimoz.replaceSel(dateStr);


TMTOWTDIですね。

参考資料

Macro API Reference
http://docs.activestate.com/komodo/4.4/macroapi.html


ActiveSatate Code Recipes (をmacroタグで検索)
http://code.activestate.com/recipes/tags/macro/

*1:有料版のKomodo IDEだとActiveStateのサーバ経由でPC間の設定やマクロの同期ができるそうです。 http://docs.activestate.com/komodo/7.1/sync.html

Komodo Edit 7.1の初期設定例

自分がWindowsへインストールした時のメモです。
殆ど好みの問題ですが説明を入れつつ紹介します。

画面

初期状態は簡素なので各ペインを表示します。
メニュー→View→Tabs & Sidebars→
Projectにチェック
Toolboxもチェック(後でここにソースツリーが出ます)

アドオン追加

※環境によっては先に後述の Web & Browser からProxy設定が必要です。


メニュー→Tools→Add-ons

  • Sites 0.2.2

ローカルとリモートのファイルツリー。
以前は「JSTreeDrive」「Komodo Drive Tree」「Remote Drive Tree」のあたりを入れてましたがこれ1つで大丈夫そうでした。
サーバ上のファイルを開いて保存すればサーバ上に反映され、リモート側にファイルの新規作成も可能です。
ファイルのオーナーやパーミッションまでは見れないようです。

  • ColorTab 1.0.3

テンプレートやcssやjsファイルなどファイル名によってタブの色を変えられます。

  • NST - New Source Tree 0.59

ソースツリーです。
PHPJavaScriptCSS、HTMLなどで使ってます。
JavaScriptではメソッドの書き方によっては出なくなったように思います。
あと、このアドオンは大きいhtmlファイルを開く時かなり重くなるので注意です。

  • TODO helper 1.4.4

プロジェクト内を指定した文字列で全文検索して表示しているような感じです。

  • AutoCode 1.061

メソッドの上で「/** Enter」と入力すれば引数を見てPHPDocやJsDocの雛形を生成してくれます。
その他jsやbatファイルが実行できるようになったり、PlacesのファイルをAlt+クリックでファイル名をコードに入れられたり細々と色々な機能を含みます。
http://www.xjsfl.com/support/setup/komodo/autocode

  • Emmet 1.0(元Zen Coding)

HTMLコーディングを凄く効率化できるアドオンで紹介記事も多いですね。

  • その他

Tweak UIの「タブにX階層上のディレクトリ名も表示する」という機能がちょっと良かったんですが、
現在のところVer7には対応してないらしいです。必要と思った時にまた考えるとして見送ります。


MoreKomodoの「Unicode Table」は結構気に入ってましたのでVer7対応待ちです。
http://community.activestate.com/xpi/morekomodo#comment-9422


Uploaderアドオンはファイル保存をトリガにしてサーバにアップロードといったことが出来るようになります。
が、使ってないので名前の紹介だけ。


Komodoのアドオンはごった煮が多い様に思いますので何がどの機能を持ってるか分からなくなる事がありますね。


アドオンを入れ終わったらKomodo再起動します。

設定

メニュー→Edit→Preferences

Appearance

Show Komodo Start Page on startup のチェックを外す
※スタートページは使ってないため


Side Pane Layouts を全部 Horizontal tabs に。
※縦並びタブやドロップダウン式がいまいち使いづらいので全て普通の横並びタブに

Code Intelligence

Maximum number of rows shown in autocomplete [10]
※初期値の5だと狭く感じたため


API Catalogs で jQueryKomodo にチェック

Editor > Key Bindings

最初に設定を変更するときに設定名を問われます。その設定は

C:\Users\<ユーザ名>\AppData\Local\ActiveState\KomodoEdit\7.1\schemes\<付けた名前>.kkf

にファイルとして保存されます。

Komodo 5.2はRoaming、6.0以降はLocalでした。
WindowsXPはApplication Dataにありました。
Komodo終了時までファイル出力されなかったかも知れません。


→General: Preferences... を選択して New Key Sequence にフォーカスを当てて F12 を押して Add ボタン
※最初は設定変更で何度も開くので、真っ先に登録しておくと便利でした。


→Code: Go to Definition に F4 をAdd
Flash Developで押し慣れたため


→Code: Complete Word と
 Code: Complete Word (backwards) を Clear
→Editor: Trigger preceding AutoComplete list or CallTip に Ctrl+Shift+Space を Add
※こう変えた理由を忘れましたがメモに残っていたため


→Find: Incremental Search から Ctrl+F を Clearして、
 Find: Find... に Ctrl+F を Add
※検索ダイアログからCtrl+Pでプロジェクト内全文検索に切り替えという操作をよくするため
ダイアログ側を入り口にしています。(Ver6以前と同じ動作)

Editor > Indentation

Prefer Tab characters over spaces にチェックを入れ
[4] Width of each Tab character

※タブ文字でのインデントにします
タブのインデントはコーディング規約で禁止されてることが多いので最近は敬遠気味です

Editor > Save Options

Fix whitespace on save:
Clean trailing whitespace and EOL markers にチェック
Always clean current line にチェック
※保存時の行末スペースの自動削除です
※ただ、チーム開発でソースをバージョン管理してる時、意図しないDiffが発生する場合がありますね

Fonts and Colors

こちらもKey Bindings同様、設定を変更するときに設定名を問われ

C:\Users\<ユーザ名>\AppData\Local\ActiveState\KomodoEdit\7.1\schemes\<付けた名前>.kkf

に保存されます。(拡張子違い)


→Fontsタブ
Encoding: Default
エンコーディングごとにフォント設定ができるという意味
 →Fixed Width
 MSゴシック…にしたいところなのですが、ここでひとつ問題があって
 日本語名のフォントは一覧に出るのですが選択状態が保存できません。
 上記ksfファイルをエディタで開いて
 CommonStyles の default_fixed の face に 'MS Gothic' と入力して保存すればOKです。

 サイズを[11]に


→Common Syntaxタブ

bracebad のフォントサイズを16
※よく分かりませんがこれでエディタの行間が広がります


comments の Italic を解除し Foreground もオレンジに


Color Picker to use: を
john_dyer_color_picker に

Internationalization

Use encoding defined in environment:: co932 のチェックを解除し UTF-8 を選択


Date & Time
Formatを「%Y/%m/%d %H:%M:%S」に

Languages > PHP

Use this interpreter の [Browse] から
ローカルのphp.exeを指定

New Files

EOL: UNIX(\n)

Servers

接続情報入力して[add] (SitesアドオンやUploaderアドオンで使用)


Default Connection Timeoutを[3]
※接続先の設定ミスなどでタイムアウト待ちになると固まるので短くしています

Web & Browser

ConnectionのSettings...でAuto-detect等
※アドオン取得のためのプロキシ設定

Color Tab (アドオンインストール後)

*.phpや*.tplを追加して自分のイメージする色に指定


CSSの後ろの方の「border: 1px solid #000 !important;」を削除します。
※ボーダーが気に入らないため


そしてこのCSS入力欄、-moz系プロパティが使えます。
虹色にしてみたりタブを傾けたり色々遊びましたが、とりあえず

-moz-transition: background-color .6s ease-in;

と末尾に入れてフェードインっぽくアニメーションさせてみました。

Komodo Editが気に入った話

現在は最新がKomodo Edit 7.1.3時点の記事です。
Ver5や6のあたりでは矩形選択や日本語入力関係で不便な挙動をしていましたが7でかなり落ち着いた印象です。

概要

ActiveState社の開発しているIDE
URLは http://www.activestate.com/komodo-edit
Komodo Edit(無料)とKomodo IDE(有料)とOpen Komodoオープンソース・無料)があります。
この記事では基本的にKomodo Editについて書かれています。

乗り換えた理由や乗り換えてから気に入った点

  • ActivePerlやPerlAppでお世話になっていたActiveState製
  • 軽い。文字をタイプしたとき引っかからない

それは当然なんですが、当時のPCで乗り換え前のEclipseでは地球の裏側のマシンをリモート操作してるような感覚でしたので…。

  • 起動や終了が(Restartが苦にならない程度に)速い

Web開発者が使いそうな言語に対応(ただASならFlashDevelop使ってます…)

  • プロジェクトの切り替えペインがある

あっちのソースではどうなってたかなと、見に行く事がよくあります。

  • タブが多くて横幅が収まらない時はホイールでスクロール
  • 矩形選択した状態で複数行に対して同時入力できる
  • CSSなどの色指定の部分でカラーピッカーが使える
  • Mozilla Framework製なのでアドオンなどはFirefoxと同じ感覚で気軽に入れられる

Eclipseではプラグインのバージョン関係で色々苦労しました。

今のところWindowsでしか使っていませんが作業PCのOSが変わっても安心です。

  • 気が向いたらアドオンも自分で作れそう
  • スニペットだけでもTabstopとか、複数箇所の同時入力とか何か楽しいものが作れそう
  • 外部ツールとの連携がしやすい

外部コマンドにキーボードショートカットを与えたり、コマンドの出力を正規表現でパースして一覧にしたりが簡単に行えます。

  • マクロも強力

JavaScriptPythonスクリプトが書けるんですが、エディタの選択範囲からローカルファイルまで幅広く扱えます。


※当時使っていたEclipse(GANYMADE)あたりが比較対象になってますのでKomodo特有の長所とは限りません。


こんな感じで色々な方向の拡張性が提供されていて、ちょっとした自分専用の機能が欲しい時に大抵実現できます。
このあたりも記事にしていきたいと思います。

微妙な点

  • UIは英語のみ

個人的には環境を日本語に限定するのは勿体無いと考えているんですが、ここで対象外にする人も多いと思います。

  • アドオンが本体のバージョンアップに追いついてないのが気になる
  • PHPの構文チェックでPHPバイナリ本体が必要

そして標準ではPHP本体以上のチェックはしれくれない

  • インデント周りの設定がややこしい

グローバル、プロジェクト単位、ファイル形式単位、個別ファイル単位などいろんな場所に設定がありますので一度は悩むことになりそうです。

  • ペインが左・下・右の3つでそれらの中で分割ができない

下段ペインを左右に分けたいところです。

  • 時々コード補完が出ない時がある
  • 部分的に切り出されたSmartyテンプレートでhtml構文エラーの赤線出る


使い方が悪いだけだったり、直ってるのもあるかも知れません。
この記事の大半はVer5.2の頃に書いてたんですが、微妙な点は半減してましたね。
今後も期待できそうです。

PHPのバイナリ文字列表記 (Binary string literal)

マニュアルで公式には書かれていませんが、
PHP5.2.1(?)から以下のような非Unicode文字列であることを明示するリテラル表記とキャスト構文が既に使えるようです。

<?php
$str = b"あああ";
$str = (binary)"あああ";


PHP6での開発の際、上記の記法で全体的に文字列をBinaryで扱うPHP5のスタイルにしておけばPHP6とPHP5の両方で動くスクリプトを書けるという狙いだと思います。


今からこの表記を使う必要は無いと思いますが、
現行のPHP5のスクリプトをPHP6へ移植する可能性がある場合
このあたりに面倒な修正が入ると意識しておけば、いざ移植という時の工数が減らせるかも知れませんね。
(ちなみにPHP本体のテストコードでは既に使われていました)

Perlの__DATA__を使ってテキスト整形作業効率化

Perlではスクリプト中の__DATA__というキーワードの後ろにある文字列をDATAというファイルハンドルから読み出すことができます。
作業用PCにActivePerlを入れて、Copal(http://www.vector.co.jp/soft/win95/util/se106827.html)といったフリーソフトを併用してショートカットで起動するようにしておけば
使い捨てスクリプトをすぐに書ける状態になりますので、
Excelではちょっと面倒な程度のテキスト整形などがさくっと行えるようになります。

ファイル名一覧をリンクに書き換える使い捨てスクリプト

while(<DATA>){
	chomp;
	m!.*/([^.]+)!;
	print qq|<a href="$_">$1</a>\n|;
}
__DATA__
/path/to/file001.html
/path/to/file002.html
/path/to/file003.html

出力は

<a href="/path/to/file001.html">file001</a>
<a href="/path/to/file002.html">file002</a>
<a href="/path/to/file003.html">file003</a>


データをExcelのセルからコピーして来る場合、タブで分割して欲しい列だけスライスてのもよくやるパターンです。

my($id,$name,$type) = (split /\t/)[0,3,5];


当たり前ですが、書いたスクリプトを保存することもできます。
ここがワンライナーと違うところで、使い捨てのつもりが再利用したくなった時シームレスに移行できるのが気に入ってます。


#矩形選択の方が早い場合、別のエディタになるのが残念

単体テストフレームワークの良い所

PHPUnitを使い始めて感動したときの話。
PHPPHPUnitに限らずJUnitなど同類フレームワークに言えることだと思いますが。


使い始めるまではテストケースをコードとして起こさず
手作業orテストコードを作っても1回だけで使い捨てていました。
残してもテスト用のデータを入れるSQLや結果の文書程度です。


「何で面倒なテストにコードまで書かなきゃいけないだ」くらいに考えてました。
それが使ってみるといろいろと良い事が分かったわけです。


その中で最も大きかったのが「楽しい」でした。


元々「コーディングは楽しいがテストは面倒」と思ってたんですが、
テストもコーディングによって行うのであれば確かにモチベーションも下がらないはずです。
本番用コードとテスト用コードそれぞれを作り、戦わせるような感覚があって、どちらが勝ってもそれはそれで楽しめたのでした。

Perlでprintした文字列を変数で受け取る

my $buf = ""; # この変数で受け取る
open VAROUT, ">", \$buf or die $!;
my $oldhandle = select VAROUT;
#----------------------------

# printしたら変数$bufに入る
print "ore";
print "ore";

#----------------------------
select $oldhandle; # 出力先を元に戻す
print "<<$buf>>"; # <<oreore>>と出力される

スカラー変数のリファレンスをopenすることで
出力を変数にリダイレクト(?)することができます。

PHPでのob_start()等のob_*系関数も簡単に再現できます。