FlashDevelop x Emacs

2011.10.11kickbaseFlashDevelop


FlashDevelopが好きです。軽快な動作、柔軟なカスタマイズ性、何よりActionScriptに特化したチューニングが、多くのFlasherに選ばれるゆえんでしょう。しかし僕はEmacsユーザでもあるので、「単純に文字を入力する」という点においては、Emacsに軍配が上がるというのが正直な感想です。ならば、FlashDevelopをEmacsキーバインドで使えばいいということで、XKeymacsを導入してみました。

なお、本記事はWindows7 64bit/FlashDevelop3.3.4RTM/XKeymacs ver.4(110830)を元に記載されてます。また、XKeymacs/FlashDevelopのキーバインドは僕個人の好みによって設定しています。試される場合は、ご自由に組み合わせてみてください。
※これらの操作を行う場合、全て自己責任でお願いします

本記事ではCtrlキーをC、AltキーをM、ShiftをSと表記し、2ストロークキーバインドは半スペース区切りで表記しています。

01 : XKeymacsをインストール
XKeymacsはEmacsライクなキーバインドを設定できるユーティリティソフトです。各アプリケーションごとに使用/不使用の設定からキーバインドの変更まで行えます。インストールは簡単です。ダウンロード – XKeymacs – SourceForge.JPより本体をダウンロード&解凍、中に入っているReadme_J.txtの通りに進めます。ポイントとして64bitOSの場合はMicrosoft Visual C++ 2010 再頒布可能パッケージ (x86)と(x64)の両方をインストールする必要があります。

02 : XKeymacsの設定

▼基本設定
FlashDevelopで上手く動かない機能や、バッティングするキーバインド、使用頻度の低いもののチェックを外していきます。特に重要なのは移動系のキーバインドですので、これは全てオンにしています。

下記がポイントとなります

  • C-kはFlashDevelop側で設定するのでオフに
  • C-qの機能を変更(デフォルトではXKeymacsの有効/無効切り替え)※後述
  • ▼Redo
    次にRedoの設定です。FlashDevelopのデフォルトではリドゥはC-yとなっていますが、ヤンク(ペースト)とバッティングするため変更します。僕はEmacsの設定ではアンドゥをC-/に、リドゥをC-M-/に割り当てているので、同じ設定にしました。(ちなみにEmacsではRedo+.elを入れています)

    ▼Enable or Disable XKeymacs
    慣れ親しんだFlashDevelopのキーバインドも即座に使えるよう、XKeymacsの有効/無効の切り替え設定をしておきます。ここではC-Tabとしました。

    ▼Escape key(C-q)
    上記Enable or Disable XKeymacsではトグルキーを入力するまで有効/無効が切り替わりません。XKeymacsは有効のまま、一回だけコマンドを直接FlashDevelopに送れるように、C-qにTemporary Disable XKeymacsを割り当てます。 

    この設定をすることで、リージョン選択開始に奪われてしまっていた補完リストの表示(C-SPACE)などの機能をXKeymacsを無効にすることなく使用できます。
    例 : C-q C-SPACEで補完リスト表示

    03 : FlashDevelopの設定

    下記ディレクトリにある設定ファイル(MainMenu.xml)を編集します。変更したところは3点のみです。

    C:\Program Files (x86)\FlashDevelop\Settings\MainMenu.xml

    Ctrlとメタキー(Alt)の同時押しが上手く認識されないようだったので、前述のXKeymacs側の設定で対応しています

    <button label="Label.Redo" click="ScintillaCommand" tag="Redo" keytext="Control|Alt|\" image="65" flags="Enable:IsEditable|CanRedo"  /> <!-- C-yから変更/最終的にXkeymacs側で対応 -->
    

    カーソルから行末までカット。FlashDevelopのLineCutはEmacsの挙動とは異なるので、詳細は後述します

    <button label="Label.CutLine" click="ScintillaCommand" tag="LineCut" shortcut="Control|K" flags="Enable:IsEditable" /> <!-- C-Shift-xから変更 -->
    

    スニペット呼び出し。※EmacsではC-jにZenCodingを割り当てています

    <button label="Label.Snippet" click="InsertSnippet" shortcut="Control|J" tag="null" flags="Enable:IsEditable" /> <!-- C-bから変更-->
    

    上記で設定したスニペット呼び出し(C-j)はタイプエクスプローラーウィンドウの表示とバッティングしています。これを解除しましょう。
    ツール>環境設定>ASCompletionのProject TYpes Explorerのショートカットをクリアします。

    [ 重要 ]
    MainMenu.xmlを修正後、変更が更新されないというケースがあるようです(僕の環境でも起こりました)。下記手順で解決できました。

  • Program Files の MainMenu.xml を削除
  • FlashDevelop を起動、「MainMenu.xmlがないというエラー」を表示させ、一旦終了
  • 変更後のMainMenu.xmlを Program Files に置き、FlashDevelopを再起動する
  • 04 : 挙動の確認

    ▼カーソル位置がこの状態で下記コマンドを試してみます

    ▼C-a ; Emacsでは「行頭まで移動」ですが、FlashDevelopではインデントまで移動します。その後C-aを押す度に行頭とインデントを交互に移動します。

    ▼C-k
    Emacsでは「カーソルから行末までカット」ですが、FlashDevelopではカーソルがある行を丸ごと1行カットになります。

    ▼C-S-1 : 言わずと知れたメソッドのジェネレートキーですが、この選択候補が表示された状態でも、C-n/C-pで上下に候補を移動、C-mで確定することができます。唯一の難点は、Ctrlキーを押したときにプルダウンメニューが一時非表示になってしまうこと。これがなければ完璧なんですが、設定法が分かりませんでした。

    XKeymacsは非常に優れたユーティリティソフトだと思うので、もっとうまい使い方もあると思います。使い慣れたツールを自分なりにカスタマイズして、よりストレスのない開発環境を作ってください。

    参考サイト

    FlashDevelopのキーバインド変更 – tetu1984の日記
    FlashDevelop で Emacs キーバインド実現 – 続・教えて!Turing先生
    馬鹿全 – FlashDevelop 3.1.0 RTM リリース


    ページトップへ