ラベル Sublime Text 2 の投稿を表示しています。 すべての投稿を表示
ラベル Sublime Text 2 の投稿を表示しています。 すべての投稿を表示

2013年12月19日木曜日

Sublime Text 2 のプラグインで Toggle Comment を実装する

1. AAAPackageDev を Sublime Text に入れる

2. Package を作成する

作成する Syntax Definition に対応するパッケージがない場合は

[Tools] - [Packages] - [Package Development] - [New Packages...]

を選択し、パッケージ名を入力して Enter を押す



3. Comments Definition を作成する
  • <lang_name>.JSON-tmPreferences というファイル名で Packages/User フォルダーか、対応するパッケージフォルダに保存する { "name": "Comments", "scope": "source.ts", "settings": { "shellVariables" : [ { "name": "TM_COMMENT_START", "value": "// " }, { "name": "TM_COMMENT_START_2", "value": "/*" }, { "name": "TM_COMMENT_END_2", "value": "*/" } ] }, "uuid": "38232be9-44f1-49fd-91d4-85f5884fb298" }
  • "name" : "Comments" にする(別でもいいような気もするが)
  • "scope" : 対応する .tmLanguage の scopeName の値を使う
  • TM_COMMENT_START はシングルラインコメント、[Edit] - [Comment] - [Toggle Comment] に対応する
  • TM_COMMENT_START_2 はブロックコメントの開始、TM_COMMENT_END_2 はブロックコメントの終わり、[Edit] - [Comment] - [Toggle Block Comment] に対応する
  • ブロックコメントがない場合、TM_COMMENT_START_2とTM_COMMENT_END_2を両方省略することができる


4. .tmPreferences ファイルに変換する
  • [Tools] - [Build System] - [JSON to Property List] を選択
  • F7(または [Tools] - [Build])を押すと .JSON-tmPreferences ファイルと同じディレクトリに .tmPreferences ファイルができる
  • Sublime Text を再起動する




Sublime Text 2 用 ReVIEW プラグインでは [Edit] - [Comment] - [Toggle Comment] で先頭に #@# が挿入されるようにしました!



2013年8月21日水曜日

Sublime Text 2 用の ReVIEW プラグイン作った

ReVIEW とは「テキストマークアップ型の原稿フォーマット」であり html, pdf, epub などの形式に変換することができます。
詳しくは kmuto さんの 「書籍制作フローを変える。 「ReVIEW」という解。[PDF]」「ReVIEWによる書籍制作フローを勉強する会を開いたよ : hdk_embeddedの日記」 を見るといいと思います。

ReVIEW 自体は github で公開されています。
https://github.com/kmuto/review

上記「ReVIEWによる書籍制作フローを勉強する会を開いたよ」内で言及されている Effective Android というコミケ本の制作に関わりました。 この本自体は用意した150部がコミケ3日目開始40分でそうそうに売り切れてしまうという結果になり、現在電子書籍化に向けていろいろ動いているようです。 制作にあたり著者が20人以上と多いので、フォーマットを合わせるために ReVIEW を使って原稿を書くことになりました。

この原稿以降も別の原稿を ReVIEW で書いたり、仕様書を ReVIEW で書いたりよく利用しています。
プレインテキストなのでバージョン管理ツールで変更履歴が見やすいという点と、そこそこの校正で簡単に pdf にできるので現在の原稿がどのくらいの分量が確認しやすいというのが気に入っています。

よく利用するようになって、Syntax Highlight と入力補完がないのが辛くなってきたので Sublime Text 2 用のプラグインを作りました。


プラグインのインストール
  • 1. Package Control を入れる(Package Control が入ってない人のみ)
    Package Control Installation

  • 2. Package Control: Add Repository を選択
    Command + Shift + p(Window は Ctrl + Shift + p)で Command Palette を開き、Add Repository を選択


  • 3. リポジトリ URL を入力
    下の方の入力ボックスに https://github.com/yanzm/ReVIEW と入力して Enter


  • 4. Package Control: Install Package を選択
    Command + Shift + p(Window は Ctrl + Shift + p)で Command Palette を開き、Install Package を選択


  • 5. ReVIEW を選択


    パッケージがダウンロードされインストールされる

  • 6. Sublime Text 2 を再起動


Syntax Highlight の使い方
  • ファイルの拡張子は .re にしてください
  • [View] - [Syntax] で ReVIEW が選択されていない場合は [View] - [Syntax] - [Open all with current extension as...] で ReVIEW を選択してください
こんな感じで色がつきます。


補完の使い方
  • Ctrl + Space で補完表示
  • 途中まで入力して Tab を押すと、そこまでで前方一致する候補の中から最初のが選択される
こんな感じで補完がでます。


* @zaki50 さんの原稿をキャプチャに使わせていただきました。ありがとうございます。



2013年8月19日月曜日

Sublime Text 2 用の Syntax Definition を作る

本家のリファレンスはこちら Syntax Definitions : SUBLIME TEXT HELP


1. AAAPackageDev を Sublime Text に入れる

2. Package を作成する

作成する Syntax Definition に対応するパッケージがない場合は

[Tools] - [Packages] - [Package Development] - [New Packages...]

を選択し、パッケージ名を入力して Enter を押す



