19 Saving Files ファイルの保存

TextMateにはファイルの保存の仕方に影響する上級の環境設定にいくつかのオプションがあります。

Prefs Saving

19.1 Atomic Saves 原子性での保存

原子性での保存とは、ファイルを上書きするのではなく、TextMateが新しいファイルを保存し、それが成功したら古いファイルを上書きするということです。これは、もしファイル保存中にマシンがクラッシュした場合、あなたは古い(つまり、最後に保存された)ファイルと新しいファイルの両方を失うというリスクを冒さずにすむという点での長所があります。

欠点は新しいファイルが実際に(新しいinodeとともに)書かれるので、ファイルへのエイリアスを壊してしまうかもしれないということです。しかし、これはファイルを移動したり、移動する予定であるときにのみ置きます。というのは、パスはエイリアスを解決する際にinodeより優先されるからです。また、Finderは保存するたびにファイルのアイコンの位置を変えます。(これはもしそのファイルがあなたの目に見えるフォオル谷あるときだけ問題になります。)

19.2 Creator Code (クリエータコード)

クリエータコードはClassicのMacがファイルとアプリケーションを関連づける方法です。OS Xでは、関連付けは主にファイル拡張子を通じて行われます。もしある日与えられたファイルタイプを扱うもっとよいプログラム(!)が見つかった場合に、あなたは全てのファイルのクリエータコードを変えるのではなく、一カ所の関連付けをアップデートしさえすればよいので、拡張子には利点があります。このため、これをセットせず、ブランク(Blank)に設定しておくよう推奨します。

19.3 Encoding (エンコーディング)

TextMateはかなりUTF-8に偏重しています。UTF-8はASCIIと互換性があるエンコーディングです。なので、これを、grepdiffruby(インタープリタ),gcc(コンパイラ)などといった既存のツールといっしょに使うのに問題はありません。

ファイルシステムはファイル名にUTF-8に使うので、TerminalはデフォルトでUTF-8にセットされています。(例えば、lsが正しく結果子を表示するために)。もしTerminalでnon-ASCIIファイルをcatしたり、(例えば、ellipsisやカーリークォーツなどの)ASCII以外のアウトプットをするスクリプトを実行しても、UTF-8がアウトプットであれば、正しく表示されます。(それは、あなたがTerminalのエンコーディングを変更しない限りですが。)

加えて、UTF-8はあなたがMacでタイプできるすべての文字を表示できる唯一のエンコーディングです。ユーロシンボル(€)のような文字でさえ古い(レガシー)エンコーディングでは問題が生じます。

またさらにボーナスとして、UTF-8はほぼ100パーセントの確実性で認識される、唯一の8bitエンコーディングです。それが意味するのは、UTF-8を使う限り、ファイルを開いて、テキストエディタが使われているエンコーディングについて間違った推測をしてしまうといったことは、もう経験しないでしょう。(もしエンコーディングの間違いにあなたが気づかずにファイルを保存してしまうとファイルは台無しになってしまいます。)

UTF-8を指示する最後の理由は、TextMateはたくさんの機能を可能にするインフラをただ提供しているだけということです。このすべての機能はスクリプトとして書かれていて、こういったスクリプトが現在のファイル、プロジェクト内のファイル、選択範囲などといっしょに働きます。あるアクションはテクストを変形させるものかもしれないし、結果を新しいドキュメントでHTMLで表示させるものかもしれません。たいていの場合、エンコーディングを扱わなければいけないことは、実用的ではなく、不可能であることさえあります。(結果がソースのエンコーディングを使って表示されなければいけないような場合です。)なので、すべてのことにたいして、UTF-8を前提としています。

TextMateのブログには、(ウェブサーバーにデータをPOSTしたり、LaTexドキュメントのエンコーディングを設定したりするなど)多岐にわたるシチュエーションでどのようにしてUTF-8を使うかについての投稿があります。

それでもやはり、デフォルトのエンコーディングを変えることは可能です。もし他のエンコーディングでひとつのファイルを保存しなければいけないだけなら、Save As…ダイアログで調整できます。エンコーディングのリストは短いですが、それは意図的なものです。もし他のエンコーディングを使う必要がある場合、現在のところのアドバイスとしては、iconvを使うことです。

iconv -lを実行して、サポートされている数百ものエンコーディングのリストを得ることができます。

TerminalでいくつかのファイルをUTF-8に変更するには、以下のようにすればできます:

for f in *.txt; do iconv -f mac -t utf-8 "$f" >"$f.utf8"; done

19.4 Extended Attributes (Metadata) 拡張された属性(メタデータ)

TigerからOS Xはsetxattrとその仲間をサポートします。

TextMateは拡張された属性をキャレットのポジション、ブックマーク、どのテキストが折り畳まれているかといった情報を保存するために利用し、将来的には更なる活用をするとのなるでしょう。

(ネットワークでマウントされたディスクなどの)拡張された属性ををネイティブでサポートしないファイルシステムのために、OS Xは代わりにその情報を«filename»がオリジナルのフォイル名である場合、._«filename»というファイルの中に保存します。

すべてのユーザが、TextMateが状態覚えておくために、この特別の(隠された)ファイルが役にたつとは思わないので、この拡張された属性を無効化することができます。TexMateを終了させて、シェルから次のコマンドを実行することで無効化できます。

defaults write com.macromates.textmate OakDocumentDisableFSMetaData 1

19.5 Save Automatically when Focus Is Lost フォーカスがなくなったときに自動的に保存

もしあなたが、Terminalやブラウザのようなアプリケーションに切り替えてテストするようなプロジェクトをしているなら、フォーカスをがなくなったときに、修正されたすべてのファイルを保存するようにTextMateを設定することができます。そうして、ほかのアプリケーションに切り替えたとき、TextMateは自動的にすべての変更をを保存します。