snipMate-キーワード+ <tab>を使用して文書にテキストテンプレートをすばやく挿入でき、挿入されたテンプレートに便利なナビゲーションを提供します。
設置
- 拡張機能の最新バージョンをダウンロード- ここから 。
- アーカイブを解凍します。
- 内容を〜/ .vim /にコピーします
- プラグインがインストールされます。
set nocompatible filetype on filetype plugin on
スニペット
snipMateで使用されるテキストパターンは、スニペットと呼ばれます。
〜/ .vimフォルダーに同じ名前の個別のディレクトリがあります 。
ダウンロードしたアーカイブには、さまざまなプログラミング言語用のテンプレートの基本セットが含まれています。
Cのようなforループのテンプレートを使用してみましょう。このため、拡張子が.cまたは.cppのファイルで、挿入モードで<tab>を入力する必要があり(<tab>はタブキーを押すことを意味します) 、すぐに次の構造を取得します:
for (i = 0; i < count; i++) { /* code */ }
テンプレートには4つの編集可能なゾーンがあり、 タブキーを使用して切り替えることができます( Shift + Tabで逆切り替え)
for (/*2*/ = 0; /*2*/ < /*1*/; /*2*//*3*/) { /*4*/ }
フォーカスが次のゾーンに切り替わると、編集モードになっている間、つまり新しいテキストを入力すると古いゾーンが完全に消去される間、このゾーンが強調表示されます。
ゾーンの3つのインスタンス/ * 2 * /が表示されます。 これは、編集時に変更が3つのインスタンスすべてに適用されることを意味します。
単純なループを記述する例:
" for <tab> 100 <tab> myVar <tab> + = 10 <tab> // some "は次のコードフラグメントを作成します。
for (myVar = 0; myVar < 100; myVar+=10) { //some }
これが練習ビデオでの見た目です。
便利ですか? それはあなた次第です。
このプラグインで最も重要なことは、その拡張性です。 独自のテンプレートを開発し、それらを最大限に活用できます。
独自のスニペットを書く
すでに知っているように、すべてのスニペットは〜/ .vim / snippetsにあります
ダウンロードしたアーカイブにはファイル「syntax / snippet.vim」が含まれていることに注意してください。これは、お気に入りのエディターでスニペットファイルを編集する際の構文の強調表示に満足することを意味します。
- 必要な言語のスニペットファイルを開きます。
この場合、言語はCであるため、ファイルは〜/ .vim / snippets / c.snippetsです - 構文に従ってスニペットを追加します。
snippet < > < >
ここで、 <keyword>は<template body>を取得するためにTab キーを押す必要がある単語であり、テンプレートの最初の行で1つのタブをインデントする必要があります。 アクションを説明するために、 「#」文字で始まる小文字のコメントを使用できます。 コメントの使用は、テンプレートの本体の外部でのみ許可されます。 追加:
snippet hello printf("Hello, world!");
- ファイルを保存します。 「foo.c」を開き、 スニペットを確認します-編集モードでhello <tab>を入力します -printf( '' Hello、world! ''); 。
拡張テキスト
デフォルトでは、タブをクリックした後、カーソルはテンプレートの最後に配置されます。
- カーソルを目的の位置に設定するには、構造"$ {#}"を使用できます。
#はラベル番号(タブストップ)で、 タブが押されたときの移動の順序を決定します 。 - デフォルトのテキストは、 「$ {#:text}」を使用してラベルに添付できます。
- 特定のラベルのテキストを変更するときに連鎖反応の効果を得るには、変数構造"$#"を使用する必要があります。 #は、すでに使用されているテキストのラベルの番号です。 特定のラベルのテキストを変更すると、ラベルと同じ番号を持つすべての変数が変更されます。 このような「連鎖反応」の例は、 forループ、またはむしろ、カウンター変数の名前の変更です。
snippet sq ${1:int} $1_sqr($1 x){ return x*x; } ${2}
今それを適用します。 「foo.c」を開き、編集モードに入ります: sq <tab> double
その結果、以下が得られます。
double double_sqr(double x){ return x*x; }
たった2語で、関数の準備ができました!
オプションテンプレート
オプションを使用してテンプレートを定義すると便利な場合があります。 この設計は次のように実装できます。
snippet < > < 1> < 1> snippet < > < 2> < 2> ... snippet < > < N> < N>
テンプレートのすべての説明には同じキーワードがありますが、実装が異なります。 このようなテンプレートを使用しようとすると、ダイアログが表示され、すべての適切なテンプレートの説明を確認し、目的の番号を入力して選択を行うことができます。
前の例の関数のテンプレートを再定義してみましょう。
snippet sq int_sqr int int_sqr(int x){ return x*x; } snippet sq double_sqr double double_sqr(double x){ return x*x; } snippet sq someType_sqr someType someType_sqr(someType x){ return x*x; }
編集モードでsq <tab>を入力すると、次のダイアログが表示されます。
1. int_sqr 2. double_sqr 3. someType_sqr Type number and <Enter> or click with mouse (empty cancels):
関数を取得するには、1つの単語を入力して選択するだけです。
Vimスクリプトを使用する
テンプレートには、スニペットがドキュメントに挿入されるときに解釈されるwimスクリプトの抜粋が含まれる場合があります。 外部コマンドを実行し、出力を挿入ポイントに送るsystem()関数は非常に便利です。 スクリプトは`` (多くの場合''と混同される)で取得する必要があります。
system()を使用した例を見てみましょう。
snippet today Today is `system("date +%Y-%m-%d")`
挿入すると、次のようになります: 今日はYYYY-MM-DD
パターンセットの組み合わせ
1つのドキュメントを編集するときに複数のファイルからスニペットをアクティブにするには、次の手順を使用します。
:set ft=<currentFiletype>.<otherFiletype>
構文の強調表示が失われないように、現在の編集済みファイルのタイプを最初に示す必要があることに注意してください。 たとえば、 * .cを編集するときにHTMLテンプレートをアクティブにするには、次を実行する必要があります。
:set ft=c.html
これが誰かに役立つことを願っています。 snipMateの詳細については、ファイル〜/ .vim / doc / snipMate.txtを参照してください 。
参照資料
Vim公式ページ
vim.orgのSnipMateページ
デモビデオ