3. Syntax Definition を作成する
  • [Tools] - [Packages] - [Package Development] - [New Syntax Definition]
  • <lang_name>.JSON-tmLanguage というファイル名で Packages/User フォルダーか、対応するパッケージフォルダに保存する { "name": "ReVIEW", "scopeName": "text.review", "fileTypes": ["re"], "patterns": [ { "match": "^={1,4} ", "name": "keyword.review", "comment": "Patagraph = " }, ... { "name": "column.review", "begin": "(^={3}\\[column\\]) ", "beginCaptures": { "1": { "name": "keyword.review" } }, "end": "(^={3}\\[/column\\])", "endCaptures": { "1": { "name": "keyword.review" } }, "comment": "Column ===[column] ... ===[/column]" } ], "uuid": "5fa7fee2-7333-4924-a208-ab04d0a64748" }
  • "name" : [View] - [Syntax] に表示される名前。
  • "scopeName" : syntax definition のトップレベルスコープ。source.<lang_name> か text.<lang_name> とする。プログラミング言語の場合は source を、マークアップなどそれ以外は text を使う。
  • "fileTypes" : 拡張子のリスト。
  • "patterns" : パターンのコンテナ。パターンは JSON 用にエスケープした正規表現で記述する。
    "name" に指定した scope 文字によって色が変わる。用意されている scope は TextMate のマニュアルにある
    • comment : コメント(灰)
      • line : ラインコメント
      • block : ブロックコメント
      { "match": "#@#.*", "name": "comment.line.review", "comment": "Comment #@# " },
    • constant : 定数
      • numeric : 数字(紫)
    • entity : エンティティ、タグ名とか
      • name :
        • function : 関数名(緑)
        • tag : タグ名(赤)
    • invalid : 無効
    • keyword : キーワード(赤)
    • markup : マークアップ言語用
    • meta :
    • storage :
    • string : 文字列(黄)
    • support :
      • function : (青)
    • variable : 変数
      • parameter : パラメータとして宣言されている変数(橙)
      • language : this, super, self などの予約語(色無し)
      • other : その他(色無し)


4. .tmLanguage ファイルに変換する
  • [Tools] - [Build System] - [JSON to Property List] を選択
  • F7(または [Tools] - [Build])を押すと .JSON-tmLanguage ファイルと同じディレクトリに .tmLanguage ファイルができる
  • Sublime Text を再起動する




# 今 ReVIEW 用の Syntax Definition 作ってるからもうちょいまって!



2012年12月24日月曜日

Sublime Text 2 で TypeScript の開発環境を整える

このエントリは Sublime Text 2 Advent Calendar 2012 用です。

---

TypeScript については公式サイトなどを見てください。

Sublime Text 2 で TypeScript を開発するためのこまごましたチップスをブログに書いてきたので、一旦まとめたいと思います。


1. TypeScript ファイル(.ts)をシンタックスハイライトするようにする

「Y.A.M の雑記帳 - Sublime Text 2 に TypeScript の syntax highlighting を入れる」 を見よう!


2. TypeScript の補完がでるようにする

「Y.A.M の雑記料 - Sublime Text 2 で TypeScript の補完を出すプラグイン作った」 を見よう!

補完は以下のコマンドで出ます(標準機能)。

Linux : alt + /
Mac : command + space


3. TypeScript ファイルをビルドできるようにする

「Y.A.M の雑記帳 - Sublime Text 2 で TypeScript をビルドする」 を見よう!

ビルドは以下のコマンドで実行できます。

Linux : ctrl + b
Mac : command + b


4. ファイル保存時に自動でビルドさせる

「Y.A.M の雑記帳 - Sublime Text 2 でファイル保存時に自動でビルドさせる」 を見よう!


5. ctrl + / (Mac は command + /)でコメントをトグルさせる

「Y.A.M の雑記帳 - Sublime Text 2 で .ts ファイルでも Ctrl + / でコメントをトグルできるようにする」 を見よう!


6. TypeScript 用のスニペットを作る

JavaScript 用にあらかじめ用意されているスニペットがいくつかあります。

([Preferences] - [Browse packages...])/JavaScript/ の中をみると .sublime-snippet ファイルがこれだけあります。
  • for-()-{}.sublime-snippet
  • for-()-{}-(faster).sublime-snippet
  • function.sublime-snippet
  • function-(fun).sublime-snippet
  • Get-Elements.sublime-snippet
  • if.sublime-snippet
  • if-___-else.sublime-snippet
  • Object-key-key-value.sublime-snippet
  • Object-Method.sublime-snippet
  • Object-Value-JS.sublime-snippet
  • Prototype-(proto).sublime-snippet
  • setTimeout-function.sublime-snippet


例えば、for-()-{}.sublime-snippet の中身は次のようになっています。

for source.js for (…) {…}

scope で指定されている拡張子のファイルで、tabTrigger で指定されている単語の後に Tab を押すと、content で指定されているスニペットに置き換わります。Tab を押したときに候補が複数ある場合は、補完候補ウィンドウに description が表示されます。

tabTrigger に for を指定しているスニペットが
・for-()-{}.sublime-snippet
・for-()-{}-(faster).sublime-snippet
の2つあるため、次のように候補が2つ表示されます。



上部の候補を選ぶと次のように for 文のスニペットに置き換わります。



これらの補完を TypeScript でも使えるようにしてみます。

・for

せっかくなので、TypeScript の特徴である型情報を付加して、var i を var i : number にします。 scope タグを source.ts にするのを忘れずに。 このファイルを ([Preferences] - [Browse packages...])/TypeScript/ に置きます。

