site top fluxbox tips contact blog

Okumatsu_Hiroshi Website

last update 2010/10/8

SciTEを使おう

テキストエディタ SciTE の使い方





SciTEは私が一番気に入っているテキストエディタで、主に HTML や Ruby、シェルスクリプトなどの編集に使っています。

ほとんどのプログラム言語に対応した構文解析と、オートコンプリートの機能が優れています。 その他、シンタックスハイライトの色使いがすっきりしていて、細かいところまでカスタマイズできるのが好きです。

このページを書くにあたって、以下のサイトを参考にさせていただきました。

SciTEはクロスプラットフォームのエディタで、Windows でよく使われています。上記の鈴見咲君高氏のサイトも、Windows 向けの内容になっています。

ですが、このページはLinux(Ubuntu)上での設定に限った内容になっています。

Windows と Linux では設定の仕方が若干違う部分があります。私の理解の浅さから、間違っている ところも多々あると思いますが、ご容赦ください。

以下で基本的なものに限って設定の仕方を紹介したいと思いますが、もっと詳しい設定方法を知りたい方は、 上記の二つのリンクが役に立つと思います。

SciTEをインストールする

Ubuntuの場合は Synaptic を使ってインストールすることができます。現在(Ubuntu-10.04)でのバージョンは SciTE-2.03 となっています。 これをインストールするのが一番簡単だと思います。

公式サイトから最新バージョンをダウンロードしてインストールするには、

www.scintilla.org

から、Linux用の SciTE-2.12(2010年6月時点の最新バージョン)のソースコードをダウンロードします。

パッケージを展開(解凍)したら、ターミナルから以下のようにしてインストールします。

$ cd scintilla/gtk
$ make
$ cd ../..
$ cd scite/gtk
$ make
$ sudo make install

この様にすると、実行ファイルは /usr/bin/SciTE に、設定ファイルが /usr/share/scite にインストール されます。

{注! Synapticでインストールした場合、実行ファイルは /usr/bin/scite ですが、 最新バージョンをソースからインストールした場合、/usr/bin/SciTE となります。実行ファイル名が違いますので注意してください。}

SciTEの設定ファイルについて

SciTEの設定は、テキストファイルを編集して行いますが、設定ファイルは以下のものがあります。

  • 基本的な設定ファイル
    • SciTEGlobal.properties - すべてのユーザーに共通の設定ファイルで、上記の通りインストールしていれば、/usr/share/scite にあるはずです。
    • ~/.SciTEUser.properties - ユーザーの設定ファイル。ホームディレクトリに隠しファイルとして置きます。

{注: Windows と違い、Unixではホームディレクトリ以外のファイルを編集するには「スーパー(root) ユーザー」にならなくてはなりません。ですから、設定を変更するときは「SciTEGlobal.properties」には手をつけずに、「.SciTEUser.properties」を 編集するようにした方がいいと思います。言語毎の設定ファイルの変更も、「.SciTEUser.properties」に書き込めば設定が上書きされます。}

  • その他の設定ファイル
    • SciTE.properties - 編集しているファイルのディレクトリに置かれる設定ファイル。そのディレクトリ内だけの設定ができます。
    • abbrev.properties - 略語定義のユーザー設定ファイル。ホームディレクトリに置きます。
    • locale.properties - メニューやダイアログなどの翻訳ファイル。基本的には /usr/share/scite に置きます。
    • その他、言語毎の *.properties ファイルが /usr/share/scite 内にあり、また、言語ごとに「略語定義ファイル」 、「apiファイル」を作ることができます。

SciTEの設定ファイルは数が多く、かなり細かいところまでカスタマイズできますが、すべてテキストファイルを編集することになるので、 一度に覚えるのはむずかしいと思います。

使いながら少しずつ覚えていけばいいでしょう。

以下で私の知る限りの解説をしたいと思います。

ロケール(日本語入力)の設定

SciTEはデフォルトでは日本語の表示と入力ができませんので、まずロケールの設定をしましょう。

ホームディレクトリに .SciTEUser.properties という隠しファイルを作ります。

メニューから Option > Open User Options File を開いて編集することもできます。

以下のように付け加えてください。

code.page=65001
character.set=128

この設定は、編集のエンコードをUTF-8にし、日本語を扱えるようにします。

