SciTEカスタマイズメモ

SciTEをカスタマイズする方法をメモします。
SciTEは各コンフィグファイルをいじることでキーワードの強調表示やオートコンプリートなどプログラミングに役立つ機能を使える素敵なテキストエディタです。以下各種ファイルについて適当にメモします。

SciTEGlobal.properties

概要

SciTE全般の設定を定義。

日本語表示設定

SciTEでは設定を変更しない限り日本語は文字化を起こす。SciTEGlobal.propertiesを開き「# code.page=932」「# character.set=128」の#を取り除く。これで日本語が表示される。(ただしカーソルの移動・削除は1byteごとに動作するため、編集の際は注意)

<言語名>.properties ファイル:

概要

言語のスタイルを定義する。その言語が読み込まれた際の表示、また動作を定義。

読み込み

GrepでSciTEのホームディレクトリをみた感じでは、これらのpropertyファイルは、SciTEが起動時にホームディレクトリを動的にシークする様子。どこかに読み込みが定義されているわけではなさそう。(不確か)

オートコンプリートの設定

以下の設定をpropertyファイルに追加することで言語のオートコンプリートを有効化できる。

  • extension.$(file.patterns.<言語名>)=$(SciteDefaultHome)/.lua
    • エディタの動作をカスタマイズするLuaファイルの読み込みを行なう。
  • api.$(file.patterns.<言語名>)=$(SciteDefaultHome)/.api
    • オートコンプリート用のキーワードリストであるapiファイルの読み込みを行なう。
  • autocomplete.<言語名>.ignorecase=1
    • オートコンプリート時に大文字小文字を無視する。
  • autocomplete.<言語名>.start.characters=$(chars.alpha)$(chars.numeric)
    • 特定の文字が入力された際にオートコンプリートを自動表示する設定。文字のセットをあらかじめGlobalPropertiesファイルに定義しておくことで、セットに対する指定も可能。標準では以下が設定されている。
      • $(chars.alpha) : アルファベット
      • $(chars.numeric) : 数字
      • $(chars.accented) : 不明(文字化けを起こしているので日本語・英語とは縁がなさそうだ)
    • なお当プロパティが設定されていない場合、「Ctrl+Space」が押された際にオートコンプリートを表示する。

<言語名>.lua ファイル:

概要

propertyファイルによって呼び出される。主にはユーザがキーが押されたときの動作を定義。function OnChar(c)というコールバック関数が各キーの押下ごとに呼び出されるため、ここにインデントやオートコンプリートの動作を設定できる。

読み込み

対象言語のpropertyファイルに以下を追加。
extension.$(file.patterns.<言語名>)=$(SciteDefaultHome)/.lua

文法

文法はLuaに準拠。ここではとても解説などできないが、プログラミング基礎さえしってりゃ何とかなるはず。

関数

動作指定に使えそうなプロパティ、関数をあくまでメモ程度にリストアップする。より詳細な解説はここを参照

  • editor.CurrentPos
    • エディタの現在の入力カーソル位置を返すプロパティ。
  • editor.TabWidth
    • エディタに設定されているタブの幅を返すプロパティ。
  • editor:AutoCActive()
    • エディタがオートコンプリートを表示していた場合1を返す。
  • editor:AutoCCancel()
    • エディタのオートコンプリートを隠す。
  • editor:InsertText(位置, 文字列)
    • 指定された位置に対し文字列を挿入。
  • editor:GotoPos(位置)
    • 指定された位置へ入力カーソルを移動。
  • editor.LineIndentation[editor:LineFromPosition(位置)]
    • 指定された位置のインデントのサイズを取得する。
  • editor.StyleAt[位置]
    • 指定された位置のスタイルを取得する。スタイルはpropertyファイルで定義されている値で、言語によってその定義は異なる。XMLの開始タグ直後の文字列を例に取るならば、このスタイルは標準では「1」である。「editor.StyleAt[editor.CurrentPos-1]」のように指定した場合、入力カーソル直前の文字のスタイルを取得できる。
  • editor.CharAt[位置]
    • 指定された位置のキャラクターコードを返す。キャラクターコードなので「string.find(editor.CharAt[editor.CurrentPos-1],"p")」のようにしても「p」という文字にはマッチしない。

少しだけLuaについても…

  • string.find(被検索文字列,検索文字列)
    • 検索文字列が被検索文字列に含まれていた場合1を返す。検索対照文字列には特定のパターンを指定できる。以下に幾つかその例を示す。詳細はLuaのマニュアル5.4.1章 Patternsを参考。
      • %a: 全ての文字列
      • %s: 全ての空白文字
      • %w: 全ての英数文字
  • print(<出力対象>)
    • 指定された値を出力ウィンドウに表示する。特定個所のスタイルを調べたい場合など「print(editorStyleAt[editor.CurrentPos-1])」のようにして利用できる。

<言語名>.api ファイル:

概要

各言語のオートコンプリート用の定義ファイル。

読み込み

対象言語のpropertyファイルに以下を追加。
api.$(file.patterns.<言語名>)=$(SciteDefaultHome)/.api

文法

<オートコンプリート用の文字列><スペース>(<引数情報>)<スペース>概略<改行>
例:type (v) returns type of v as a string

備考

各ブロックのセパレータの定義方法は不明。固定で「(」と「)」の文字を持っているのか??

<言語名>.keywords.properties ファイル:

概要

スタイルを決定するために使われるキーワードリスト。使ったことが無いのでよく判らない。

備考

文中の<言語名>という記述について

文中<言語名>は厳密なところ言語名である必要は無い。batchファイルのapiファイル名を「yaranaika.api」と名づけたところで、propertyファイルからそのapiファイル名を指定さえしてやれば正常に動作する。はず。ただ結局のところいろんなところで整合性を取ってやるのが面倒なので言語名で統一するのが無難。