TypeScript/for-()-{}.sublime-snippet
<snippet> <content><![CDATA[for (var ${20:i} : number = 0; ${20:i} < ${1:Things}.length; ${20:i}++) { ${100:${1:Things}[${20:i}]}$0; }]]></content> <tabTrigger>for</tabTrigger> <scope>source.ts</scope> <description>for (…) {…}</description> </snippet>
他のも TypeScript 用にします。

TypeScript/for-()-{}-(faster).sublime-snippet
<snippet> <content><![CDATA[for (var ${20:i} : number = ${1:Things}.length - 1; ${20:i} >= 0; ${20:i}--) { ${100:${1:Things}[${20:i}]}$0; }]]></content> <tabTrigger>for</tabTrigger> <scope>source.ts</scope> <description>for (…) {…} (Improved Native For-Loop)</description> </snippet>

・function

TypeScript では無名関数は
(x) => x*x;
のように記述するので、function.sublime-snippet は次のようにしました。

TypeScript/function.sublime-snippet
<snippet> <content><![CDATA[($1) => {${0:$TM_SELECTED_TEXT}};]]></content> <tabTrigger>f</tabTrigger> <scope>source.ts</scope> <description>Anonymous Function</description> </snippet>

TypeScript/function-(fun).sublime-snippet
<snippet> <content><![CDATA[function ${1:function_name} (${2:argument} : ${3:type}) : ${4:return_type} { ${0:// body...} }]]></content> <tabTrigger>fun</tabTrigger> <scope>source.ts</scope> <description>Function</description> </snippet>

・get elements

TypeScript/Get-Elements.sublime-snippet <snippet> <content><![CDATA[getElement${1/(T)|.*/(?1:s)/}By${1:T}${1/(T)|(I)|.*/(?1:agName)(?2:d)/}('$2')]]></content> <tabTrigger>get</tabTrigger> <scope>source.ts</scope> <description>Get Elements</description> </snippet>

・if

TypeScript/if.sublime-snippet
<snippet> <content><![CDATA[if (${1:true}) { ${0:$TM_SELECTED_TEXT} }]]></content> <tabTrigger>if</tabTrigger> <scope>source.ts</scope> <description>if</description> </snippet>

TypeScript/if-___-else.sublime-snippet
<snippet> <content><![CDATA[if (${1:true}) { ${2:$TM_SELECTED_TEXT} } else { ${3:$TM_SELECTED_TEXT} }]]></content> <tabTrigger>ife</tabTrigger> <scope>source.ts</scope> <description>if … else</description> </snippet>

Object-key-key-value.sublime-snippet, Object-Method.sublime-snippet, Object-Value-JS.sublime-snippet は JavaScript でもうまく動いていないのでスキップ。


・function

TypeScript/setTimeout-function.sublime-snippet
<snippet> <content><![CDATA[setTimeout(function() {$0}${2:}, ${1:10});]]></content> <tabTrigger>timeout</tabTrigger> <scope>source.ts</scope> <description>setTimeout function</description> </snippet>


TypeScript では、class や module が使えます。
これら用のスニペットも用意しましょう(これらに置き換えるので Prototype-(proto).sublime-snippet はスキップ)

・class

"class" + tab

TypeScript/class.sublime-snippet
<snippet> <content><![CDATA[class ${1:className} extends ${2:superClass} implements ${3:interface} { ${4:varName} : ${5:varType}; ${6:funcName}(${7:arg} : ${8:argType}) : ${9:returnType} { ${10} } constructor(${11:arg} : ${12:argType}) { ${13:super();} } static ${21:varName} : ${22:varType}; static ${23:funcName}(${24:arg} : ${25:argType}) : ${26:returnType} { ${27} } }]]></content> <tabTrigger>class</tabTrigger> <scope>source.ts</scope> <description>class</description> </snippet>

・module

"module" + tab

TypeScript/module.sublime-snippet
<snippet> <content><![CDATA[module ${1:moduleName} { ${0:$TM_SELECTED_TEXT} }]]></content> <tabTrigger>module</tabTrigger> <scope>source.ts</scope> <description>module</description> </snippet>

・interface

"interface" + tab

TypeScript/interface.sublime-snippet
<snippet> <content><![CDATA[interface ${1:interface-name} { ${0:$TM_SELECTED_TEXT} }]]></content> <tabTrigger>interface</tabTrigger> <scope>source.ts</scope> <description>interface</description> </snippet>

・Index Signature

"index" + tab

var dic : { [index : string] : type; } = {};

TypeScript/index-signature.sublime-snippet
<snippet> <content><![CDATA[var dic : { [index : ${1:string}] : ${2:type}; } = {};]]></content> <tabTrigger>index</tabTrigger> <scope>source.ts</scope> <description>Index Signature</description> </snippet>

・reference

"reference" + tab

/// <reference path="…"/>

TypeScript/reference.sublime-snippet
]]> reference source.ts reference

その他に以下も用意してみました。

・Array

"array" + tab

var array : type[] = [];

TypeScript/array.sublime-snippet <snippet> <content><![CDATA[var array : ${0:type}[] = [];]]></content> <tabTrigger>array</tabTrigger> <scope>source.ts</scope> <description>Array</description> </snippet>

これで
  • array
  • class
  • for
  • function
  • get
  • if
  • index
  • interface
  • module
  • reference
  • timeout
でスニペット補完がでます。

ここから全部のファイルをコピーするのは面倒だと思うので、TypeScript フォルダを zip にしました。
ここからどうぞ TypeScript.zip



2012年12月19日水曜日

Sublime Text 2 で .ts ファイルでも Ctrl + / でコメントをトグルできるようにする

JavaScript の設定をそのまま流用します。

([Preferences] - [Browse Packages...]) /JavaScript/Comments.tmPreferences



([Preferences] - [Browse Packages...]) /TypeScript/

にコピー。

開いて、

<key>scope</key>
<string>source.js, source.json</string>



<key>scope</key>
<string>source.ts</string>

に変更し、Sublime Text 2 を再起動。これだけ!


2012年12月18日火曜日

Sublime Text 2 で Emmet プラグインを使う

Emmet は Zen-Codingの次期バージョンで、仕様も大幅に変わっているようです。さらに使いやすくなっている!

emmet-sublime

Ctrl + Shift + P (Command + Shift + P) で Install Package を選択



Emmet を選択



* 参考にさせていただいたサイトでは github のリポジトリを Package Control に add repository してからインストールする方法が説明されていますが、現在は Package Control の Install Package から Emmet Plugin をインストールすることができます。

参考にさせていただいたサイト

1つ前のエントリで ZenCoding を紹介しておきながら、Emmet に移行することにしました。 主な理由が以下のポイントです。


気に入ったポイント

1. $ がちゃんと動く

ZenCoding は

ul#main>(li>img#main-$)*4

の展開が <ul id="main"> <li><img src="" alt="" id="main-1"></li> <li><img src="" alt="" id="main-1"></li> <li><img src="" alt="" id="main-1"></li> <li><img src="" alt="" id="main-1"></li> </ul> のように $ 部分がすべて1になってしまう場合がありました。

Emmet だとちゃんと <ul id="main"> <li><img src="" alt="" id="main-1"></li> <li><img src="" alt="" id="main-2"></li> <li><img src="" alt="" id="main-3"></li> <li><img src="" alt="" id="main-4"></li> </ul> になってくれます。


2. lorem ipsum が出力できる

p>lorem

を展開すると <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Laboriosam sunt sapiente ratione reprehenderit eveniet sit possimus a porro amet veniam ipsam repellat expedita nam excepturi autem cupiditate cumque obcaecati recusandae.</p> になります。

p>lorem16

のように単語数を指定することもできます。 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quis temporibus minima quae voluptates architecto voluptas obcaecati.</p>

3. CSS の補完がすごい

m40

margin: 40px;

m0-8

margin: 0 8px;


p8

padding: 8px;


h55

height: 55px;


lstn

list-style-type: none;


fll

float: left;


cb

clear: both;


4. CSS で - 補完がすごい

-bdrs

-webkit-border-radius: ;
-moz-border-radius: ;
border-radius: ;


4. カスタマイズの方法がわかりやすい

[Preferences] - [Package Settings] - [Emmet] に
[Settings - Default] と [Settings - User] が用意されました。

カスタムスニペットとかは [Settings - User] に書きます。

デフォルトのスニペットは
([Prefernces] - [Browse Pacakges...] で開くディレクトリ)/Emmet/emmet/snippets.json
に定義されていますが、こっちは変更せずに [Settings - User] に書くようにします。

[Settings - User] を以下のようにしてます。 { // Custom snippets definitions, as per https://github.com/emmetio/emmet/blob/master/snippets.json "snippets": { "html": { "snippets": { "html:5": "<!DOCTYPE html>\n<html lang='${lang}'>\n<head>\n\t<meta charset='${charset}' />\n\t<title>${1:Document}</title>\n</head>\n<body>\n\t${child}${2}\n</body>\n</html>", "html:t": "<!DOCTYPE html>\n<html lang='${lang}'>\n<head>\n\t<meta charset='${charset}' />\n\t<link rel='stylesheet' href='${1:style}.css' type='text/css' />\n\t<script type='text/javascript' src='${2:../jquery-1.8.3.min.js}' />\n\t<script type='text/javascript' src='${3:main.js}' />\n\t<title></title>\n</head>\n<body>\n\t${child}|\n</body>\n</html>" }, "abbreviations": { "less:css": "<link rel='stylesheet/less' type='text/css' href='${1:style}.less' />", "link:css": "<link rel='stylesheet' type='text/css' href='${1:style}.css' />", "script:src": "<script type='text/javascript' src='' />" } } } }


---

前回のエントリにも書いた、 html のときに br の展開を <br /> にする方法の修正点は

([Prefernces] - [Browse Pacakges...] で開くディレクトリ)/Emmet/emmet/emmet-app.js

に変わりました。同じように self_closing_tag を変更します。

5132行の createProfile('html', {self_closing_tag: false}); が該当部分です。

createProfile('html', {self_closing_tag: false});
だと(デフォルト)
<link rel="stylesheet" href="">

createProfile('html', {self_closing_tag: true});
だと
<link rel="stylesheet" href=""/>

createProfile('html');
だと(デフォルトの self_closing_tag: 'xhtml' になる)
<link rel="stylesheet" href="" />

になります。



Sublime Text 2 の ZenCoding プラグインのカスタマイズ方法

Sublime Text 2 用の Zen Coding プラグインがあります。

Sublime Package Control に登録されているので、Sublime Package Control を入れている場合は、そこから Zen Coding パッケージを入れれば使えます。

ちなみに Sublime Package Control のインストール方法は、[View] - [Show Console] でコンソールを開いて、そこに Sublime Package Control Installation に載ってるコマンドを入力し、Sublime Text 2 を再起動するだけです。

ZenCoding は例えば

div#page>div.logo+ul#navigation>li*5>a

と入力してタブを押すと <div id="page"> <div class="logo"></div> <ul id="navigation"> <li><a href=""></a></li> <li><a href=""></a></li> <li><a href=""></a></li> <li><a href=""></a></li> <li><a href=""></a></li> </ul> </div> に変換してくれる機能をエディタに加えるプラグインです。
Zen Coding syntax は Zen Coding の Google Code の Wiki にあります。

さて、Zen Coding には abbreviations という機能があります。

例えば

<a href=""></a>

のように展開したい場合、

a[href]

と打ってタブを押す必要がありますが、

a

の状態でタブを押しても a[href] と同じように展開されるように略語を設定できる機能です。

他にも

a:link

という略語が用意されていて、この状態でタブを押すと

<a href="https://"></a>

に展開されます。

また、

html:5

でタブを押すと <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> </html> に変換する snippet 機能もあります。


各略語がどのように変換されるかは Zen Coding プラグインフォルダの zen_settings.py に書かれています。

([Preferences] - [Browse Packages...] で開くディレクトリ)/ZenCoding/zencoding/zen_settings.py


私は次のように変更して使っています。

■ 'html' の 'snippets' の 'html:5': '<!DOCTYPE HTML>\n' + '<html lang="${locale}">\n' + '<head>\n' + ' <meta charset="${charset}">\n' + ' <title></title>\n' + '</head>\n' + '<body>\n\t${child}|\n</body>\n' + '</html>' 'html:5': '<!DOCTYPE html>\n' + '<html lang="${lang}">\n' + '<head>\n' + ' <meta charset="${charset}" />\n' + ' <title></title>\n' + '</head>\n' + '<body>\n\t${child}|\n</body>\n' + '</html>' に変更

■ 'html ' の 'snippets' に以下を追加
(本当は 'common' に入れるべきなんだろうけど、なんか動かなかった。) 'html:t': '<!DOCTYPE html>\n' + '<html lang="${lang}">\n' + '<head>\n' + ' <meta charset="${charset}" />\n' + ' <link rel="stylesheet" href="${1:style}.css" type="text/css" />\n' + ' <script type="text/javascript" src="${2:../jquery-1.8.3.min.js}" />\n' + ' <script type="text/javascript" src="${3:main.js}" />\n' + ' <title></title>\n' + '</head>\n' + '<body>\n\t${child}|\n</body>\n' + '</html>'

■ 'html' の 'abbreviations' の 'script:src': '<script type="text/javascript" src=""></script>', 'script:src': '<script type="text/javascript" src="" />', に変更

■ 'html' の 'abbreviations' に以下を追加 'less:css': '<link rel="stylesheet/less" type="text/css" href="${1:style}.less" />',


---

html で(xhtml ではなく)br が <br> に展開されるのを <br /> にするには、

([Preferences] - [Browse Packages...] で開くディレクトリ)/ZenCoding/zencoding/utils.py を変更します。

setup_profile('html', {'check_valid' : True, 'self_closing_tag': False});

の 'self_closing_tag' によって振る舞いが異なります。

■ setup_profile('html', {'check_valid' : True, 'self_closing_tag': False});
だと(デフォルト)
<link rel="stylesheet" href="">

■ setup_profile('html', {'check_valid' : True, 'self_closing_tag': True});
だと
<link rel="stylesheet" href=""/>

■ setup_profile('html', {'check_valid' : True});
だと
<link rel="stylesheet" href="" />

になります。

吉川さんありがとうございます。



2012年12月17日月曜日

Sublime Text 2 の設定

Sublime Text 2 自体の設定(例えばテキストサイズとかフォントとか)は、[Preferences] - [Settings -User] に書きます。



デフォルトだと { "ignored_packages": [ "Vintage" ] } なので、何を書けばいいかよくわからん!と思いますが。
[Preferences] - [Settings - Default] にデフォルトの設定があるので、これを参考にして上書きしたい設定を [Settings - User] の方に書きます。[Settings - Default] の方は変更しません。

いくつか紹介します。
  • "font_face" 文字のフォント
    システムフォントとして設定されている必要があります。
    私のオススメは monaco (ver 2.0) と Source Code Pro です。

    Mac はフォントファイルをダブルクリックすれば、システムフォントに登録されるので楽ですね。
    Ubuntu では、フォントファイルを ~/.fonts/ にコピーすれば OK。

    "font_face": "monaco",
    "font_face": "SourceCodePro",

  • "font_size" 文字の大きさ。デフォルトは 10。
    整数で指定します。10.5 と指定しても 10 と同じ大きさになります。

    "font_size": 10,

  • "line_numbers" 左に行数を表示するかどうか。true の場合表示される。デフォルトは true。

    "line_numbers": true,

  • "gutter" 左に余白を設けるかどうか。デフォルトは true。この余白に行数が表示される。false にすると line_numbers で true を指定していても行数は表示されない。

    "gutter": true,

  • "margin" gutter とコードの間の余白。デフォルトは 4。整数を指定する。

    "margin": 8,

  • "rulers" ガイド線の位置を配列を指定する。デフォルトは空配列。

    "rulers": [40, 60],

  • "tab_size" タブのサイズをスペース何個分にするかを指定する。

    "tab_size": 4,

  • "translate_tabs_to_spaces" タブが入力された場合にスペースに置き換える。デフォルトは false。

    "translate_tabs_to_spaces": true,

  • "trim_automatic_white_space" キャレットを行から外したときに自動インデントで追加された空白を削除するかどうか。デフォルトは true = 削除する。

    "trim_automatic_white_space": true,

  • "highlight_line" 選択している行をハイライトするかどうか。true の場合ハイライトする。デフォルトは false。

    "highlight_line": true,

  • "caret_style" キャレットのスタイル。smooth, phase, blink, wide, solid のいずれかを指定する。デフォルトは smooth。

    "caret_style": "phase",

  • "line_padding_top" 行の上部の余白。デフォルトは 0。整数を指定する。

    "line_padding_top": 0,

  • "line_padding_bottom" 行の下部の余白。デフォルトは 0。整数を指定する。

    "line_padding_bottom": 0,

  • "draw_white_space" 空白にマークを表示するかどうか。none, selection, all のいずれかを指定する。none の場合、常に表示されない。selection の場合、選択状態の部分だけ表示される。all の場合、常に表示される。スペースは・、タブは―で表示される。

    "draw_white_space": "all",

  • "indent_guide_options" インデントガイドの描画方法。draw_normal か draw_active のいずれかを指定する。デフォルトは draw_normal。draw_active を指定した場合、キャレットを含むインデントガイドを別の色で表示する。

    "indent_guide_options": ["draw_active"],

  • "trim_trailing_white_space_on_save" 保存時に末尾の空白を削除するかどうか。デフォルトは false。

    "trim_trailing_white_space_on_save": true,

  • "ensure_newline_at_eof_on_save" 保存時に eof が改行ではない場合、改行になるようにするかどうか。デフォルトは false。

    "ensure_newline_at_eof_on_save": true,

  • "default_encoding" デフォルトの文字コード

    "default_encoding": "UTF-8",

  • "auto_complete_delay" タイピングの後に自動補完ウィンドウが表示されるまでのディレイ[ms]

    "auto_complete_delay": 50,

  • "open_files_in_new_window" OSX のみ。Finder からファイルを開いたとき、もしくはドックアイコンにファイルをドラッグしたときに、新しいウィンドウで開くかどうか。デフォルトは true。

    "open_files_in_new_window": false,

  • "folder_exclude_patterns" フォルダ内でサイドバーに表示しないフォルダ名のパターンの配列。デフォルトは .svn, .git, .hg, CVS の配列。

    "folder_exclude_patterns": [".svn", ".git", ".hg", "CVS"],

  • "file_exclude_patterns" フォルダ内でサイドバーに表示しないファイル名のパターンの配列。デフォルトは以下。

    "file_exclude_patterns": ["*.pyc", "*.pyo", "*.exe", "*.dll", "*.obj","*.o", "*.a", "*.lib", "*.so", "*.dylib", "*.ncb", "*.sdf", "*.suo", "*.pdb", "*.idb", ".DS_Store", "*.class", "*.psd", "*.db"],

  • "binary_file_patterns" サイドバーには表示するが、Goto Anything や Find in Files の対象にしないファイル名のパターン。デフォルトは以下。

    "binary_file_patterns": ["*.jpg", "*.jpeg", "*.png", "*.gif", "*.ttf", "*.tga", "*.dds", "*.ico", "*.eot", "*.pdf", "*.swf", "*.jar", "*.zip"],

  • "ignored_packages" インストールしているが、無視するパッケージのリスト

    "ignored_packages": ["Vintage"]
いまのところこんな感じにしてます。 { "font_face": "SourceCodePro", "font_size": 10, "margin": 8, "rulers": [80], "translate_tabs_to_spaces": true, "highlight_line": true, "caret_style": "phase", "draw_white_space": "all", "indent_guide_options": ["draw_active"], "trim_trailing_white_space_on_save": true, "ensure_newline_at_eof_on_save": true, "open_files_in_new_window": false, "ignored_packages": ["Vintage"] }

2012年12月14日金曜日

Sublime Text 2 の html の入力補完をカスタマイズする

Sublime Text 2 には、デフォルトで html の入力補完機能が用意されています。

例えば、html まで打って Tab キーを押すと、 <html> <head> <title></title> </head> <body> </body> </html> に変換されます。

link まで打って Tab キーを押すと、 <link rel="stylesheet" type="text/css" href=""> に変換されます。

script まで打って Tab キーを押すと、 <script type="text/javascript"></script> に変換されます。


ここで、例えば script と打ってタブを押したときに <script type="text/javascript" src=""></script> と src 属性も入れてほしいなと思った場合、

Subime Text 2 のパッケージディレクトリ([Preferences] - [Browse Packages...] で開くディレクトリ)の HTML フォルダの HTML.sublime-completions を変更します。 { "trigger": "script", "contents": "" }, { "trigger": "script", "contents": "" }, に変更すれば OK です。$n は補完した後にタブでカーソルが移動する位置を指定しています。


html だけはこのファイルではなく、html.sublime-snippet に記述します。

例えば、html と打ってタブを押したときに <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> </body> </html> のように <!DOCTYPE html> と <meta> 部分も入れたいなという場合、

html.sublime-snippet を次のように変更すれば OK です。 <snippet> <content><![CDATA[ <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>$1</title> </head> <body> $0 </body> </html>]]></content> <tabTrigger>html</tabTrigger> <scope>text.html</scope> </snippet>


2012年12月6日木曜日

TypeScript で jQuery を使う (Sublime Text 2 で jquery の補完)

TypeScript で jQuery を使うには、jQuery の型を定義したファイルが必要です。

TypeScript のコードと一緒に公開されているので、ダウンロードして作業フォルダに入れます。
jquery.d.ts

現状は // Typing for the jQuery library, version 1.7.x とあるので、1.7.x の jQuery に対応しているようです。


次に、自分の .ts ファイルの先頭に
/// <reference path="jquery.d.ts" /> を追加します。これは外部の ts ファイルを読み込むための書き方です。

で、ここで気づきました。Sublime Text 2 で jquery の補完がでません。。。

以前作ったプラグイン(Sublime Text 2 で TypeScript の補完を出すプラグイン作った")を修正しないといけない(修正すれば jquery、というか reference で指定してるファイルの補完がでる)ということにも気づきました。

ということで修正しました。
現在の tsc_completion のバージョンは v1.0.3 になってます。
Sublime Text 2 のプラグインのコードも新しくなっているので、こちらも置き換えてください。

こんな感じで補完がでます。



例えば、こういうのが
/// <reference path="jquery.d.ts" /> var questionArea : JQuery; var inputArea : JQuery; var star1 : JQuery; var star2 : JQuery; var star3 : JQuery; ... $(document).ready(function () { inputArea = $("#text_area"); inputArea.keyup(onInput); questionArea = $("#question_area"); star1 = $("#star1"); star2 = $("#star2"); star3 = $("#star3"); inputArea.focus(); // show first text showNextText(); })
こういうのに変換されます。
var questionArea; var inputArea; var star1; var star2; var star3; ... $(document).ready(function () { inputArea = $("#text_area"); inputArea.keyup(onInput); questionArea = $("#question_area"); star1 = $("#star1"); star2 = $("#star2"); star3 = $("#star3"); inputArea.focus(); showNextText(); }); クラスとか使ってないからそのままだねw


jquery で HTMLInputElement にあたる要素で focus() 呼んでもフォーカスあたらないのはなんでなんだ。。。

jquery 1.8.3 にしたら直った


2012年11月28日水曜日

Sublime Text 2 でファイル保存時に自動でビルドさせる

Sublime Plugin を作ってくれている人がいました。
https://github.com/alexnj/SublimeOnSaveBuild

とりあえずは git clone していれてみる。

git clone https://github.com/alexnj/SublimeOnSaveBuild.git

できた SublimeOnSaveBuild フォルダを Sublime Text 2 のパッケージディレクトリ([Preferences] → [Browse Packages...])にコピー。

そうすると
[Preferences] → [Package Settings] → [SublimeOnSaveBuild]
ができる



ここの [Settings - Default] をみると次のようになっている

{ "filename_filter": "\\.(css|js|sass|less|scss)$", "build_on_save": 1 } build_on_save は 1 のとき、保存時に自動でビルドする。
filename_filter は保存時にビルドを走らせるかどうか判断するファイル名の正規表現。

デフォルトでは .ts がないですね。
TypeScript (.ts ファイル)でも保存時にビルドさせたいので [Settings - User] を作ります。
(注:[Settings -Default] は変更してはいけません)

[Preferences] → [Package Settings] → [SublimeOnSaveBuild] → [Settings - User] を選択肢し、以下を書いて保存する。

{ "filename_filter": "\\.(ts|css|js|sass|less|scss)$", "build_on_save": 1 }

わーい Ctrl (Command) + B でビルドも走るようになったー!


Sublime Package Control からもインストールできるそうです。


2012年11月27日火曜日

Sublime Text 2 で TypeScript をビルドする

Sublime Text 2 に TypeScript の Build System を作ります。

[Tools] → [Build System] → [New Build System...]

TypeScript.build-system という名前で以下を保存
(パッケージフォルダのしたの User/ の保存される)

{ "cmd": ["tsc","$file"], "file_regex": "(.*\\.ts?)\\s\\(([0-9]+)\\,([0-9]+)\\)\\:\\s(...*?)$", "selector": "source.ts", "osx": { "path": "/usr/local/bin:/opt/local/bin" }, "linux": { "path": "/usr/local/bin:/usr/bin" } } TypeScript でのビルドを明示したいなら、[Tools] → [Build System] → [TypeScript] を選択する。
Auto のままでも拡張子が .ts なら TypeScript でビルドされる。

[Tools] → [Build] もしくは Ctrl (Mac は Command) + B でビルド



var を ver とタイポしたときのエラー表示



file_regex は tsc のエラーの正規表現にする。



解説は以下↓


Build Systems

Sublime Text には、外部のプログラムにファイルをかませる機能があります。

独自の Build System を作るには以下のステップを行います。
  • オプション : 外部の実行可能ファイル(スクリプトやバイナリファイル)を用意する
  • .sublime-build という拡張子の設定ファイル(JSON 形式で記述する)を用意する
  • ビルドを開始する Sublime Text のコマンドを用意する
デフォルトでは build systems は Packages/Default/exec.py に実装されている exec コマンドを使います。このコマンドをオーバーライドすることができます。

.build-system ファイルの例 { "cmd": ["python", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python" }

オプション
  • cmd
    実行するコマンドと必要な引数が入った配列。
    フルパスを指定しなかった場合、システムの環境変数 PATH から外部のプログラムが検索される。

  • file_regex
    オプション。
    cmd のエラー出力をキャプチャするための正規表現。

  • line_regex
    オプション。
    もし file_regex が現在のラインとマッチせず、line_regex が存在して現在のラインとマッチするなら、file_regex とマッチするラインが見つかるまでバッファ使って遡り、これら2つのマッチを使って進むべきファイルとラインを決定する

  • selector
    オプション。
    [Tools] → [Build System] → [Automatic] が true にセットされているときに利用される。
    Sublime Text はアクティブな View 用の適切な build system を見つけるためにこのスコープセレクターを使う。

  • working_dir
    オプション。
    cmd を走らせる前に変更するカレントディレクトリとして変更するディレクトリ。
    元のカレントディレクトリは後でリストアされる。

  • encoding
    オプション。
    cmd の出力エンコーディング。有効な python エンコーディングでなければならない。デフォルトは UTF-8。

  • target
    オプション。
    実行する Sublime Text コマンド。デフォルトは exec (Packages/Default/exec.py)。

  • env
    オプション。
    現在のプロセスの環境変数が cmd に渡されるまえに、現在のプロセスの環境変数にマージされる環境変数の Dictonary。

  • shell
    オプション。
    true の場合、cmd は shell を介して実行される。

  • path
    オプション。
    cmd が呼ばれる前に、現在のプロセスの PATH がこの文字列に置き換わる。
    元の PATH の値は後でリストアされる。

  • variants
    オプション。
    メインの build system のオプションを上書きするオプションの Dictionary のリスト。

  • name
    variants の内部でだけ有効。
    variant build system を識別する。
    name が Run の場合、variant は Tools | Build System メユーの下に表示され、Ctrl + Shift + B がバインドされる。


プラットフォーム独自のオプション
  • windows
  • osx
  • linux
{ "cmd": ["ant"], "file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$", "working_dir": "${project_path:${folder}}", "selector": "source.java", "windows": { "cmd": ["ant.bat"] } }

Variants

{ "selector": "source.python", "cmd": ["date"], "variants": [ { "cmd": ["ls -l *.py"], "name": "List Python Files", "shell": true }, { "cmd": ["wc", "$file"], "name": "Word Count (current file)" }, { "cmd": ["python", "-u", "$file"], "name": "Run" } ] }

Build System の変数
  • $file_path
    現在のファイルのディレクトリ 例) /Files/
  • $file
    現在のファイルのフルパス 例)/Files/File.txt
  • $file_name
    現在のファイルの名前 例) File.txt
  • $file_extension
    現在のファイルの拡張子 例) .txt
  • $file_base_name
    現在のファイルの名前部分 例) File.
  • $packages
    パッケージフォルダへのフルパス
  • $project
    現在のプロジェクトファイルへのフルパス
  • $project_path
    現在のプロジエクとファイルのディレクトリ
  • $project_name
    現在のプロジェクトファイルの名前
  • $project_extension
    現在のプロジェクトファイルの拡張子
  • $project_base_name
    現在のプロジェクトファイルの名前部分


Build System を実行する

[Tools] → [Build System] から実行したい build system を選択して、[Tools] → [Build] を選択するか Ctrl (Command) + B を押す。



Sublime Text 2 に TypeScript の syntax highlighting を入れる

Interoperability @ Microsoft MSDN Blogs - Sublime Text, Vi, Emacs: TypeScript enabled!
で Sublime Text のアイコンをクリックして zip ファイルをダウンロード

展開すると
  • README-sublime-typescript.txt
  • typescript.tmLanguage
が得られる

Sublime Text の syntax highlighting の作り方は
http://docs.sublimetext.info/en/latest/extensibility/syntaxdefs.html
にあり、自分で作成する場合は以下のようにするが、

JSON 形式で記述
 ↓
.tmLanguage ファイル(XML形式)に変換する

上記のエントリでは .tmLanguage の状態のものを提供しているので、Sublime Text を起動して [Preferences] - [Browse Package...] で開くフォルダ(私の場合(Ubuntu)は ~/.config/sublime-text-2/ だった)に TypeScript フォルダを作成し、そのなかに typescript.tmLanguage ファイルをコピーして Sublime Text を再起動すれば OK.


2012年11月22日木曜日

Ubuntu に Sublime Text 2 をインストールした

Sublime Text 2 の Ubuntu 用 PPA みつけた

WEB UPD8 - SUBLIME TEXT 2 UBUNTU PPA
> sudo add-apt-repository ppa:webupd8team/sublime-text-2
> sudo apt-get update

> sudo apt-get install sublime-text


> sublime-text -h
Sublime Text 2 Build 2217

Usage: sublime_text [arguments] [files]         edit the given files
   or: sublime_text [arguments] [directories]   open the given directories

Arguments:
  --project : Load the given project
  --command : Run the given command
  -n or --new-window:  Open a new window
  -a or --add:         Add folders to the current window
  -w or --wait:        Wait for the files to be closed before returning
  -b or --background:  Don't activate the application
  -h or --help:        Show help (this message) and exit
  -v or --version:     Show version and exit

Filenames may be given a :line or :line:column suffix to open at a specific
location.

> sublime-text -v
Sublime Text 2 Build 2217
-v でビルド番号はでるが、バージョンはでないのか。。。