その他のエンコードの設定は以下を参考にしてください。

Code pageValue
Default(single byte charecter set)0
UTF-865001
Japanese Shift-JIS932
Simplified Chinese GBK936
Traditional Chinese Big5950

文字セットの設定値は以下のものがあります

Character setValue
Default0
Japanese128
Chinese GB2312134
Chinese BIG5136
Korean129
Greek161
Eastern European238
Hebrew177
Arabic178
Cyrillic(KOI8-R on GTK+)204
Cyrillic(CP1251 on GTK+)1251
European with Euro(ISO 8859-15)1000

日本語メニューを設定

SciTEのメニューは英語ですが、locale.properties を設定することで、日本語メニューにすることができます。

以下のファイルを解凍して /usr/share/scite内に置けばOKです。

locale_properties.tar.gz (バージョン2.21)

このファイルは、上記リンクの鈴見咲君高氏作成のものを参考にさせていただき、訳文を私なりに変更しました。

locale.propertiesについて

.SciTEUser.properties に以下のように書くことで、locale.properties をホームディレクトリに置くこともできます。

locale.properties=/home/hiroshi/.scite/locale.properties

また、以下のようにすると

locale.properties=locale.en.properties

ユーザーごとにロケールを変更することも可能です。

フォントの設定

フォントの設定は簡単です。

SciTEのメニューから「SciTEGlobal.properties(共有設定ファイル)」を開き、以下の部分をコピーします。

if PLAT_GTK
  font.base=font:!Bitstream Vera Sans,size:9
  font.small=font:!Bitstream Vera Sans,size:8
  font.comment=font:!Bitstream Vera Serif,size:9
  font.code.comment.box=$(font.comment)
  font.code.comment.line=$(font.comment)
  font.code.comment.doc=$(font.comment)
  font.code.comment.nested=$(font.comment)
  font.text=font:!Bitstream Charter,size:10
  font.text.comment=font:!Serif,size:9
  font.embedded.base=font:!Serif,size:9
  font.embedded.comment=font:!Serif,size:9
  font.monospace=font:!Bitstream Vera Sans Mono,size:9
  font.vbs=font:!Bitstream Vera Sans Mono,size:9

Linux だけで使うのであれば、if PLAT_GTK というのは必要ありません。

これを ~/.SciTEUser.properties に張り付け、フォント名を変更すればOKです。

ちなみに、欧文フォントを指定しても日本語部分は標準の日本語フォント(Sans-Serif または Serif)で表示されますので ご心配なく。

{注! フォント名の前に ! をつけるのを忘れないように。}

ヘルプファイルの設定

メニューのヘルプから表示する URL と プログラムを指定します。

# 例えば、ruby のマニュアルをブラウザで開く場合
command.help.*=firefox "http://www.ruby-lang.org/ja/man/"
# ホームディレクトリのファイルを指定する場合
command.scite.help=firefox "file:///home/${USER}/.scite/SciTEDocJa/SciTEDoc.html"

ウインドウ表示設定

起動時のウインドウの大きさと位置を指定する

~/.SciTEUser.properties に以下のように追加します。

position.left=300
position.top=200
position.width=650
position.height=400

left, top は表示位置、width, height はウインドウの大きさを決定します。


出力ウインドウの設定

編集しているスクリプトなどを実行した場合、出力ウインドウに結果が表示されますが、その表示設定です。

split.vertical=0            # この値を1にするとウインドウを縦に分割します
output.horizontal.size=200  # 縦に分割したときの出力部のサイズ
output.vertical.size=130    # 横に分割したときの出力部のサイズ
output.initial.hide=1       # 0に設定すると起動時に出力部を表示します
output.magnification=-1     # 出力部の拡大率を指定します

タブバーの設定

複数のファイルを開くとき、それぞれのバッファがタブで表示されますが、それに関する設定です。

tabbar.visible=1      # 0にするとタブバーが表示されません
tabbar.hide.one=0     # 1にすると開いているファイルが一つの時にタブバーを隠します
tabbar.multiline=1    # たくさんのタブを開いているときに多段表示にしますが、Linuxでは無効のようです

ツールバー、ステータスバーの設定

