テキストでの作業

TextMateはほとんどの部分は、MailやSafariや基本的な全ての他のCocoaアプリケーションによって使われているシステムコンポ年とであるNSTextViewの振る舞いをまねようとしています。

このセクションではテキスト編集に関連した、その他の機能の一部をカバーします。

自動的にペアになる文字(引用など)

(マークアップやソースコードのような)構造化されたテキストを書くとき、ペアになる文字があります。例えばプログラミング言語では、左中括弧({)を使って、右中括弧(})を使わないといったことは滅多にありません。

あなたがこれらの文字の釣り合いを保つために、TextMateは、あなたが開始文字をタイプしたときにキャレットの後に、適切な閉じる文字を挿入します。もしあなたが閉じる文字をタイプした場合、TextMateはとても賢いので自動的に挿入されたものを上書きします。もしあなたが開始文字をタイプしそれをバックデリート(⌫)を使って削除すると、自動的に挿入された文字も削除されます。もしあなたが自動的に挿入された文字のみを削除したいなら、代わりにフォワードデリート(⌦)を使ってください。

またテキストを選択し、開始文字によって、開始/終了文字で選択範囲を包むことができます。例えば、fooとタイプして、それを選択し、(をタイプします。そうすると、TextMateはそれを(foo)にして、最後の括弧の後にキャレットを移動します。

実際の文字ペアは、さまざまな言語とコンテキストのさまざまな設定といっしょに[bundle preferences][PairedCharactersPrefs]で定義されています。例えば、ソースコードではアポストロフィは、コメントや文字列を除き、それ自身が週虜文字として登場するまでセットされます。これは[スコープセレクタ][ScopeSelectors]を使う事によって実現しています。

([Source bundle][SourceBundle]のマクロとして定義され、いくつかの言語では上書きされる)自動にペアになった文字に関連してふたつのショートカットは:

  1. ⌘↩
    行の最後に移動し、新しい行を挿入する。 例えば、もしあなたが、以下のように書き:

    print("foo キャレットの右側に`")`があると、⌘↩を使って、この二つの文字を飛ばして、新しい行を挿入します。
    
  2. ⇧⌘↩
    行の最後へ移動し、;を挿入し、新しい行を挿入します。

補完

TextMateには、シンプルですが、効果的な補完機能が⎋(エスケープ)にあります。これは、現在のドキュメントの中でのマッチをベースにした現在の語を補完します。もし、複数のマッチがあれば、⎋を押すことで順に移動できます。⇧⎋を使うことによって逆順に移動もできます。

マッチはキャレットからの距離によって並び替えられています。つまり、キャレットに近い候補は遠い場所にある候補より先に表示されます。

このデフォルトの補完機能を強化するには二つの方法があります。両方とも[バンドルの設定][CompletionsPrefs]によって実現します。

最初のオプションは常に推薦されるべき候補のリストを提供することです。例えば、Objective-CバンドルにはCocoaフレームワークでよく使われるメソッドのリストがあります。これは、候補の配列です。例えば:

completions = ( 'retain', 'release', 'autorelease', 'description' );

もう一つの方法は、候補を集めるためのシェルコマンドをカスタムで設定することです。シェルコマンドは他の変数といっしょ、(補完される言語で)利用可能なTM_CURRENT_WORD[環境変数][EnvVariables]

例えば、Cバンドルにはキャレットがpreprocessor include directiveの中にある時のためのカスタムの補完コマンド設定があります。以下のようなものです:

completionCommand = 'find "$TM_DIRECTORY" \
    -name "$TM_CURRENT_WORD*.h" -maxdepth 2 \
    -exec basename "{}" \;|sort';

これは、現在の語をprefixとして、.h拡張子を持っている、現在のディレクトリ(とその直下のサブディレクトリ)にあるいかなるファイルにもマッチとして見つけます。

あなた自身の補完コマンド(またはリスト)を提供すると、デフォルトのマッチを無効化したいかもしれません。これは、disableDefaultCompletion1にセットすることで可能です。

コピー・ペースト

クリップボードヒストリー

テキストをコピーまたはカットすると毎回、テキストはスタックにに押し出されます。

⌃⌥⌘Vを押すと全ての過去のクリッピングのリストを見ることができ、そこから矢印キーを使ってペーストしたいものを選ぶことができます。挿入するにはリターン、リストを消すためにはエスケープを使ってください。リストを消すと、現在選択されたクリッピングが次のときにペースト機能を使ったときにペーストされます。

Clipboard History

リストからクリップを選ばなくても、リストの前のクリップをペーストするのに、⇧⌘Vを使うことができます。もう一度キーを押すともう一つ前のクリップへと移動します。戻るには、⌥⌘Vを使えます。これらのキーボードショートカットは、一つのドキュメントから複数のコピーを作って、LIFO-style (Last In First Out)で他のドキュメント(もしくは同じドキュメントの他の場所)にペーストする際に便利です。

インデントし直されたペースト

テキストをペースとするときに、TextMateは、現在のインデントのレベルだけでなく、ペーストされるテキストのインデントを見積もり、現在のインデントとマッチするようにペーストされるテキストを調節します。

[テキストをインデントし直す][ReIndentText]のセクションで触れられるインデントルールを使って見積もられます。

もし一時的にこれを回避したい時は、⌃⌘Vを使ってペーストできます。また、PreferencesのText Editingにて永久にテキストがインデントし直されるのを無効化できます。

編集モード

フリーハンドモード

Edit → Mode submenu (⌥⌘E)でフリーハンド編集を有効化/無効化でいます。

このモードが有効化されているとき、キャレットの移動は行末やタブストップに制限されません。

これは、いくつかの行のある一定の列に何かを挿入し、(そしてパディングを挿入したくない)ときやその他のシチュエーションで、ASCIIダイアグラムでの作業に役に立ちます。

[列の選択][ColumnSelection]をしているときは、フリーハンドモードは(一時的に)有効化されるため、行末を超えて、選択範囲を作ることができます。

オプションキー(⌥)を押しながらマウスをシングルクリックすることによって、行末を超えた場所にキャレットを置くことも可能です。

上書きモード

Edit → Mode サブメニュー (⌥⌘O)で上書きモードを有効にすることによって、ドキュメントにすでにある文字はいつものように挿入されず、あなたがタイプするにしたがって上書きされます。

これは以下のようなカラムデータで作業をするとき便利です:

foo     jaz
bar     sub
fud     dub

最初のカラムの値のいくつかを上書きしたいときを想像してください。同じように、固定された幅のリストがあり、その一部を幅を保ちながら置換したいかもしれません。例えば、カラム20で右寄せしなければいけないが、レーベルを上書きしたい、以下のようなコードがあるかもしれません:

printf("Value is         %3d", 37).

検索と置換

スタンダードの検索ダイアログに加えて、TextMateには、検索と置換アクションのためのショートカットをもった(Editメニューにある)Findサブメニューがあります。

Find Menu

検索ダイアログに改行とタブを挿入する

検索ダイアログは、インプットを受け付けるために通常のシステムコントロールを使用しています。置換テキストフィールドの隣にある矢印を使うことによって、一行と複数行のテキストコントロールを切り替えられます。

Multi Line Find Dialog

もしテキストフィールドに改行やタブ文字を挿入する必要がある場合は、タブ(⇥)もしくは、リターン (↩) キーを押すときに、オプション(⌥)をホールドしておく必要があります。これで、リテラルのタブや改行文字が挿入されます。

検索クリップボード

⌘E と ⌘Gという二つの便利なキーボードショートカットがあります。初めのものは選択範囲を共有された検索クリップボードにコピーします。これは、多くのアプリケーションで動作し、⌘Gによって、その文字列が次にある場所を見つけることができます。

検索クリップボードはSafari, TextEdit, Mail, TextMate, Terminal, Consoleであれ、アプリケーション間で動作します。選択されたキスとを検索クリップボードにコピーして、アプリケーションを切り替え、その文字列を見つけるために、⌘Gを使用できます。

それに加え、TextMateは選択範囲を置換クリップボードにコピーする、⇧⌘Eを提供します。これは検索ダイアログに移動せずにすむため便利です。例えば、もし、アイテムのリストのために改行をパイプ文字(|)と置換したい場合、改行を選択し、それを検索文字列として使うために⌘Eを押してください。そして、|とタイプし、選択して、それが置換クリップボードにコピーされるように⇧⌘Eを押してください。

次のステップは、ドキュメント全体に対して置換を実行するために⌃⌘Fを押すか、置換を実行したい範囲を選択して⌃⇧⌘Fを押してください。

テキストの移動

インデントレベルを上げる/下げる

Textメニューには、Shift LeftとShift Rightアクションがあり、それぞれ ⌘[ と ⌘]が割り当てられています。これらは、一つのタブのサイズ毎にインデントの上げ、下げをします。

多くのヨーロッパのキーレイアウトでは、このキーはかなりやりにくい、ので、これに加えて、⌥⇥ と ⌥⇤を使うことができます。(⇤は⇧⇥を使って実現できます。)

テキストを上下左右に移動する

もし、一行やブロックを数行分上下に動かしたり、一単語/カラムを動かしたい場合は、⌃⌘をホールドして、矢印キーで選択範囲を動かせます。選択範囲なしだと、行を上下に移動します。

テキストをインデントし直す

それを選択して、Text → Indent Selectionを使うことができます。(もし選択範囲がない場合は現在の行をインデントします。)

The rules for estimating the indent are setup per-language using [bundle preferences][PreferencesItems]. For more details see the [indentation rules section][IndentRules].

インデントの見積もりのルールは[バンドル設定を使って][PreferencesItems]言語毎に設定されます。[インデントルールのセクション][IndentRules]詳しくはを見てください。

テキストの選択

テキストの選択は、通常の移動に使うキーを使いながら&#x21E7をホールドすることによってできます。それに加えて、Edit → Selectのサブメニューには現在の語、行、パラグラフ、取り囲んでいるブラケットとドキュメント全体を選択するアクションがあります。

複数の行を編集する

一定の長さの複数の行の末尾に文字を追加したり、このこれらの行の最後の部分を編集する必要がある場合がよくあります。

このためにあなたは検索と置換を使うことができますが、より簡単な方法は、編集される必要がある行を選択し、Text → Edit Each Line in Selection (⌥⌘A)を使うと、キャレットが選択範囲の最初の行の最後に置かれます。

そしてあなたは新しいテキストをタイプしたり、削除したり、戻って、もともとのテキストを編集したりできます。これは(その前に選択された)全ての行へミラーされます。このモードを終了するためには、現在の行からキャレットをはずしてください。

カラムの選択

カラムデータを⌥をホールドしてマウスで選択範囲を作る事によって、もしくは、普通の選択範囲を作り⌥を一度押すこと(選択範囲のふたつのタイプの間をトグルする)によってカラムデータを選択することが可能です。

カラムの選択にはは全ての普通のアクションが実行可能です。例えば、選択の移動、選択の置換、(行の)トランスポーズ、Textメニューからのアクション、シェルコマンドを通しての、選択範囲のフィルタリングなど。

カラムの移動/タイピング

矢印キーの上下を⌥といっしょに使って、キャレットを現在のカラムの最初/最後の列に移動します。選択するためには⇧をホールドしてください。

Column Data

例えば、上に示すようなカラムデータをもっていて、キャレットがfooの前にあるとき、⌥⇧↓をおせば、キャレトがfudの前に移動して、foofudの間のテキストが選択されます。

Column Movement

⌥を押せば幅がゼロのカラム選択にスイッチして、それぞれの行をタイプし始めてください。

Column Typing

もしくは、⌥⇧→を使い、⌥を使ってください。(カラムモードで)カラム全体が選択された状態になります。

Column Selection

スマートタブの振る舞い

行のはじめでタブキーを使うと、TextMateはその行にとって正しいタブの数を推測し挿入します。もし行にテキストがある場合は、キャレットはこのテキストの前へ移動します。

もし行にすでに正しいインデント(もしくはそれ以上のインデント)がある場合は、一つのタブが挿入されます。

スペルチェック

TextMateはシステムワイドの’Check Spelling as You Type(タイプしながらスペルチェック)’をサポートします。これはEdit → Spellingで変更可能です。

間違ってスペルが書かれた文字がスペリングのサジェスチョンを得るためにはコンテキストメニューを出すことができます。

TextMateは構造化されたテキストの使用を意図しているため、ドキュメントの一部をチェックの対象から除外することがかのうです。これは、バンドルエディタの[preferences item][PreferencesItems]を作り、spellChecking0に設定し、[スコープセレクタ][ScopeSelectors]をスペルチェックをしないターゲットのセレクタに書き入れることでできます。

デフォルトではスペルチェックはソースコードでは文字列とコメントを除いて、無効化されています。またHTML, LaTex, Markdownなどではキーワードやタグのようなものでも無効化されています。

タブの代わりにスペースを使う

TextMateはタブ文字の代わりにスペースを使うことができます。これは、ステータスバーの”Tab Size”ポップアップをクリックし、Soft Tabsを有効にすることによって可能です。

この設定はは現在の言語にのみ影響します、共通の基礎をもった全ての言語はそのオプションがまだセットされていません。同じ事がスペルチェックの状態やソフトラップ、実際のタブサイズについていえます。

Tab Size Settings

ソフトタブが有効な状態のとき、TextMateはたいていの場合まるであなたがハードタブを使っているかのように振る舞います、しかしドキュメントは実際にはスペースを含んでいます。 [ActivatingBundleItems]: bundles#activation-of-bundle-items [AutoPairs]: working_with_text#auto-paired-characters-quotes-etc [ColumnSelection]: working_with_text#column-selections [Commands]: commands [CompletionsPrefs]: preferences_items#completions [Completions]: working_with_text#completion [CustomizeSymbolList]: navigation_overview#customizing-the-list [DragCommands]: drag_commands [EnvVariables]: environment_variables [ExtendedAttributes]: saving_files#extended-attributes-metadata [Foldings]: navigation_overview#customizing-foldings [FormatStringConditionalInsertion]: regular_expressions#conditional-insertions [FormatString]: regular_expressions#replacement-string-syntax-format-strings [GoToFile]: working_with_multiple_files#moving-between-files-with-grace [HTMLOutput]: commands#html-output [IndentRules]: appendix#indentation-rules [KeyEquivalents]: bundles#key-equivalents [LanguageGrammars]: language_grammars [Macros]: macros [MailingListSearch]: getting_help#mailing-list [NamingConventions]: language_grammars#naming-conventions [PairedCharactersPrefs]: preferences_items#paired-characters [PreferencesItems]: preferences_items [PropertyListFormat]: appendix#property-list-format [RankingMatches]: scope_selectors#ranking-matches [RegularExpressions]: regular_expressions [ReIndentText]: working_with_text#re-indent-text [ScopedEnvVariables]: environment_variables#context-dependent-variables [ScopeSelectors]: scope_selectors [ShellCommands]: shell_commands [Snippets]: snippets [SourceBundle]: bundles#source [TerminalUsage]: using_textmate_from_terminal [TextMateURLScheme]: using_textmate_from_terminal#url-scheme-html [Themes]: themes [LC-CTYPE]: bundles#setting-lc_ctype [SupportFolder]: bundles#support-folder