: O. Yuanying

TextMateを理解する

オリジナル: Understanding TextMate

あなたがファイルを編集するとき、TextMateは(大体の場合)そのファイルタイプを認識しており、そのファイルに何かを行うための特別なコマンドを提供します。

あなたがHTMLファイルを編集していると仮定しましょう。TextMateはhtml, htm, shtml, xhtml, phtml, php, inc, tmpl, tplといった拡張子によってそのファイルをHTMLファイルであると認識します。さらに、もしそのファイルがHTML DOCTYPE宣言によって始まっていたのならば、同じようにHTMLであると認識するでしょう。

ファイルがHTMLであると認識されると、そのファイルは'HTML Bundle'で定義される'HTML言語構文'に従って、シンタックスハイライトされます。

それではそれらのBundleについて見ていきましょう。

Bundles

Bundleは、ほとんどの場合プログラミング言語によって分類された機能のまとまりです。'Bundle Editor'を開いてみてください、TextMateのメニューにある「Window → Show Bundle Editor」、もしくは⌃⌥⌘Bを押すことで開くことができます。

上の図は'HTML Bundle'中の最初のコマンドを選択した状態のスクリーンショットです。右のテキストフィールド中にあるヘンテコリンなソースコードを見て恐れをなして正気を失わないでください。

左の"HTML"にまとめられているすべてのアイテムはHTMLに固有な機能です。その中にはHTMLタグのドキュメントをウィンドウで開いたり、文字を変換するCommandsや、ファイルや画像をHTMLソース中にドラッグアンドドロップするためのDrag Commandsや、MacrosSnippets(expandable, intelligent Text Blocks)があります。さらにその下には(シンタックスをどのようにハイライトするかや、Commandsに意味情報を提供する) 'HTML言語文法'や、あなたが欲しくなったときにいつでも付け加えることができるPreferencesがあります。一番下には様々なHTMLのバージョンのためのいくつかの異なったテンプレートがあります。

これからいくつか見ていくことによって、これらのBundlesと共にTextMateのパワーを得るでしょう。(訳注: いみわからん。) (I hope, you are still with me. Let’s take a shallow look at the different things so you get a feeling of the power you have on your hands with these Bundles.)

Commands

Commands はシェルスクリプト、すなわち特別なタスクを行うために他のプログラムを呼び出す小さなプログラムです。それらはあなたのドキュメントの一部を変換するのに使われ、書類を呼び出したり、(プログラム言語のために、)ファイルを実行したりします。そして勿論、それらは普通のシェルスクリプトなので、Mac OSXにおいてシェルスクリプトが使えるすべての機能、Bash, Perl, Python, Ruby, PHP, AppleScript そしてUNIX由来のgrep, wc... などを利用することができます。

Snippets

Snippets は強力で知的なテキストブロックです。

Snippetは、挿入するコード、変数(選択されたテキストのような)、欠けている情報のためのプレースホルダ(挿入時に入力することができる)を含んでおり、プレースホルダに入力したデータを変換することもできます。

-- マニュアルより

いくつかの簡単な例を見てみましょう。

1. 純粋なテキスト

<br>

これは基本的にあなたが目にする一番単純なSnippetです。このSnippetはHTMLドキュメント中で⌃↩ (Control-Return)に結びつけられています。試してみましょう!HTMLファイル中で⌃↩ (Control-Return)とタイプすると<br />が挿入されます。

2. (デフォルト値と)プレースホルダを持ったテキスト

<meta name="${1:name}" content="${2:content}" />