toolbar.visible=0         # 1にすると起動時にツールバーを表示します
toolbar.usestockicons=0   # 1にするとツールバーのアイコンにGTKテーマのアイコンを使います
statusbar.visible=1       # 1にすると起動時にステータスバーを表示します

その他の表示設定

line.margin.visible=1           # 行番号を表示
line.margin.width=3+            # 行番号表示欄の幅
view.whitespace=1               # 空白文字の表示
view.indentation.whitespace=0   # インデント部分の空白を表示するかどうか
view.indentation.guides=1       # 1にするとインデントにカイド線を引きます

インデントの設定

tabsize=2               # タブ幅を指定
indent.size=2           # インデントのサイズを指定
use.tabs=0              # タブ文字を使用するかどうか
indent.auto=1           # 開いたファイルのタイプによってインデント設定を自動切換
indent.automatic=1      # 自動的にインデントを行う
backspace.unindents=2   # バックスペースで指定幅だけインデントを削除

折り返しの設定

wrap=0                      # 1にするとウインドウの右端で折り返す
wrap.style=1                # 2にすると単語単位で折り返す
wrap.visual.startindent=2   # 指定幅だけ折り返しをインデント
wrap.visual.flags=3         # 折り返しに目印をつける

折りたたみの設定

fold=1                # 折りたたみを有効にします
fold.symbols=2        # 折りたたみの目印のスタイル
fold.on.open=0        # 1にすると折りたたんだ状態で起動

その他の設定

buffers=20                        # 一度に開けるバッファの数を指定
quit.on.close.last=1              # 最後のタブを閉じたらSciTEを終了
save.on.deactivate=1              # ウインドウがアクティブでなくなったら保存する
title.full.path=1                 # ファイルのフルパスをタイトルに表示
save.recent=1                     # 最近開いたファイルを記憶する
save.session=1                    # 終了時にセッションを保存する
session.bookmarks=1               # 終了時にブックマークを保存する
session.folds=1                   # 終了時に折りたたみを保存する
strip.trailing.spaces=1           # 保存時に行末の空白文字を削除する

この他にもたくさんの設定項目がありますが、紹介しきれませんので、SciTEのドキュメントを読むことを おすすめします。ヘルプ > SciTEドキュメント を開くと見ることができます。(英語ですが)

英語が苦手という方は、上記の鈴見咲君高氏のサイトに、SciTEドキュメントの日本語訳があります。

参考までに、私の SciTEUser.properties を置いておきます。

SciTEUser_properties.tar.gz




オートコンプリート(自動補完)

オートコンプリートはスクリプトなどを編集するときに、単語や識別子などを自動で補完してくれる機能で、これがあるとスペル ミスも減りますし、非常に便利なものです。

メソッドに関する簡単な説明を表示する「コールチップ」の機能もあります。

scite_auto_complete.png

これはオートコンプリートを実行したところです。

コールチップは以下のようなものです。

scite_calltip.png


基本的な単語補完は、現在編集中のファイルにある単語を読み込んで、マッチしたものをリスト表示します。

それは以下の設定をすれば有効になります。

autocompleteword.automatic=1      # ファイル内に一致する単語があれば一覧を表示する
autocomplete.*.ignorecase=0       # 1にすると大文字小文字を区別しない
autocomplete.*.start.characters=$(chars.alpha)$(chars.numeric)  # 自動補完を開始する文字
autocomplete.choose.single=1      # 一致する単語が一つの時、リストを表示せずに単語を挿入
autocomplete.*.fillups=(          # この文字を入力した時点でマッチしている単語を挿入

特定のプログラミング言語のキーワード補完をするには、api ファイルが必要になります。

api ファイルといってもなんのことやら分からん、とお思いでしょうが、実はただのテキストファイルです。 例えば、Rubyの api ファイルを、私は以下のように記述しています。

chomp() 改行を取り除く
chomp!() 改行を取り除く
chop() 文字列の最後の文字を取り除く
chop!() 文字列の最後の文字を取り除く
gsub(pattern, replace) {|matched| ... } 文字列中でpatternにマッチする部分全てをreplaceで置き換える
sub(pattern, replace) {|matched| ... } 文字列中でpatternに最初にマッチする部分をreplaceで置き換える

キーワードの自動補完と、コールチップの区切りになるのは、'('(左括弧)です。 キーワード補完でリストが表示されて単語がマッチした時、左括弧を入力すると、マッチした単語が挿入され、コールチップが表示されます。

コールチップが必要ないときは、タブキーを押せば単語が挿入されます。

scite_calltip_2.png

こんな感じです。

コールチップに関する設定は以下のようにしています。

# 共通の設定
calltip.*.word.characters=_$(chars.alpha)$(chars.numeric)
                                    => 単語の一部として認識する文字を指定
calltip.*.parameters.start=(        => これをきっかけにしてコールチップを表示
calltip.*.parameters.end=)          => コールチップを終了する
calltip.*.parameters.separators=,   => コールチップ内の引数の区切り文字
calltip.*.end.definition=)          => この文字以降を説明文とする
calltip.*.ignorecase=1              => 大文字小文字を区別するかどうか
# Rubyの設定
word.characters.ruby=_?!.:=$(chars.alpha)$(chars.numeric)
calltip.ruby.word.characters=_?!:-=$(chars.alpha)$(chars.numeric)

以上の設定は、変数名をどんな名前にしてもメソッド名が自動補完されますので便利な反面、メソッド名が複数のクラス に共通している場合は使いにくい場合もあります。


クラスによって使う変数名を決めてしまう

例えば、文字列の場合は変数名を string に統一する、と決めてしまえば、ある意味では使いやすくなります。

Rubyの場合、以下の部分の設定を変更します。

autocomplete.ruby.start.characters=.$(chars.alpha)$(chars.numeric)   => ピリオドを追加
calltip.ruby.word.characters=._?!:-=$(chars.alpha)$(chars.numeric)    => 同じくピリオドを追加

それから、api ファイルの書き方を以下のようにします。

string.chomp() 改行を取り除く
string.chomp!() 改行を取り除く
string.chop() 文字列の最後の文字を取り除く
string.chop!() 文字列の最後の文字を取り除く
string.gsub(pattern, replace) {|matched| ... } 文字列中でpatternにマッチする部分全てをreplaceで置き換える
string.sub(pattern, replace) {|matched| ... } 文字列中でpatternに最初にマッチする部分をreplaceで置き換える

この様にすると、キーボードから string. と入力した時点で、自動補完の 候補には文字列(String)クラスのメソッドしか表示されなくなります。

scite_calltip_3.png

これは便利なんですが、変数名を別のものにすると一切リストが表示されなくなりますので、ある意味では 非常に不自由です。

どちらにしても一長一短なので、これは使う人の好みになるでしょう。


まだ未完成なものですが、参考までに私が作ったRuby用のapiファイルを二種類置いておきます。

ruby_api.tar.gz

ruby_api2.tar.gz

また、以下にいくつかのapiファイルがあります。

scite-interest extras

www.koders.com

略語定義と展開のしかた

略語(abbreviation)というのは、Gedit や Vim のプラグインにあるスニペット(snippet)と呼ばれるものと 同じで、設定ファイルにアルファベット32文字までの略語とそれに対応する文字列やコードを定義しておき、略語を入力したときに ショートカットキーの操作で定義した文字列を挿入できる、という便利な機能です。例えば、

div=<div class="|" id="">\n\n</div>

この様に設定ファイルに定義しておくと、div と略語を入力して Ctrl + Bを押すだけで

<div class="|" id="">

</div>

この様にコードが挿入されます。

いくつか約束事があって、略語には =(イコール)は使えません。また、先頭の文字に #(シャープ)や空白、タブ文字が使えません。 空白を途中に挟むことは可能です。アルファベット32文字が上限です。

\n は改行を、| はキャレット(カーソル)位置を意味します。| を文字として表すときは、|| とします。


abbrev.properties というのが共通の定義ファイルです。言語ごとの定義ファイルを設定することもできます。その場合、例えば html_abbrev.properties という定義ファイルを適当な場所に用意し、SciTEUser.properties に以下のように設定します。

abbreviations.*.html=$(SciteUserHome)/.scite/html_abbrev.properties

これで、HTMLファイルを編集するときだけ、この定義ファイルが有効になります。

参考までに、私の使っているHTMLの定義ファイルを置いておきます。

html_abbrev_properties.tar.gz

略語ファイルというのは、略語を覚えなければ使えない、という前提がありますので、人が作ったものは基本的に「使いにくい」 はずです。自分のよく使うコードをその都度登録していくのが一番いいと思います。