これはとても基本的なSnippetです。それはほぼそのままであなたのファイルの中に挿入されるでしょう。${1:name}${2:content}という特別なシークエンスに注意してください。これがプレースホルダです。このsnppetを(metaとタイプして⇥ (タブキー)を押すことによって)呼び出すとプレースホルダ1中の'name'が選択された状態で、<meta name="name" content="content" />とファイルに挿入されるでしょう。この状態であなたは選択された文字を上書きすることにより変更することができます。また、⇥ (タブキー)を押すことにより次のプレースホルダ、content属性の値の位置に移動することができます。文字をタイプして再び⇥ (タブキー)を押すと、このsnippetから出てファイルを編集し続けることができます。複雑ですか?実際に試してみましょう、とても簡単ですぐにこれを好きになるでしょう。

これであなたも始めることができるでしょう。さらに詳細を知りたければマニュアルをチェックしましょう。

Macros

Macros は記録されたキーストロークやコマンドの呼び出しです。これらはAutomationメニューから記録したり保存することができます。

'HTML Bundle'中では“Forward Delete All Whitespace”というマクロがあります。これは正規表現を用いて現在のキャレット位置から検索を実行し、すべてのホワイトスペース(スペース、タブ文字、改行文字)を次のホワイトスペースではない文字が現れるまで選択し削除します。⌃⌥⌦ (Control-Option-Delete)と押すとこのマクロを呼び出すことができます。

マニュアルにはマクロに関するセクションがあります。

Languages

Languages (言語文法) は、正規表現が複雑にネストした規則です。 私たちはこのチュートリアルでその表面さえ知ることはできないけれども、スコープ(Scopes)の存在については知るべきである。

Scopesは言語文法によって定義され、「あなたの言語のシンタックスのためのマーク付け」か、文脈であると考えられます。CSSのセレクタに非常によく似ています。HTMLファイルの例で言うと、まずこのファイルのすべてはtext.htmlというスコープにあります。つぎに<div>のようなHTMLタグはmeta.tag.htmlというスコープを持ち、また'div'といった名前のために entity.name.tag.htmlというスコープを持ちます。それらのスコープはネストし、互いに上書きします。なぜこんな詳細まで立ち入って苦しませるんだと言うかもしれません。これらのスコープはどこにでもあります。これらはTheming system?の基盤なのです。スコープはCommandやSnippetやMacroがどこで利用可能なのかを定義します。(あなたは多分'Bundle Editor'の下部に'Scope Selector'というテキストフィールドを見たと思います。) 例えば、あなたはあるCommandをtext.htmlスコープにセットすることでHTMLファイルのみで働くようにすることができます。

The Manual says this about Language Grammars) and there is the explanation about Scopes as a Blog Entry and the Manual Chapter about Scopes.

Preference Items

Preference Items store several, well, Preferences. 注目すべき点は、

  • "smartTypingPairs" - これらは文字のペアを定義します。二つめの文字は一つめの文字をタイプしたときに自動的に挿入されます。たとえば " (double quote)を試してみましょう。そして次は、文字を選択した後にもう一度試してみましょう(文字を選択した後に"をタイプする)。この機能は時間を節約すると共に、文字の閉じ忘れを防ぐのに役立ちます。
  • "shellVariables" - これは、ある特定の文脈の中でCommandが利用できるシェル変数を定義します。これは例えば"Comment Line / Selection" Commandのために試用されます。(後ほど説明します。)

より深く知るためにはマニュアルのPreference Itemsの章を参照してください。

Templates

テンプレートは実際の新しいファイルと、一般に新しいファイルが生成されるテンプレートファイルを生成する(シェル)コマンドからなっています。— マニュアルより

Special Bundles

注意:“Text” と “Source” Bundles は、他のほとんどのBundleをのための基礎を定義します。 これらをdeactivateするべきではありません。

今のところの結論

I know this must have been a rough ride until now – but you will thank me at some point for the insight you have gained about the Bundles I think. TextMate は 1000% 適応可能で拡張可能です、- 1000%という数は誇張ではありません。私やあなたといったユーザによってほとんど書かれているこれらのbundleなしでは、TextMateは1/10の力も出せないでしょう。

そして今、楽しみのために私たちはすべてのパワーを使うことができるのです。