ユーザー定義のキー設定

Vimなどのキー操作に馴染むと、SciTEのようなエディタでカーソル移動するときに思わず h, j, k, l の キーを押してしまうことがよくあります。こんな時に矢印キーを使うのはとてもまだるっこしい。

SciTEには、Vimのようにコマンドモードやインサートモードなどの切り替えが出来ないので、代わりに Controlキーを使って 似たようなキー操作ができるようにします。

以下のページに、キー操作で利用できるコマンドが一覧になっています。

SciTE menu commands

これを利用して、キーにコマンドを割り当てることができます。

SciTEUser.properties を開き、以下のように編集します。

# ユーザー定義キーコマンド
user.shortcuts=\
Ctrl+h|2304|\               => カーソルを左へ移動
Ctrl+Alt+h|2305|\           => カーソルの左の文字を選択
Ctrl+l|2306|\               => カーソルを右へ移動
Ctrl+Alt+l|2307|\           => カーソルの右の文字を選択
Ctrl+k|2302|\               => カーソルを上に移動
Ctrl+Alt+k|2303|\           => カーソルの上に向かって一行選択
Ctrl+j|2300|\               => カーソルを下に移動
Ctrl+Alt+j|2301|\           => カーソルの下に向かって一行選択
Ctrl+y|2455|\               => カーソル行をコピー
Ctrl+d|2337|\               => カーソル行を切り取り
Ctrl+p|IDM_PASTE|\          => カーソル位置に張り付け
Ctrl+r|2312|\               => カーソルを行頭に移動
Ctrl+Alt+r|2313|\           => カーソル位置から行頭まで選択
Ctrl+e|2314|\               => カーソルを行末に移動
Ctrl+Alt+e|2315|\           => カーソル位置から行末まで選択
Ctrl+u|IDM_UNDO|\           => 元に戻す
Ctrl+t|IDM_EXPAND|\         => 折りたたみの切り替え
Ctrl+o|IDM_REPLACE|\        => 置き換えダイアログ表示
Ctrl+f|IDM_FIND|\           => 検索ダイアログ表示
Ctrl+n|IDM_FINDNEXT|\       => 次を検索
Ctrl+b|IDM_FINDNEXTBACK|\   => 前を検索
Ctrl+m|IDM_ABBREV|\         => 略語を展開
Ctrl+,|2305|\               => カーソル左の文字を選択
Ctrl+.|2307|                => カーソル右の文字を選択
# 実際にはコマンドの後ろにコメントを入れてはいけません

これはあくまで参考にしてください。自分が使いやすいようにするのが一番です。




fluxboxスタイル用のapiファイルと設定

fluxboxのスタイルファイル - theme.cfg を編集するのに、SciTEの apiファイルがあればいいなと思って、 ちょっと作ってみました。

また、色の名前を選ぶ時に便利なように /etc/X11/rgb.txt も apiファイルにしてみました。

fluxbox_style_api.tar.gz
rgb_api.tar.gz

これを使えるようにするには、以下のようなファイルを作って、

# Define SciTE settings for fluxbox theme.cfg files.

file.patterns.cfg=*.cfg
filter.cfg=Cfg (cfg)|$(file.patterns.cfg)|
lexer.$(file.patterns.cfg)=props

autocomplete.props.start.characters=.*$(chars.alpha)$(chars.numeric)
autocomplete.props.fillups=:
autocomplete.props.ignorecase=0
calltip.props.word.characters=.*#$(chars.alpha)$(chars.numeric)
calltip.props.parameters.start=:
calltip.props.parameters.end=>
calltip.props.end.definition=
calltip.props.ignorecase=0

api.$(file.patterns.cfg)=$(SciTEDefaultHome)/fluxbox_style.api;$(SciTEDefaultHome)/rgb.api

cfg.properties と名前をつけて /usr/share/scite の中に置いてください。

api ファイルも同様に /usr/share/scite に置きます。

さらに、SciTEGlobal.properties を管理者権限で開き、

$ sudo gedit /usr/share/scite/SciTEGlobal.properties

550行目位にある import セクションに

import cfg

と、追加してください。

scite を再起動すれば、オートコンプリートとコールチップが使えるようになります。