Up: 目次   [Index]


插入モードと置換モード

*insert.txt*    For Vim バージョン 8.1.  Last change: 2019 Oct 20


		  VIMリファレンスマニュアル    by Bram Moolenaar

テキストの插入と置換

このファイルの大部分は插入と置換モードについて記述してゐます。終はりのはうにテキストを插入する別の方法を記述してゐます。

よく使はれるコマンドの槪要がユーザーマニュアルの 24 章 |usr_24.txt| にあります。

1. 特別なキー|ins-special-keys|
2. もつと特別なキー|ins-special-special|
3. ’textwidth’ と ’wrapmargin’ オプション|ins-textwidth|
4. ’expandtab’, ’smarttab’ それと ’softtabstop’ オプション|ins-expandtab|
5. 置換モード|Replace-mode|
6. 假想置換モード|Virtual-Replace-mode|
7. 插入モードの補完|ins-completion|
8. 插入モードのコマンド|inserting|
9. Ex の插入コマンド|inserting-ex|
10. ファイルを插入する|inserting-file|

文字のない場所にカーソルと移動するためには ’virtualedit’ も參照してください。表を編輯するときに便利です。

1. 特別なキー

插入と置換モードでは、以下の文字には特別な意味があります。その他の文字はそのまま入力されます。それらの特別な文字をバッファに入力するには、CTRL-V に續けて入力します。<Nul> 文字を入力するには "CTRL-V CTRL-@" か "CTRL-V 000" を使用します。あるシステムでは、CTRL-C を入力するのに "CTRL-V 003" を使はなければなりません。

Note:
CTRL-V に他の動作がマップされてゐるときは、多くの場合、代はりに CTRL-Q を使ふことに注意してください |i_CTRL-Q|。

テキストを入力する際に特別な言語のモードを使用してゐる場合、いつもこのモードが ON/OFF と切り替へられてしまふのをどう避けるかを知るには ’langmap’ オプション (|'langmap'|) を參照してください。

insertmode’ を設定した場合には、<Esc> と他の幾つかのキーに別の意味が與へられます。|'insertmode'| を參照してください。

文字

アクション

<Esc> または
CTRL-[

插入/置換モードを終了してノーマルモードに戾ります。短縮入力を終了します。

Note:
キーボードによつては <Esc> を押しづらいかもしれませんが、その時には CTRL-[ を使へるやうに練習しませう。

あなたが Mac を使用してゐて Esc が效かないときは CTRL-Esc を試してください。または、アクセシビリティ設定の音聲認識を無效にしてください。

{譯注: かつての macOS において、環境設定 -> アクセシビリティ -> ’Speakable Items’ と辿ると ’Listening Key’ タブがあり、ここで "Listening Key: Esc" となつてゐました。デフォルトで Esc が使はれるやうになつてゐるので、問題が生じる可能性があつたのでせう。この設定部分は、現在 (10.14) においては、キーボード -> 音聲入力 -> ショートカットとなり、デフォルトではオフになつてゐます。

どうやら Ver 7.0001 (Jun 13 2004) 以降に追記された部分のやうなので、10.3 の頃のやうです。手持ちの Panther で調べてみますと、システム環境設定 -> スピーチ -> 音聲認識 -> ’リスニング’ タブで "リスンキー: Esc" となつてゐました。’入/切’ タブで "Apple Speakable Items は:" のラジオボタンを "切" とすれば良いわけです。}

CTRL-C

插入モードを終了してノーマルモードに戾ります。短縮入力はチェックしません。CTRL-C で插入モードを拔けると |InsertLeave| が發生しません。

CTRL-@

直前に插入されたテキストをもう一度插入して插入を終了します。

CTRL-A

直前に插入されたテキストをもう一度插入します。

<BS> または
CTRL-H

カーソルの前の文字を削除します (行同士の連結については |i_backspacing| を參照してください)。

<BS> キーが想定するやうに働かない場合には |:fixdel| を參照してください。

<Del>

カーソルの下の文字を削除します。カーソルが行末にあり、’backspace’ オプションに "eol" が含まれてゐる場合には、<EOL> が削除されます; 現在の行の後ろに次の行が接續されます。

<Del> キーが想定するやうに働かない場合には |:fixdel| を參照してください。

CTRL-W

カーソルの前にある單語を削除します (行同士の連結については |i_backspacing| を參照してください)。單語の定義については "word motions" の節 |word-motions| を參照してください。

CTRL-U

現在の行のカーソルの前に入力された文字を全部削除します。新しく入力した文字が無く ’backspace’ が空ではない時は、カーソル前の全ての文字を削除します。行同士の連結については |i_backspacing| を參照してください。

<Tab> または
CTRL-I

タブを插入する。’expandtab’ オプションが設定されてゐれば、同じ數の空白文字が插入されます (展開を避けるためには CTRL-V <Tab>を使ひます。CTRL-V に他の動作がマップされてゐるときは CTRL-Q <Tab> を使ひます |i_CTRL-Q|)。’smarttab’ オプションと |ins-expandtab| も參照してください。

<NL> または
CTRL-J

新しい行を始めます。

<CR> または
CTRL-M

新しい行を始めます。

CTRL-K {char1} [char2]

ダイグラフ (|digraphs| を參照してください) を入力します。{char1} が特別なキーだつた場合、そのキーのコードが <> の形で插入されます。例へば、<C-K><S-Space> (キー 2 つ) と入力することで、文字列 "<S-Space>" が入力されます。マッピングも考慮されません。

CTRL-N

次のキーワードを探します (|i_CTRL-N| を參照してください)。

CTRL-P

前のキーワードを探します (|i_CTRL-P| を參照してください)。

CTRL-R {register}

レジスタの內容を插入します。CTRL-R をタイプしてから 2 つ目の文字をタイプするまで、レジスタの名前の入力が期待されてゐることを示すために ’"’ が表示されます。

テキストはタイプしたかのやうに插入されますが、マッピングや短縮入力の展開はされません。’textwidth’, ’formatoptions’ や ’autoindent’ のやうなオプションが設定されてゐる場合には、入力されたテキストに對して效力を持ちます。これは "p" コマンドやマウスによる貼り付けとは違ふ動作になります。

特別なレジスタ:

’"’最後に削除されたりヤンクされたテキストの入つてゐる、名前なしレジスタ
’%’現在のファイル名
’#’代替バッファのファイル名
’*’クリップボードの內容 (X11: プライマリセレクション)
’+’クリップボードの內容
’/’最後に檢索を行つたパターン
’:’最後に實行したコマンドライン
’.’最後に插入したテキスト
’-’最後に削除した小さい (行單位以下の) 領域
’=’式評價レジスタ: 式評價の入力を求められます (|expression| を參照してください)。

Note:
0x80 (10 進數で 128) は特殊なキーのために使はれることに注意してください。例: 次のコマンドでカーソルを上に移動できます:

CTRL-R ="\<Up>"

文字をそのまま插入するには CTRL-R CTRL-R を使つてください。

結果が |List| のときは各要素を行として插入します。要素の中に改行文字を含むこともできます。

結果が浮動小數點數のときは自動的に文字列に變換されます。

append() や setline() が使はれると undo シーケンスが分割されます。

レジスタについては |registers| を參照してください。

CTRL-R CTRL-R {register}

レジスタの內容を插入します。CTRL-R が 1 つの時と同樣に働きますが、タイプされたやうにではなく、テキストは文字通りに插入されます。これはレジスタに <BS> のやうな文字が含まれてゐた場合に違ひを生じます。例へば "ab^Hc" といふ內容のレジスタ a があつた場合:

CTRL-R a            結果は "ac".
CTRL-R CTRL-R a     結果は "ab^Hc".

textwidth’ や ’formatoptions’ などのオプションは適用されます。これらのオプションを無效にするには "<C-R><C-O>r" を使用します。’.’ レジスタ (最後に插入されたテキスト) だけは CTRL-R と同樣に、タイプされたやうに插入されます。

CTRL-R CTRL-O {register}

レジスタの內容が文字通り插入され、自動字下げも行はれません。マウスによる貼り付け |<MiddleMouse>| と同じです。レジスタが linewise の時は、テキストを ‘P‘ と同樣に現在行の上に插入します。

キャラクタは置き換へません!

’.’ レジスタ (最後に插入されたテキスト) だけは、CTRL-R と同樣に、タイプされたやうに插入されます。

CTRL-R CTRL-P {register}

レジスタの內容が文字通りに插入され、インデントが |[<MiddleMouse>| と同樣に修正されます。

キャラクタは置き換へません!

’.’ レジスタ (最後に插入されたテキスト) だけは、CTRL-R と同樣に、タイプされたやうに插入されます。

CTRL-T

現在の行の先頭に shiftwidth 一單位分の字下げを插入します。字下げ幅は ’shiftwidth’ に丸められます (これは vi と同じです)。

CTRL-D

現在の行の先頭の字下げを shiftwidth 一單位分削除します。字下げ幅は ’shiftwidth’ に丸められます (これは vi と同じです)。

0 CTRL-D

現在行の字下げを完全に削除します。

^ CTRL-D

現在行の字下げを完全に削除します。次の行では字下げは元に戾されます。これはラベルを入力する際に役に立ちます。

CTRL-V

續く非數字文字を文字通りに插入します。特別なキーはターミナルコードが插入されます。10 進數、8 進數、16 進數、の數字で文字コードを直接指定することもできます |i_CTRL-V_digit|。CTRL-V の後の入力にはマップは適用されません。

Note:
CTRL-V に他の動作がマップされてゐるとき (例へばテキストをペーストするなど)、その場合には代はりに CTRL-Q を使用することに注意してください |i_CTRL-Q|。

CTRL-Q

CTRL-V と同じです。

Note:
ある種のターミナルでは CTRL-Q を使用できないことに注意してください。GUI では使へます。

CTRL-X

CTRL-X モードに入ります。これは單語の補完やウィンドウスクロールのコマンドを入力するサブモードです。|i_CTRL-X| と |ins-completion| を參照してください。

CTRL-E

カーソルの下の行の同じ位置の文字を插入します。

CTRL-Y

カーソルの上の行の同じ位置の文字を插入します。

Note:
textwidth’ は CTRL-ECTRL-Y には、長い行から文字をコピーすることを可能にするために、效力を發揮しないことに注意してください。

CTRL-_

次に示すやうに言語を切り替へます:

CTRL-_ はカーソルをタイプ濟みテキストの末尾に移動させます。

このコマンドは ’allowrevins’ オプションが設定されてゐる時のみ有效です。

右→左モードについての詳しい情報は |rileft.txt| を參照してください。

{|+rightleft| 機能を有效にしてコンパイルした時にだけ使用可能}

CTRL-^

入力言語を切替へます。

言語マッピング |:lmap| が定義されてゐるとき:

言語マッピングが定義されてゐないとき:

iminsert’ を 1 にすると "b:keymap_name" の値、または ’keymap’ オプションか "<lang>" がステータスラインに表示されます。言語マッピングは通常はキーボードにない文字を打つのに使はれます。これらの値を設定するために ’keymap’ オプションを使ふことができます。

CTRL-]

文字を入れることなく、短縮入力をトリガーします。

<Insert>

插入と置換モードを交互に切り替へます。

<BS>, CTRL-W そして CTRL-U の效果は ’backspace’ オプションに依存してゐます (’revins’ が設定されてゐなければ)。これは下記の項目をコンマで區切つたリストになつてゐます:

項目アクション
indent字下げをバックスペースで消去可能
eol行末をバックスペースで消去可能 (行を連結)
start插入の開始點を超えてバックスペースで消去可能; CTRL-WCTRL-U は一度スタート地點で停止します。

backspace’ が空の時、Vi 互換のバックスペースが使用されます。自動字下げや、第 1 カラムの前、そして插入の開始點を超えてのバックスペースはできません。

下位互換性のために、値として "0", "1" そして "2" を使用することもできます。|'backspace'| を參照してください。

backspace’ オプションが "eol" を含まれてゐる時に、カーソルが第 1 カラムにあり、3 つのキーのうちどれかが押されると、現在の行が 1 行前の行に連結されます。これはカーソルの前にある <EOL> を事實上消してゐます。

CTRL-V に續けて、10 進數、8 進數、16 進數のどれかで文字コードを直接入力することができます。この方法で改行 (<NL>, 數値 10) 以外のどんな文字でも入力することができます。文字コードを入力するには 5 つの方法があります。

最初の文字モード最大文字數最大値
(なし)10 進數3255
o か O8 進數3377 (255)
x か X16 進數2ff (255)
u16 進數4ffff (65535)
U16 進數87fffffff (2147483647)

入力できる文字數の最大まで入力すると、例へば <C-V>032 と入力した場合にはスペース (値 32) が入ります。一番上の桁のゼロは省略することができます。その場合には數値を入力した後に入力する文字は數字以外でなければなりません。これは他のモードでも同じです。モード中で無效な文字を入力した場合には、それ以前に入力されたものが使はれ無效な文字は通常の入力として扱はれます。

値 10 を入力すると、それは 0 になつてしまひます。數値 10 は <NL> であり、內部で <Nul> 文字を表すのに使はれてゐます。バッファをファイルに書き出すときに <NL> は <Nul> に變換されます。<NL> は各行末に出力されるので、<NL> をファイルに書きたければ改行してください。

CTRL-X を押すと、幾つかのコマンドを使用することができる、サブモードに入ります。これらのコマンドの多くはキーワードの補完です; |ins-completion| を參照してください。

次の 2 つのコマンドは、插入モードを拔けることなくウィンドウを上下にスクロールさせることができます:

CTRL-X CTRL-E

ウィンドウを 1 行上にスクロールします。補完途中での機能については |complete_CTRL-E| を參照してください。

CTRL-X CTRL-Y

ウィンドウを 1 行下にスクロールします。補完途中での機能については |complete_CTRL-Y| を參照してください。

CTRL-X を押した後に CTRL-E (もしくは CTRL-Y) を押すと、現在のファイル內でカーソルを現在の位置から動かすことなく、ウィンドウが 1 行上 (下) にスクロールします。關係ないキーが押されると、すぐに CTRL-X モードは終了し、そのキーが插入モードで押されたものとして解釋されます。

2. もつと特別なキー

下記のキーは特別なものです。これらは現在の插入を中斷し、何かを行ひ、そして插入を再開します。これは插入モードを出ることなく、何かをすることができることを意味してゐます。これはモードが分かれてゐない普通のエディタのやうに、常に插入モードを使用するのが好みの場合には、とても便利です。これには ’backspace’ オプションに "indent,eol,start" を設定し、’insertmode’ オプションを設定すると良いでせう。コマンドにファンクションキーをマップしたいならば、CTRL-O を使ふことができます。

これらのキーを使用する前後の變更 (文字の插入や削除) は、別々に取り消すことができます。最後の變更だけがやり直すことができ、常に "i" コマンドのやうに振舞ひます。

charaction
<Up>カーソルを 1 行上へ移動する
<Down>カーソルを 1 行下へ移動する
CTRL-G <Up>1 行上の、插入開始位置と同じ列へ移動
CTRL-G k1 行上の、插入開始位置と同じ列へ移動
CTRL-G CTRL-K1 行上の、插入開始位置と同じ列へ移動
CTRL-G <Down>1 行下の、插入開始位置と同じ列へ移動
CTRL-G j1 行下の、插入開始位置と同じ列へ移動
CTRL-G CTRL-J1 行下の、插入開始位置と同じ列へ移動
<Left>カーソルを 1 文字左へ移動する
<Right>カーソルを 1 文字右へ移動する
<S-Left>カーソルを 1 單語前へ ("b" コマンドのやうに)
<C-Left>カーソルを 1 單語前へ ("b" コマンドのやうに)
<S-Right>カーソルを 1 單語後へ ("w" コマンドのやうに)
<C-Right>カーソルを 1 單語後へ ("w" コマンドのやうに)
<Home>カーソルを行の最初の文字へ
<End>カーソルを行の最後の文字の後へ
<C-Home>カーソルをファイルの最初の文字へ
<C-End>カーソルをファイルの最後の文字の後へ
<LeftMouse>カーソルをマウスでクリックした位置へ
<S-Up>1 ページ上へ
<PageUp>1 ページ上へ
<S-Down>1 ページ下へ
<PageDown>1 ページ下へ
<ScrollWheelDown>ウィンドウを 3 行下へ移動
<S-ScrollWheelDown>ウィンドウを 1 ページ下へ移動
<ScrollWheelUp>ウィンドウを 3 行上へ移動
<S-ScrollWheelUp>ウィンドウを 1 ページ上へ移動
<ScrollWheelLeft>ウィンドウを 6 列左へ移動
<S-ScrollWheelLeft>ウィンドウを 1 ページ左へ移動
<ScrollWheelRight>ウィンドウを 6 列右へ移動
<S-ScrollWheelRight>ウィンドウを 1 ページ右へ移動
CTRL-O1 つコマンドを實行して、插入モードに戾る
CTRL-\ CTRL-OCTRL-O と同じですが、カーソルを移動させない
CTRL-Linsertmode’ がオンのとき: ノーマルモードへ
CTRL-G uundo で元に戾す地點を新たに設定
CTRL-G Uカーソルが同じ行內にある場合、次の左右へのカーソル移動で undo を分割しない

Note:
カーソルキーを押した時に插入モードから拔けてしまつたら、’noesckeys’ オプションをチェックしてください。

CTRL-O コマンドは時々、副作用を生じます: カーソルが行末を越えてゐる場合に、行の最後の文字の上へ移動してしまふかもしれません。マッピングでは <Esc> を使ふのが無難です (まず "x" を入力し、<Esc> を押すとカーソルは常にその文字の上に置かれます)。または CTRL-\ CTRL-O を使ひます。しかしその場合はカーソルが行末を越えてしまふ可能性があることに注意してください。

Note:
CTRL-\ CTRL-O で實行するコマンドではカーソルを移動することができます。カーソル位置は復元されません。

CTRL-O コマンドはノーマルモードに移動します。それから插入モードに入るコマンドを再度使用しても、通常はモードが入れ子になるわけではありません。そのため、"a<C-O>a" と入力してから <Esc> を押した場合にはノーマルモードに戾ります。<Esc> を 2 度タイプする必要はありません。タイピングではない方法、例へばマッピングや source したスクリプトから實行した時は例外で、モードは入れ子になります。そのため上記の「"a<C-O>a" と入力してから <Esc>」をマッピングにより入力した場合には、ノーマルモードではなく插入モードになります。

Shift キーを押しながらのカーソルキー操作は、全ての端末で可能なわけではありません。

別の副作用としては、"i" や "a" コマンドでの回數指定が無視されることです。さうしないと CTRL-O でのコマンドの繰り返しが複雜になつてしまふからです。

CTRL-G u を使ふ例:

:inoremap <C-H> <C-G>u<C-H>

これは undo できるバックスペースキーを再定義してゐます。これで以前の入力を變更することなく CTRL-O u を使つてバックスペースの結果を元に戾せます。もう 1 つの例:

:inoremap <CR> <C-]><C-G>u<CR>

これは改行ごとに undo を分割します。また、それを行ふ前に短縮入力の展開も行ひます。

CTRL-G U の使用例:

inoremap <Left>  <C-G>U<Left>
inoremap <Right> <C-G>U<Right>
inoremap <expr> <Home> col('.') == match(getline('.'), '\S') + 1 ?
\ repeat('<C-G>U<Left>', col('.') - 1) :
\ (col('.') < match(getline('.'), '\S') ?
\     repeat('<C-G>U<Right>', match(getline('.'), '\S') + 0) :
\     repeat('<C-G>U<Left>', col('.') - 1 - match(getline('.'), '\S')))
inoremap <expr> <End> repeat('<C-G>U<Right>', col('$') - col('.'))
inoremap ( ()<C-G>U<Left>

これにより undo を分割することなくカーソルキーを插入モード內で使ふことができ、|.| (および redo) は期待通りに動作するやうになります。また次のやうな (上記の "(" マッピングをともなふ) テキスト入力:

Lorem ipsum (dolor

は |.| によつて期待通り繰り返すことができるやうになります。

Lorem ipsum (dolor)

CTRL-O は undo 位置を分割します。つまり、その前後に入力したテキストが別々に undo されるやうになります。これを避けたい場合 (マッピングの中などで) は CTRL-R = |i_CTRL-R| が使へるでせう。例: 函數を呼ぶ:

:imap <F2> <C-R>=MyFunc()<CR>

whichwrap’ オプションが適切に設定されてゐるなら、行の先頭/末尾での <Left><Right> キーは、カーソルを上の行や下の行へ移動させます。

CTRL-G jCTRL-G k コマンドはカラムの前にテキストを插入するのに使ふことができます。例:

int i;
int j;

カーソルが最初の "int" にあるとき、"istatic <C-G>j " と入力するとかうなります:

static int i;
int j;

全ての行のカラムに同じテキストを插入するには矩形ビジュアルコマンド "I" |v_b_I| を使ひます。

3. ’textwidth’ と ’wrapmargin’ オプション

textwidth’ オプションは入力中の行が長くなりすぎる前に、自動的に改行を行ふために使ふことができます。’textwidth’ オプションには望む最大行長を設定します。それを超えて文字 (空白とタブを除く) を入力すると、最後の單語が (それがその行の唯一の單語で無いならば) 次の行に置かれます。’textwidth’ に 0 を設定すれば、この機能を無效にすることができます。

wrapmargin’ オプションはこれとほとんど同じことをします。違ひは ’textwidth’ は固定幅なのに對して、’wrapmargin’ はスクリーンの幅に依存します。’wrapmargin’ を使用することは、’textwidth’ に (スクリーンのカラム數 - ’wrapmargin’ に與へた値) を設定することと同じです。

textwidth’ と ’wrapmargin’ が兩方とも設定されてゐた場合には、’textwidth’ が使用されます。

もしも本當には改行をしたくないけれども、見かけ上は具合の良い場所で折り返されてほしい場合には、’linebreak’ オプションを參照してください。

自動的に改行されるのは、插入モードを使用してゐる時か、行に追加してゐる時だけです。置換モードで行の長さが變はらない時には、改行は行はれない。

長い行は、マージンを超えて非空白文字を入力すると改行されます。この改行がなされる位置は、’formatoptions’ オプションに與へる文字で制禦することができます:

"l"

插入を始めた時に ’textwidth’ よりも既に長くない時にだけ、改行を行ひます。

"v"

現在の插入コマンドの閒に插入された空白文字の位置でのみ、改行を行ひます。これはほぼ Vi 互換です。

"lv"

插入を始めた時に ’textwidth’ よりも長くない行にだけ、かつその插入コマンドの閒に插入された空白文字の位置でのみ、改行を行ひます。’textwidth’ の境界を越えて非空白文字を入力した時に、"l" と違ひます。

通常は、どこで改行するかを內部函數を使つて決定します。この擧動を變へたい場合は、’formatexpr’ に改行を處理する式を設定してください。

テキストのブロックを整形 (format) したいなら、"gq" オペレータを使ふことができます。"gq" に續けて、ブロックの末尾までカーソルを動かす移動コマンドをタイプすします。多くの場合、コマンド "gq}" が望むこと (段落の最後までを整形) をしてくれるでせう。代はりに、現在カーソルがどこにあるかにかかはらず、パラグラフ全體をフォーマットしてくれるコマンド、"gqap" を使ふこともできます。またはビジュアル選擇モードを使ふこともできます: "v" を押し、ブロックの最後まで移動し、"gq" とタイプします。|gq| も參照してください。

4. ’expandtab’, ’smarttab’ それと ’softtabstop’ オプション

expandtab’ オプションがオンになつてゐると、タブ文字は空白文字 (スペース) に展開され、その空白文字が插入されます。もし本當の <Tab> 文字を插入したいのなら、CTRL-V を押してから入力します (CTRL-V に他の動作がマップされてゐるときは CTRL-Q を使ひます |i_CTRL-Q|)。

expandtab’ は初期狀態でオフになつてゐます。置換モードでは、1 文字が複數のスペースで置換されることに注意してください。この結果、行の中の文字數は增えます。バックスペースをすると、1 度に 1 つの空白が削除される。元々そこにあつた文字は、1 つのスペース (最後の 1 つ) を削除しただけで元に戾されます。

smarttab’ オプションがオンの時には、1 度の <Tab> で、行の先頭で <Tab> を 1 度押すと ’shiftwidth’ の位置まで、その他の場所では ’tabstop’ の位置まで空白が插入されます。これは <Tab> 文字の代はりに、度々スペースが插入されることを意味してゐます。’smarttab’ がオフの時には、<Tab> では常に ’tabstop’ の位置まで空白が插入され、’shiftwidth’ は ">>" などの時にだけ使用されます。

softtabstop’ オプションがゼロではない時、<Tab> は ’softtabstop’ で指定されるタブ位置まで空白を插入し、<BS> は ’softtabstop’ で指定されるタブ位置までの空白を削除します。これは ’softtabstop’ に指定した値を ’tabstop’ に設定したのと同樣に働きますが、本當の <Tab> 文字は依然として ’tabstop’ の幅に展開されるので、他のアプリケーションでそのファイルを使ふ時にも正しく表示されるでせう。

もしも ’softtabstop’ がゼロでないなら、直前に插入された文字が 1 つの空白文字 (スペース) で、そのカーソルの直前の (空白) 文字だけを削除する時を除いて、<BS> は空白文字を 1 つ前の ’softtabstop’ の位置まで削除しようと試みます。さうでないとカーソルの直前の單一の文字を消すといふことができなくなつてしまひます。まづ ’softtabstop’ のキャラクタを消して、それから望む場所にカーソルを持つていくために、餘分な空白文字を置く必要があります。

5. 置換モード

ノーマルモードで "R" コマンドを使ふと置換モードに入ります。

置換モードでは、あなたが文字をタイプするごとに行中の 1 文字が削除されていきます。(行末で) 消す文字が無い場合、タイプされた文字は (插入モードのやうに) 追加されます。このため、1 行中の文字數は行末に到達するまでは同じままです。<NL> がタイプされると、文字は消されずに改行が插入されます。

<Tab> 文字には注意してください。<Tab> のある場所に通常の印刷可能文字をタイプすると、文字數は同じだけども、見た目上のカラム數はより短くなつてしまひます。

置換モードで (<BS>, CTRL-W もしくは CTRL-U によつて) 文字を消す場合、變更を取り消すことになります。置き換へられた文字は復歸します。存在していたテキストよりも多くタイプしてゐた場合には、その追加した分は削除されます。これは效果的に 1 度に 1 文字ずつの UNDO になります。

expandtab’ オプションがオンの場合、<Tab> は幾つかのスペースで置き換へられます。結果として行中の文字數は增えることになります。バックスペースは 1 度に 1 つの文字を消します。もともとの文字は 1 つのスペース (最後の 1 つ) をバックスペースするだけで戾されます。

6. 假想置換モード

ノーマルモードで "gR" コマンドを使ふと假想置換モードに入ります。

{|+vreplace| 機能を付けずにコンパイルした場合は利用できません}

假想置換モードは置換モードに良く似てゐますが、ファイルの實際の文字ごとにではなく、スクリーン上の文字幅單位で置換することができ、そのためファイル內の他の文字の見た目の位置が移動することがありません。

<Tab> をタイプすると通常のキャラクタを幾つか置換し、また <Tab> の先頭で文字をタイプすると <Tab> は以前と同じ場所に存在することになるから、何も置換されないことになります。

<NL> をタイプしても、ファイル內の後の文字がその (見かけ上の) 位置を變へることはありません。現在行の殘りの部分は <NL> によつて置き換へられ (それはつまり、消されるといふこと)、次の行で置換が續行されます。ファイルの終端に達するまで、新しい行は插入されません。

CTRL-TCTRL-D を使用したときには面白い效果があります。カーソルの前のキャラクタは普通に橫にシフトされますが、しかしカーソルの後のキャラクタはそのままそこに殘らうとします。CTRL-T はシフトされた文字の下にある古い行を隱していきますが、CTRL-D はそれらを再び表示してくれます。

置換モード同樣に、<BS> 他を使用すると、置換されてしまつた文字を戾すことができます。この機能は ’smartindent’, CTRL-T それに CTRL-D, ’expandtab’, ’smarttab’, ’softtabstop’, その他などが考慮されます。

’list’ モードで ’cpoptions’ に "L" が含まれない時には、假想置換モードはまるで ’list’ モードでないかのやうに振舞ひます。

Note:
カーソルより後ろの文字が移動して見えることがありますが、それは List モード |'list'| がオンのとき、そしてまれに ’wrap’ がオンのとき (そして變更によつて行の長さがスクリーンの幅より短くなるか長くなるとき) だけであることに注意してください。それ以外では、後ろの文字が動かないやうにスペースが插入されます。

このモードは <Tab> でカラムが區切られた表へ、新しいデータをカラムを揃へて入力するやうな編輯作業に便利です。

7. 插入モードの補完

插入・置換モードでは、既にタイプしたキーワードや行の一部を補完するコマンドを使用することができます。これは複雜なキーワード (例へば大文字やアンダースコアを含む函數名など) を使用してゐるときに便利です。

補完には次のやうな種類があります:

7.1. 行全體|i_CTRL-X_CTRL-L|
7.2. 現在のファイルのキーワード|i_CTRL-X_CTRL-N|
7.3. ’dictionary’ のキーワード|i_CTRL-X_CTRL-K|
7.4. ’thesaurus’ のキーワード, thesaurus-style|i_CTRL-X_CTRL-T|
7.5. 編輯中と外部參照してゐるファイルのキーワード|i_CTRL-X_CTRL-I|
7.6. タグ|i_CTRL-X_CTRL-]|
7.7. ファイル名|i_CTRL-X_CTRL-F|
7.8. 定義もしくはマクロ|i_CTRL-X_CTRL-D|
7.9. Vim のコマンドライン|i_CTRL-X_CTRL-V|
7.10. ユーザー定義補完|i_CTRL-X_CTRL-U|
7.11. オムニ補完|i_CTRL-X_CTRL-O|
7.12. スペリング補完|i_CTRL-X_s|
7.13. ’complete’ のキーワード|i_CTRL-N| |i_CTRL-P|

CTRL-NCTRL-P を除くこれらの全ては、CTRL-X モードで動作します。CTRL-X モードとは插入・置換モードのサブモードです。CTRL-XCTRL-X コマンドのどれか 1 つをタイプすることで CTRL-X モードに移行します。CTRL-X モードから拔けるには、CTRL-X コマンドとして有效ではないキーをタイプします。有效なキーとは CTRL-X コマンドそれ自身、CTRL-N (次の候補)、そして CTRL-P (前の候補)です。

現在の補完の情報を取得するには、|complete_info()| を使用することができます。マッチの大文字/小文字を調節したいのならばオプション ’infercase’ を參照してください。

補完が動作中のとき、CTRL-E で補完を中止し、もともと入力したテキストに戾すことができます。CTRL-E は插入されません。

ポップアップメニューが表示されてゐるとき、CTRL-Y で補完を中止し、現在選擇されてゐる候補を插入することができます。CTRL-Y は插入されません。スペース、エンターなど unprintable な文字を入力すると、その文字を插入して補完モードを終了します。

ポップアップメニューが表示されてゐるときに使へる特殊なキーがもういくつかあります。|popupmenu-keys| を參照してください。

Note:
CTRL-X モードでの有效なキーはマップされません。これは ":map ^F ^X^F" な指定を可能にします (^F と ^X はそれぞれ CTRL-F と CTRL-X の意味)。これに對して、CTRL-X モードを終了させるキー (つまり CTRL-X モードのコマンドとして有效ではないキー) はマップされます。’complete’ を使つて補完をするとき、マップは通常通りに適用されます。

Note:
補完が動作中は、再歸的に插入モードに入ることはできないことに注意してください。":normal i.." のやうなマッピングを使ふとエラー E523 が發生します。

次のマッピングは補完コマンドのタイピングをちよつとだけ樂にしようと提案されました (これらは他のコマンドを覆ひ隱してしまふけれども):

:inoremap ^] ^X^]
:inoremap ^F ^X^F
:inoremap ^D ^X^D
:inoremap ^L ^X^L

例外として、レジスタの値を插入する CTRL-R は CTRL-X モードを終了しません。これは主に ’=’ レジスタを使つて函數などを呼び次の操作を決定することを可能にします。レジスタの內容 (や ’=’ レジスタの評價結果) が CTRL-X モードで無效なキーだつた場合、それが入力されたものとして CTRL-X モードは終了します。

以下のものは現在の行がスペースだけなら <Tab> を入力し、違ふなら CTRL-N の補完をする <Tab> をマッピングする例です:

function! CleverTab()
   if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
      return "\<Tab>"
   else
      return "\<C-N>"
   endif
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>

7.1. 行全體を補完する

CTRL-X CTRL-L

現在行のカーソルの前にあるのと同じ文字で始まる行を、後方 (上方向) に探します。インデントは無視されます。見つかつた行がカーソルの前に插入されます。

どのバッファから探すのかを決める際に ’complete’ オプションが參照されます。讀み込まれたバッファ (loaded buffer) と讀み込まれてゐないバッファ (unloaded buffer) の兩方が對象となります。

CTRL-L または
CTRL-P

後方に、次にマッチする行を探します。これにより見つかつた行で、以前のマッチした行を置き換へます。

CTRL-N

前方に、次のマッチする行を探します。これにより見つかつた行で以前のマッチした行を置き換へます。

CTRL-X CTRL-L

行を展開した後で再び CTRL-X CTRL-L をタイプすれば、それに續けて付加的に行を取得することができ、CTRL-X を 2 回押すことで終了します。讀み込まれてゐるバッファのみが檢索對象となります。

7.2. 現在のファイルのキーワードで補完する

CTRL-X CTRL-N

カーソルの前にあるキーワードで始まる單語を、前方に檢索します。見つかつたキーワードはカーソルの前に插入されます。

CTRL-X CTRL-P

カーソルの前にあるキーワードで始まる單語を、後方に檢索します。見つかつたキーワードはカーソルの前に插入されます。

CTRL-N

次にマッチするキーワードを前方に檢索します。このキーワードは前囘マッチしたキーワードを置き換へます。

CTRL-P

次にマッチするキーワードを後方に檢索します。このキーワードは前囘マッチしたキーワードを置き換へます。

CTRL-X CTRL-N または
CTRL-X CTRL-P

續けて CTRL-X CTRL-NCTRL-X CTRL-P を使用することで、最後の展開に續けて違ふコンテキストで單語を補完することができます。これは CTRL-X を 2 度押すことで終了できます。

カーソルの直前にあるキーワード (アルファベットと ’iskeyword’ の文字で構成される名前) が、直前に "\<" (單語の開始の意味) が補われて檢索パターンとして使用されます。キーワードがない場合には "\<\k\k" (少なくとも 2 文字以上のキーワードの開始位置) が檢索パターンに用ゐられます。

置換モードでは、置換される文字數はマッチした文字列の長さに依存します。これはマッチした文字列を置換モードでタイピングしたのと同じやうに振舞ひます。

カーソルの直前に有效なキーワードの文字がなかつた場合、少なくとも 2 文字以上のあらゆるキーワードがマッチします。

例へば、次の結果を得るには:

printf("(%g, %g, %g)", vector[0], vector[1], vector[2]);

このやうにタイプします:

printf("(%g, %g, %g)", vector[0], ^P[1], ^P[2]);

檢索はファイルの最後から最初へ循環します。ここでは ’wrapscan’ の値は使はれません。

同じ補完結果が繰り返される場合にはそれがスキップされます; そのため CTRL-NCTRL-P を押すたびに違ふマッチ文字列が插入されることになります (1 つしかマッチするキーワードがない場合は除きます)。

マッチ結果が 1 文字となる補完候補文字列は、通常の使用で實際に補完して欲しいものではないことがほとんどなので、補完候補に含まれません。

例へば、次の結果を得るには:

printf("name = %s\n", name);

このやうにタイプします:

printf("name = %s\n", n^P);

こうでも良い:

printf("name = %s\n", ^P);

’\n’ の中の文字 ’n’ はスキップされます。

單語補完を開始した後で、補完濟み單語に續く單語を檢索するのに、CTRL-X CTRL-P もしくは CTRL-X CTRL-N を使ふことができます。これらのシーケンスはテキストから探され、單語を擴張補完し、さらに擴張補完していくことができます。これは複雜な單語のシーケンスを繰り返す必要があるときに役に立ちます。CTRL-PCTRL-N は少なくとも 2 文字以上の文字列を探しますが、CTRL-X CTRL-PCTRL-X CTRL-N は 1 文字の文字列も探します。

例へば、次の結果を得るには:

M&eacute;xico

このやうにタイプします:

M^N^P^X^P^X^P

CTRL-N は補完を開始し、CTRL-P で最初の 1 文字 "M" に戾し、次の 2 つの CTRL-X CTRL-P が "&eacute" と ";xico" を得ます。

直前の補完が ’textwidth’ よりも長いために分裂してゐる場合、現在の行のテキストだけが使用されます。

マッチ文字列が行末で見つかつた場合には、次の行の最初の單語が插入され "word from next line" といふメッセージが表示されます。さらに續けて CTRL-X CTRL-P もしくは CTRL-X CTRL-N で檢索を行ふと、その單語のある行で續く文字が檢索されます。

7.3. ’dictionary’ のキーワードで補完する

CTRL-X CTRL-K

カーソルの直前のキーワードで始まる單語をオプション ’dictionary’ で與へられたファイルから檢索します。これは CTRL-N と似てゐるが、現在のファイル內は檢索せずに辭書ファイル內だけを檢索します。見つけたキーワードはカーソルの直前に插入されます。最初のマッチが使用される前に全てのマッチが檢索されるので、かなり遲くなる可能性があります。オプション ’dictionary’ の初期値は空です。どこから單語リストを見つけ出すかについては、オプション ’dictionary’ を參照してください。

CTRL-K または
CTRL-N

マッチするキーワードの前方檢索。直前にマッチしたキーワードは新しいもので置き換へられます。

CTRL-P

マッチするキーワードの後方檢索。直前にマッチしたキーワードは新しいもので置き換へられます。

CTRL-X CTRL-T

CTRL-X CTRL-K と同じですが、’dictionary’ ではなく ’thesaurus’ オプションを使ひます。たとへ單語が完全でなくても、類語ファイルの中に單語が見つかると、その行の他の單語も一致とみなされます。したがつて單語は完全に置き換へられます。

例へば、’thesaurus’ ファイルにこのやうな行があるとして:

angry furious mad enraged

カーソルが "ang" の後にあり、CTRL-X CTRL-T を押すと "angry" が補完されます。續けて補完すると "furious", "mad", ...、と置き換へられます。

他にも 2 つの言語閒の單語の置き換へや、API 函數をキーワードによつてグループ分けするのに使へます。

CTRL-T または
CTRL-N

次のキーワードを前方に探します。見つかつたキーワードはその前のキーワードを置き換へます。

CTRL-P

次のキーワードを後方に探します。見つかつたキーワードはその前のキーワードを置き換へます。

7.5. 編輯中と外部參照してゐるファイルのキーワードで補完する

include’ オプションは外部參照 (インクルード) ファイルを含む行を指定するのに使ひます。’path’ オプションはインクルードファイルを探す場所を指定するのに使ひます。

CTRL-X CTRL-I

カーソルの直前と同じ文字で始まる最初のキーワードを、現在のファイルとインクルードファイルから探し出します。マッチしたキーワードはカーソルの直前に插入されます。

CTRL-N

次にマッチするキーワードを前方檢索します。直前にマッチしたキーワードは新しいもので置き換へられます。

Note:
CTRL-I は補完が成功した時に入力する <Tab> と同じであることに注意してください。從つて CTRL-I を次のマッチを探すために使用することはできません。

CTRL-P

次にマッチするキーワードを後方檢索します。直前にマッチしたキーワードは新しいもので置き換へられます。

CTRL-X CTRL-I

直前の補完の文脈で續けて CTRL-X CTRL-I による單語補完を行ひます。2 連 CTRL-X が使用されるまで續きます。

7.6. タグで補完する

CTRL-X CTRL-]

カーソルの直前と同じ文字で始まる最初のタグを探し出します。マッチしたタグはカーソルの直前に插入されます。アルファベットと ’iskeyword' で指定される文字が、タグ名にどの文字が含まれるかを決定します (これはキーワードと同じルール)。|CTRL-]| も參照してください。’showfulltag’ オプションはタグ定義の周邊からコンテキストに含めるために使用されます。

CTRL-] または
CTRL-N

次にマッチするタグを前方檢索します。直前にマッチしたタグは新しいもので置き換へられます。

CTRL-P

次にマッチするタグを後方檢索します。直前にマッチしたタグは新しいもので置き換へられます。

7.7. ファイル名で補完する

CTRL-X CTRL-F

カーソルの直前と同じ文字で始まる最初のファイル名を探し出します。マッチしたファイル名はカーソルの直前に插入されます。アルファベットと ’isfname’ で指定される文字が、ファイル名にどの文字が名前に含まれるかを決定します。

Note:
この段階では (まだ) ’path’ オプションは使用されないことに注意してください。

CTRL-F または
CTRL-N

次にマッチするファイル名を前方檢索します。直前にマッチしたファイル名は新しいもので置き換へられます。

CTRL-P

次にマッチするファイル名を後方檢索します。直前にマッチしたファイル名は新しいもので置き換へられます。

7.8. 定義もしくはマクロで補完する

定義を含んだ行を特定するのに ’define’ オプションが使用されます。インクルードファイルを含んだ行を特定するのに ’include’ オプションが使用されます。インクルードファイルを探すのに ’path’ オプションが使用されます。

CTRL-X CTRL-D

カーソルの直前と同じ文字で始まる最初の定義 (もしくはマクロ) 名を、現在のファイルとインクルードファイルから探し出します。マッチした定義名はカーソルの直前に插入されます。

CTRL-D または
CTRL-N

次にマッチするマクロ名を前方檢索します。直前にマッチしたマクロ名は新しいもので置き換へられます。

CTRL-P

次にマッチするマクロ名を後方檢索します。直前にマッチしたマクロ名は新しいもので置き換へられます。

CTRL-X CTRL-D

直前の補完の文脈で續けて CTRL-X CTRL-D による單語補完を行ひます。2 連 CTRL-X が使用されるまで續きます。

7.9. Vim コマンドの補完

補完は文脈に左右されます。コマンドラインでの入力時のやうに機能します。Ex コマンドとその引數も補完します。これは Vim script を書いてゐるときに便利です。

CTRL-X CTRL-V

カーソルの前に何があるかを推測し、最初に一致するものを探します。

Note:
CTRL-V がマッピングに使はれてゐるときは、たいていは |i_CTRL-Q| の代はりに CTRL-Q を使ふことができることに注意してください。

CTRL-V または
CTRL-N

次の一致を前方に探します。そしてその前のものを置き換へます。

CTRL-P

次の一致を後方に探します。そしてその前のものを置き換へます。

CTRL-X CTRL-V

加へて言ふと CTRL-X CTRL-VCTRL-V と同じやうに働きます。これは Vim コマンドの補完をマッピングをするのに使へます。例へば:

:imap <Tab> <C-X><C-V>

7.10. ユーザー定義補完

ユーザー定義補完は、オプション ’completefunc’ で設定した函數 (ユーザー定義函數でもよい) によつて補完する方法です。この函數がどう呼び出されるかについては後述します。また |complete-functions| の例を參照してください。

CTRL-X CTRL-U

カーソルの前にどの種類の項目があるか推測し、最初の候補を探します。

CTRL-U または
CTRL-N

次の候補を選擇し、現在の候補と置き換へます。

CTRL-P

前の候補を選擇し、現在の候補と置き換へます。

7.11. オムニ補完

オムニ補完は、オプション ’omnifunc’ で設定した函數 (ユーザー定義函數でもよい) によつて補完する方法です。ファイル形式に特化した補完をするために使はれます。

この函數がどう呼び出されるかについてと、|complete-functions| の例については下記を見てください。特定のファイル形式についての說明は |compl-omni-filetypes| を參照してください。

今後、www.vim.org でより多くの補完スクリプトが公開されるでせう。現在のところ、C++ 用の最初のバージョンがあります。

CTRL-X CTRL-O

カーソルの前にどの種類の要素があるか推測し、最初の候補を探します。

CTRL-O または
CTRL-N

次の候補を選擇し、現在の候補と置き換へます。

CTRL-P

前の候補を選擇し、現在の候補と置き換へます。

7.12. スペリング補完

カーソル前、またはカーソル位置の單語を探し出して、正しい單語の候補に置換します。カレント行のカーソル位置以前にスペルの閒違つた單語が存在する場合、カーソルがその單語の直後に移動します。閒違つた單語が存在しない場合はカーソルの直前の單語 (その單語が閒違つてゐなくても) の訂正候補が表示されます。

Note:
Unix 端末の多くでは CTRL-S は畫面をサスペンドさせるため、代はりに ’s’ を使ふことに注意してください。サスペンドした畫面を元に戾すには CTRL-Q を押します。

CTRL-X CTRL-S または
CTRL-X s

カーソル前の單語を探し、その單語の正しい綴りの候補を探します。

CTRL-S または
CTRL-N

次の候補を選擇します。これによつて以前の候補は置換されます。

Note:
ここでは代はりに ’s’ は使へないことに注意してください。

CTRL-P

前の候補を選擇します。これによつて以前の候補は置換されます。

7.13. キーワードを別のソースから補完する

CTRL-N

カーソルの直前と同じキーワードで始まる單語を、’complete’ オプションで指定された場所から前方檢索します。マッチしたキーワードはカーソルの直前に插入されます。

CTRL-P

カーソルの直前と同じキーワードで始まる單語を、’complete’ オプションで指定された場所から後方檢索します。マッチしたキーワードはカーソルの直前に插入されます。

CTRL-N

次にマッチするキーワードを前方檢索します。直前にマッチしたキーワードは新しいもので置き換へられます。

CTRL-P

次にマッチするキーワードを後方檢索します。直前にマッチしたキーワードは新しいもので置き換へられます。

CTRL-X CTRL-N または
CTRL-X CTRL-P

直前の補完の文脈で續けて CTRL-X CTRL-N もしくは CTRL-X CTRL-P による單語補完を行ひます。2 連 CTRL-X が使用されるまで續きます。

補完候補を檢索する函數

ここでは ’completefunc’ と ’omnifunc’ について說明します。

これらの函數は次の 2 通りの形で呼ばれます:

最初の形での呼び出しでは、次の引數が與へられます:

a:findstart  1
a:base	empty

これらの函數は補完するテキストの始點の桁番號を返す責任を負ひます。桁番號は 0 以上 "col(’.’)" 未滿でなければなりません。カーソル直前の文字列を見て、補完候補の一部となりうる文字を含める處理が必要となります。この桁とカーソル位置の閒のテキストが補完され、候補で置き換はることになります。もしも戾り値がカーソルの桁よりも大きい場合は、カーソルの桁が使はれます。

負の戾り値:

-2メッセージなしでキャンセルし、補完モードに留まりたい場合。
-3メッセージなしでキャンセルし、補完モードから拔けたい場合。

その他の負値: カーソルの桁について補完を開始します。

2 番目の形での呼び出しでは、次の引數が與へられます:

a:findstart0
a:base補完對象のテキスト。つまり最初の呼び出しで指定したテキスト (空文字列の場合もありうる)

これらの函數は見つかつた候補のリストを返す責任を負ひます。通常、候補の中には "a:base" そのものも含まれてゐます。候補が存在しない場合は空リストを返してください。

補完候補以外の情報を返したいときはそのリストを持つた辭書を返します。辭書には以下のアイテムを含めることができます:

words補完候補のリスト (必須)
refresh函數の再呼び出しを制禦する文字列 (オプション)

現在有效な値は "always" のみです。"always" を指定すると、補完對象のテキストが變更されるたびに補完函數が呼ばれるやうになります。

空の結果に對して警告メッセージを抑制したい場合は、|v:none| を返してください。これは |complete()| で非同期補完を實裝するのに役立ちます。

その他のアイテムは無視されます。

補完後に何かを實行したい場合は自動コマンドの |CompleteDone| イベントを使ひます。

例へば、次のやうにして使ひます:

let matches = ... list of words ...
return {'words': matches, 'refresh': 'always'}

リストの各要素は文字列か辭書のどちらかになります。文字列の場合はそれが候補に使はれます。辭書の場合は以下の要素を含めることができます:

word插入されるテキスト。必須
abbr"word" の略。これが空でなければ、メニューで "word" の代はりに表示されます
menuポップアップメニューにおける追加情報。"word" または "abbr" の後に表示されます
infoこの要素についての追加情報。プレビューやポップアップウィンドウに表示することができます
kind候補の種類を表す 1 文字
icase0 でないなら、候補同士を比較するとき大文字小文字は無視されます。省略された場合は 0 となり、大文字小文字の違ひしかない候補も追加されます
equalゼロ以外の場合、比較時にこの項目が常に等しいと見なされます。つまり、"equal=1" はこのアイテムのフィルタリングを無效にします
dup0 でないなら、すでに同じ候補があつてもこの候補を追加します
empty0 でないなら、空文字であつてもこの候補を追加します
user_data候補に關聯づけられ |v:completed_item| で利用できるカスタムデータ

これらのうち "icase", "equal", "dup" および "empty" 以外は文字列でなければなりません。これらの要件が滿たされない場合はエラーメッセージが表示され、リスト中のそれ以降の要素は無視されます。リストの中で文字列と辭書は混在してゐてもよい。

"menu" はポップアップメニューに表示されます。長すぎる場合は切り詰められるので、短くするとよい。"info" は ’completeopt’ に "preview" が含まれてゐる場合、もしくは ’completeopt’ に "popup" が含まれてゐるときにポップアップウィンドウ內にある場合にプレビューウィンドウに表示されます。プレビューウィンドウ內で "info" 項目はまた、ポップアップメニューが消えた後にもそのまま表示されます。これは函數の引數を表示する場合などに便利です。"info" にスペース 1 個を指定すると、プレビューウィンドウに表示されてゐるテキストが消去されます。プレビューウィンドウの大きさは 3 行ですが、’previewheight’ が 1 か 2 のときはその高さで表示されます。

"popup" が ’completeopt’ にある場合、ポップアップウィンドウを使用して "info" が表示されます。次に、’completepopup’ オプションはポップアップのプロパティを指定します。これは、情報ポップアップが作成されるときに使用されます。オプションは、コンマで區切られた値のリストです:

heightポップアップの最大高さ
widthポップアップの最大幅
highlightポップアップのハイライトグループ (デフォルトは PmenuSel)
align"item" (デフォルト) または "menu"
border"on" (デフォルト) または "off"

例:

:set completepopup=height:10,width:60,highlight:InfoPopup

"align" 値が "item" の場合、ポップアップは選擇されたアイテムの近くに配置されます。選擇を變更するとポップアップも移動します。"align" が "menu" の場合、ポップアップがメニューがテキストの下にある場合は、メニューの上部に配置され、さうでない場合はメニューの下部に配置されます。

情報ポップアップが作成された後、それを |popup_findinfo()| で見つけることができ、プロパティは |popup_setoptions()| で變更できます。

ポップアップの情報が非同期で得られる場合は、’completeopt’ で "popuphidden" を使用してください。情報ポップアップは最初は非表示になり、情報が埋まれば |popup_show()| を呼び出す必要があります。これは、|CompleteChanged| 自動コマンドを使用して次のやうに實行できます:

set completeopt+=popuphidden
au CompleteChanged * call UpdateCompleteInfo()
func UpdateCompleteInfo()
  " Cancel any pending info fetch
  let item = v:event.completed_item
  " Start fetching info for the item then call ShowCompleteInfo(info)
endfunc
func ShowCompleteInfo(info)
  let id = popup_findinfo()
  if id
    call popup_settext(id, 'async info: ' .. a:info)
    call popup_show(id)
  endif
endfunc

"kind" は候補の種類を示す 1 文字です。候補の表示方法 (色やアイコンなど) を區別するために使はれます。現在のところ、指定可能な種類は次の通りです:

v變數
f函數やメソッド
m構造體やクラスのメンバ
ttypedef
d#define やマクロ

候補の檢索に時閒がかかるときは |complete_add()| を使つて候補を 1 つずつリストに加へるとよい。その場合、それらの候補は戾り値のリストに現れるべきではありません。ときどき |complete_check()| を呼んで、候補の檢索中にユーザーがキーを押して檢索を中斷できるやうにしてください。complete_check() が非 0 を返すと中斷します。

函數でカーソルを移動させることは認められてゐて、カーソルは實行後に復元されます。函數で他のウィンドウに移動したりテキストを削除することは認められてゐません。

月の名前を補完する例:

fun! CompleteMonths(findstart, base)
  if a:findstart
    " 單語の始點を檢索する
    let line = getline('.')
    let start = col('.') - 1
    while start > 0 && line[start - 1] =~ '\a'
      let start -= 1
    endwhile
    return start
  else
    " "a:base" にマッチする月を探す
    let res = []
    for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")
      if m =~ '^' . a:base
    call add(res, m)
      endif
    endfor
    return res
  endif
endfun
set completefunc=CompleteMonths

檢索が遲い場合のシミュレーション:

fun! CompleteMonths(findstart, base)
  if a:findstart
    " 單語の始點を檢索する
    let line = getline('.')
    let start = col('.') - 1
    while start > 0 && line[start - 1] =~ '\a'
      let start -= 1
    endwhile
    return start
  else
    " "a:base" にマッチする月を探す
    for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")
      if m =~ '^' . a:base
    call complete_add(m)
      endif
      sleep 300m    " 次の候補の檢索をシミュレートする
      if complete_check()
    break
      endif
    endfor
    return []
  endif
endfun
set completefunc=CompleteMonths

補完ポップアップメニュー

候補を簡單なポップアップメニューで表示することができます。

ポップアップメニューは次のとき表示されます:

ポップアップメニューの高さの最大値はオプション ’pumheight’ で設定することができます。既定値は利用可能なスペースをすべて使ふやうになつてゐます。

pumwidth’ オプションは最小幅を設定することができます。既定値は 15 文字です。

ポップアップメニューには 3 つの狀態があります:

  1. 候補が插入された狀態。例へば CTRL-NCTRL-P の後。
  2. カーソルキーを使つて他の候補を選擇した後。候補はまだ插入されてをらず、1 つの候補が强調表示されてゐる狀態。
  3. 候補の一部だけが插入されてをり、文字の入力やバックスペースキーを使用できる狀態。カーソルの前にある文字列によつて候補のリストが增減する。

普通、最初は 1 番目の候補が插入された狀態 (狀態 1) から始まります。’completeopt’ に "longest" が含まれてをり、2 個以上の候補があるときは狀態 3 から始まります。

CTRL-NCTRL-P を押すことなどによつて他の候補を選擇すると狀態 1 へ遷移します。このとき候補のリストは變化しません。

元のテキストへ戾ると狀態 3 になります。すぐに狀態 3 にしたい場合は、次のやうに補完の直後に CTRL-P を行ふマッピングを使ひます:

:imap <F7> <C-N><C-P>

狀態 1 では以下のキーは特別な意味を持ちます:

<BS>CTRL-H

1 文字削除してカーソル前の單語の候補を檢索します。これによつて候補の數は少なくなり、しばしば 1 個だけになつて狀態 2 へ遷移します。

特殊文字でない任意の文字:

候補を變更せずに補完を停止して入力された文字を插入します。

狀態 2 と狀態 3 では以下のキーは特別な意味を持ちます:

<BS>CTRL-H

1 文字削除してカーソル前の (短くなつた) 單語の候補を檢索します。候補の數は增えます。

CTRL-L

現在の候補から 1 文字插入します。候補の數は少なくなります。

印字可能で空白文字でない任意の文字:

その文字を插入します。候補の數は少なくなります。

以上すべての狀態で以下のキーが使へます:

CTRL-Y

Yes: 現在選擇されてゐる候補に決定して補完を終了します。

CTRL-E

補完を終了して候補を選擇する前の狀態 (タイプした狀態または最長共通文字列) へ戾ります。

<PageUp>

數個上の候補を選擇するけれども插入はしません。

<PageDown>

數個下の候補を選擇するけれども插入はしません。

<Up>

CTRL-P と同樣に上の候補を選擇するけれども插入はしません。

<Down>

CTRL-N と同樣に下の候補を選擇するけれども插入はしません。

<Space> または
<Tab>

候補を變更せずに補完を終了してタイプされた文字を插入します。

<Enter> キーの擧動は狀態に依存します:

狀態1:テキストはそのままにし、改行を插入する。
狀態2:選擇されてゐる候補を插入する。
狀態3:テキストはそのままにし、改行を插入する。

言ひ換へると: カーソルキーでリストから他の候補を選擇した後に <Enter> を押すとその候補を插入します。それ以外をタイプした後で <Enter> を押すと改行が插入されます。

メニューの色は以下のハイライトグループで設定することができます:

Pmenu通常の要素 |hl-Pmenu|
PmenuSel選擇されてゐる要素 |hl-PmenuSel|
PmenuSbarスクロールバー |hl-PmenuSbar|
PmenuThumbスクロールバーのつまみ |hl-PmenuThumb|

ポップアップメニューが表示されてゐるとき用の特別なマッピングといふものは存在しません。しかし插入モードマッピングで函數 |pumvisible()| を使へばポップアップメニューが表示されてゐるときだけ用にマッピングを作ることができます。例:

:inoremap <Down> <C-R>=pumvisible() ? "\<lt>C-N>" : "\<lt>Down>"<CR>

マッピングで <expr> を使ふと、入力中ある條件が滿たされたときに自動的にポップアップメニューを表示させることができます。例へば、ドットを入力したとき補完を行ふ、またはドットそのものを入力するやうにするには:

inoremap <expr> . MayComplete()
func MayComplete()
    if (can complete)
      return ".\<C-X>\<C-O>"
    endif
    return '.'
endfunc

より詳しくは |:map-<expr>| を參照してください。

オムニ補完についてファイル形式ごとの注意點

ファイル形式 {filetype} に對して使はれるファイルは ’runtimepath’ 中の autoload/{filetype}complete.vim とします。つまり、"java" に對するファイルは autoload/javacomplete.vim となります。

C

C のソースでオムニ補完を行ふには tags ファイルが必要です。Exuberant ctags は補完に必要な付加情報を出力するため、Exuberant ctags を使ふとよい。Exuberant ctags はこのサイトからダウンロードできます: http://ctags.sourceforge.net/ バージョン 5.6 以降が推奬されてゐます。

バージョン 5.5.4 を使ふときは "typename:" フィールドを追加するこのパッチをあててください:

ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch

MS-Windows 用の exe ファイルは次のサイトからダウンロードできます:

http://ctags.sourceforge.net/
https://github.com/universal-ctags/ctags-win32

システム函數を補完するには、次のやうな方法があります。ctags を使つて全システムヘッダーファイルの tags ファイルを作ります:

% ctags -R -f ~/.vim/systags /usr/include /usr/local/include

そして .vimrc で ’tags’ オプションにこの tags ファイルを追加します:

set tags+=~/.vim/systags

カーソル前の單語が "." や "->" を含まないとき、CTRL-X CTRL-O を押すと tags ファイルから直接補完されます。これはすべての識別子、函數名に對して有效です。tags ファイルに含まれないローカル變數名を補完するには CTRL-P を使ふしかありません。

カーソル前の單語が "." または "->" を含むとき、CTRL-X CTRL-O を押すと、變數の型が推測され、その型のメンバが推測されます。よつて、その變數に對して有效なメンバだけが補完候補に現れます。

メンバ名がすでに補完されたとき CTRL-X CTRL-O を押すと、複合型に對する "." または "->" が插入されます。

Vim は C コンパイラを內藏してゐるわけではないので、きれいに整形された宣言しか認識することができません。プリプロセッサーが關係すると混亂してしまふ可能性があります。同じ構造體名が複數の場所に現れる場合、それらのすべてのメンバが補完候補に含まれます。

CSS

CSS 2.1 仕樣に從つて、プロパティとその適切な値を補完することができます。

HTML or XHTML

HTML, XHTML ファイルにおいて、CTRL-X CTRL-O で (X)HTML のさまざまな要素を補完することができます。補完スクリプトは XHTML 1.0 Strict なファイルを書くために設計されてゐますが、他の HTML のバージョンに對しても動作するやうになつてゐます。以下の機能があります:

Note:
初囘實行時は補完メニューが表示されるまでに少し時閒がかかります。

Note:
整形されてゐないファイルでは補完が失敗する場合があることに注意してください。その場合は |:make| を實行して整形上の問題を檢出してください。

HTML flavor

既定の HTML 補完はファイルタイプに依存して動作が變はります。HTML ファイル (’filetype’ が "html" の場合) に對しては HTML 4.01 Transitional となり、XHTML ファイル (’filetype’ が "xhtml" の場合) に對しては XHTML 1.0 Strict となります。

タグの外側で補完を行ふと DOCTYPE を選擇することができ、適切なデータファイルが讀み込まれ、それ以降の補完に利用されます。

データファイルのフォーマットについてより詳しくは |xml-omni-datafile| を參照してください。Vim のウェブサイト (|www|) でもいくつかのデータファイルをダウンロードすることができます。

Note:
變數 b:html_omni_flavor に任意の XML データのファイル名を設定することができます。これによつて PHP オムニ補完 (|ft-php-omni|) と任意の XML ダイアレクトを組み合はせることができます (その XML ダイアレクト用のデータファイルが必要)。この變數を設定しない場合は XHTML 1.0 Strict が使用されます。

JAVASCRIPT

JavaScript のほとんどの要素と DOM 要素の補完。

補完:

JavaScript のオムニ補完は、單獨の JavaScript ファイル (&ft==javascript)、(X)HTML の <script> タグの中、イベント屬性の値の中で動作します (外部ファイルの讀み込みも含みます)。

DOM 互換性

現時點 (2006 年初頭) では主流のブラウザーが 2 つあります。MS Internet Explorer と Mozilla Firefox です。これら 2 つのアプリケーションは市場の 90% 以上を占めてゐます。理論的には標準は W3C (http://www.w3c.org) によつて決められますが、これらのブラウザーは必ずしもそれに從つてゐません。

IEFFW3Cオムニ補完
+/-+/-++
++-+
+---
-+--

ブラウザーの實裝狀態にかかはらず、ある要素が標準で定められてゐれば、オムニ補完プラグインはその要素を候補リストに加へます。主流のエンジンが兩方ともある要素を實裝してゐれば、たとへそれが標準で定められてゐなくても候補リストに加へます。それ以外の要素は候補リストに加へません。

PHP

PHP コードの補完を行ふには tags ファイルが必要です。外部ファイルに書かれた情報の補完と、クラスを意識した補完のためです。Exuberant ctags 5.5.4 以降を使つてください。Exuberant ctags は次のサイトから入手することができます: http://ctags.sourceforge.net/

オムニ補完で以下のものが補完できます:

Note:
最初に補完を行ふとき、必要なデータがすべてメモリにロードされることに注意してください。これに數秒かかる場合がありますが、次囘からの補完は氣になるほどではなくなるでせう。

補完スクリプトは、カーソルが <?php ?> の中にあるかどうかを檢出します。もしもカーソルがこのタグの外側にあれば、自動的に HMTL/CSS/JavaScript 補完に切り替はります。

Note:
元の HTML とは異なり、タグの補完が文脈依存ではなくなることに注意してください。

RUBY

Ruby コードの補完を行ふには、vim が |+ruby| 付きでコンパイルされてゐる必要があります。

Ruby のオムニ補完は、補完候補を提供するために必要に應じてバッファをパースします。補完候補は ’require’ で讀み込まれたモジュールと、カレントバッファ內で定義されたモジュールから引き出されます。

CTRL-X CTRL-O による補完は、次のやうに文脈に依存します:

文脈提供される補完
1. クラス定義の外側クラス、定數、グローバル變數
2. クラス定義の內側そのクラスで定義されたメソッド、定數
3. ’.’, ’::’, ’:’ の後參照されてゐるオブジェクトに適用可能なメソッド
4. ’:’, ’:foo’ の後シンボル名 (:foo の場合は ’foo’ で始まるもの)

Notes:

SYNTAX

Vim には 500 近くの言語を强調表示する機能があります。この强調表示機能の一部として、言語で定められたキーワードを認識する機能があります。多くのファイルタイプには既に專用の補完スクリプトが存在しますが、さうでないファイルタイプのために構文强調機能を利用して基本的な補完機能を提供する syntaxcomplete といふプラグインがあります。このプラグインは、Vim がテキストを色付けするために持つてゐる情報を利用して補完リストを作成します。syntaxcomplete はどんなファイルタイプに對しても利用可能で、言語に應じた最小限の補完を提供します。

syntaxcomplete を有效にするにはこのコマンドを實行します:

setlocal omnifunc=syntaxcomplete#Complete

これを自動的に行ふやうにするには、以下を |.vimrc| に書きます (":filetype" コマンドの後で):

if has("autocmd") && exists("+omnifunc")
autocmd Filetype *
        \   if &omnifunc == "" |
        \       setlocal omnifunc=syntaxcomplete#Complete |
        \   endif
endif

これによつて、ファイルタイプ專用のプラグインが存在しないときにだけ syntaxcomplete プラグインで補完するやうになります。

ファイルタイプの中には幅廣い範圍の構文アイテムを持つものもあります。syntaxcomplete プラグインでは、構文グループのうちどれを補完に含めるかをカスタマイズすることができます。ファイルタイプ PHP を例として見てみませう。

index.php といふ名前のファイルを開き、次のコマンドを實行します:

syntax list

まづ最初にたくさんの異なる構文グループがあることに氣づくでせう。PHP 言語は HTML, JavaScript など他の言語の要素を含むことがあります。この場合、syntaxcomplete プラグインはファイルタイプ名 "php" で始まる構文グループだけを含めます。例へば、次の構文グループはデフォルトで含まれます: phpEnvVar, phpIntVar, phpFunctions。

非ファイルタイプの構文アイテムも追加したい場合は、正規表現構文が使へます (autoload/syntaxcomplete.vim のバージョン 13.0 で追加されました)。PHP ファイルを編輯中に ":syntax list" の出力を見ると、次のやうな項目が見えるでせう:

htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects

PHP ファイルの編輯に JavaScript と HTML のキーワード構文グループを追加するには各言語ごとに正規表現で設定します。あるいは、正規表現を使はず、單に含めるグループを限定して指定することができます:

let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+'
let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'

この變數の設定は次のやうな構文になつてゐます:

let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'

PHP 言語は構文强調で色付けできる要素がとてもたくさんあります。それらの要素はオムニ補完リストに現れます。

人によつてはこれがわづらはしいと感じたり、その一部だけが欲しい場合があります。リストから餘分なものを除くには 2 つの方法があります (必要なら)。特定の構文グループを表示したくない場合はそれを指定するのに 2 つの方法が使へます。1 つは構文グループの名前のリストを指定する方法。もう 1 つは正規表現で構文グループを指定する方法。次のやうな設定を vimrc に追加します:

let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
let g:omni_syntax_group_exclude_php = 'php\w*Constant'

コンマ區切りで任意個數の構文グループを指定することができます。この變數の基本的な形式は次のとほりです:

let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'

この變數名の末尾のファイルタイプを變へればいくらでもこの變數を定義することができます。

syntaxcomplete プラグインは、構文アイテムの單語境界の認識にオプション ’iskeyword’ を使用します。例として、Scheme 言語の補完では "-" が單語に含まれます (call-with-output-file など)。ファイルタイプによつてはこれでは期待する補完ができないかもしれません。g:omni_syntax_use_iskeyword に 0 を代入すれば syntaxcomplete プラグインは單語文字の區切りを使はなくなります:

let g:omni_syntax_use_iskeyword = 0

プラグイン開發者のために OmniSyntaxList 函數が公開されてゐます。この函數は構文アイテムのリストを得るために使ふことができます。例へば SQL ファイルを開いてゐる (:e syntax.sql) ときに、グループと構文アイテムを確認するために ":syntax list" コマンドを使ふことができます。例:

syntax list

次のやうな出力が表示されます:

sqlOperator    xxx some prior all like and any escape exists in is not 
                   or intersect minus between distinct
                   links to Operator
sqlType        xxx varbit varchar nvarchar bigint int uniqueidentifier 
                   date money long tinyint unsigned xml text smalldate 
                   double datetime nchar smallint numeric time bit char 
                   varbinary binary smallmoney
                   image float integer timestamp real decimal

2 つの構文グループ sqlOperator と sqlType があります。構文アイテムのリストを得るために OmniSyntaxList をいくつかの方法で呼び出すことができます。構文グループを限定せずにすべての構文アイテムを得るには次のやうにします:

echo OmniSyntaxList( [] )

sqlOperator 構文グループの構文アイテムの得るには次のやうにします:

echo OmniSyntaxList( ['sqlOperator'] )

sqlOperator 構文グループと sqlType 構文グループの兩方の構文アイテムをすべて得るには次のやうにします:

echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )

正規表現も使へます:

echo OmniSyntaxList( ['sql\w\+'] )

プラグインから呼び出すときは、結果を List に代入して使ふのが一般的でせう:

let myKeywords = []
let myKeywords = OmniSyntaxList( ['sqlKeyword'] )

SQL

SQL の補完にはステートメント、函數、キーワードが含まれます。また、データベースから直接情報を取得し、テーブル、プロシージャ、ビュー、カラムリストを動的に補完することができます。より詳しい說明とチュートリアルについては |omni-sql-completion| を參照してください。

SQL 補完プラグインは他の補完プラグインと組み合はせて使ふことができます。例へば、PHP には PHP 用の補完スクリプトがありますが、PHP はよくデータベースにアクセスする動的なウェブサイトを生成するのに使はれるため、SQL 補完プラグインも有效にするとよいかもしれません。さうすれば PHP のコードと SQL のコードを兩方補完できるやうになります。

XML

Vim 7 には XML ファイルにおける文脈に應じた補完メカニズムがあります。この補完メカニズムは特別なファイル |xml-omni-datafile| に依存し、|:XMLns| と |:XMLent| といふ 2 つのコマンドがあります。この補完の機能は以下の通りです:

XML データファイルのフォーマット

XML データファイルは ’runtimepath’ の中のディレクトリ "autoload/xml" に保存されます。標準でディレクトリ "$VIMRUNTIME/autoload/xml" にデータファイルのサンプルが入つてゐます。これらのファイルにはコマンドで指定できる意味のある名前がついてゐます。XML データファイルは衝突が起きないやうに一意な名前をつけるべきです。例へば、xhtml10s.vim といふ名前は XHTML 1.0 Strict 用のデータファイルであることを意味してゐます。

各サンプルファイルには g:xmldata_xhtml10s のやうな名前の變數が含まれてゐます。この變數の値は 2 つの部分からなります:

1. "g:xmldata_"一般的なプリフィックス。全データファイルで共通
2. "xhtml10s"ファイル名であり、記述された XML ダイアレクトの名前。この名前がコマンド |:XMLns| の引數として使はれる

2. は正確にファイル名と同じでなければなりません。

この變數は辭書 |Dictionary| です。キーはタグ名で、値は 2 個の要素を持つリスト |List| です。リストの最初の要素はまたリストであり、有效な子ノードの名前を持ちます。2 番目の要素は辭書 |Dictionary| であり、屬性名がキーで、その屬性の取りうる値が値です。例:

let g:xmldata_crippled = {
\ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"],
\ 'vimxmlroot': ['tag1'],
\ 'tag1':
\ [ ['childoftag1a', 'childoftag1b'], {'attroftag1a': [],
\ 'attroftag1b': ['valueofattr1', 'valueofattr2']}],
\ 'childoftag1a':
\ [ [], {'attrofchild': ['attrofchild']}],
\ 'childoftag1b':
\ [ ['childoftag1a'], {'attrofchild': []}],
\ "vimxmltaginfo": {
\ 'tag1': ['Menu info', 'Long information visible in preview window']},
\ 'vimxmlattrinfo': {
\ 'attrofchild': ['Menu info', 'Long information visible in preview window']}}

この例を保存するファイルは "autoload/xml/crippled.vim" となり、以下のやうなファイルを書くために使はれます:

<tag1 attroftag1b="valueofattr1">
    <childoftag1a attrofchild>
            &amp; &lt;
    </childoftag1a>
    <childoftag1b attrofchild="5">
        <childoftag1a>
            &gt; &apos; &quot;
        </childoftag1a>
    </childoftag1b>
</tag1>

この例には 4 個の特別な要素が含まれてゐます:

  1. "vimxmlentities" - 特別なキー。對應する値は、この XML ダイアレクトの實體を要素に持つリスト。
  2. 屬性の取りうる値を定めるリストの長さが 1 であり、その要素が屬性名と等しい場合、この要素は boolean とみなされ、’attrname="’ でなく ’attrname’ が補完されます。
  3. "vimxmltaginfo" - 特別なキー。對應する値は、タグ名をキー、長さ 2 のリストを値として持つ辭書。追加のメニュー情報と長い說明を保持します。
  4. "vimxmlattrinfo" - 特別なキー。對應する値は、屬性名をキー、長さ 2 のリストを値として持つ辭書。追加のメニュー情報と長い說明を保持します。

Note:
XML データファイル中のタグ名は名前空閒を含んではならないことに注意してください。例として xsl.vim を參照してください。

Note:
全データと函數はグローバル變數/函數として公開されてをり、個人的な編輯函數用にも使へることに注意してください。

DTD -> Vim

DTD をパースし、XML オムニ補完用の XML データファイルを作成するスクリプト |dtd2vim| が |www| 上にあります。

dtd2vim: http://www.vim.org/scripts/script.php?script_id=1462

詳しい使ひ方はスクリプトの先頭を參照してください。このスクリプトを使ふには perl と

perlSGML: http://savannah.nongnu.org/projects/perlsgml

が必要です。

コマンド

:XMLns {name} [{namespace}]

XML オムニ補完を行ふには、使ふデータファイルと名前空閒を指定しなければなりません。データファイルを讀み込み、データを適切な名前空閒に結びつけるにはコマンド |:XMLns| を使ひます。第 1 引數 (必須) でデータの名前を指定します (xhtml10s, xsl)。

第 2 引數で名前空閒コードを指定します (h, xsl)。第 2 引數を省略して實行した場合は名前空閒宣言なしでダイアレクトが使はれます。例として .xsl ファイルで XML 補完をするには次のやうにします:

:XMLns xhtml10s
:XMLns xsl xsl

:XMLent {name}

既定ではデフォルト名前空閒のデータファイルからエンティティが補完されます。コマンド XMLent はデフォルト名前空閒が存在しない場合に使ひます:

:XMLent xhtml10s

使用例

この狀態で (上記のコマンドを實行した後。カーソルが | の位置にあるとします):

<|

XML オムニ補完すると適切な XHTML タグが補完されます。また、次の狀態:

<xsl:|

で補完すると適切な XSL タグが補完されます。

|autoload| によりロードされるスクリプト xmlcomplete.vim の中で xmlcomplete#GetLastOpenTag() が定義されてをり、この函數を使ふと XML ファイル內で最後に開いたタグの名前が得られます (b:unaryTagsStack が定義されてゐなければなりません)。

:echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack")

8. 插入モードのコマンド

下のコマンドはバッファに新しいテキストを插入するのに使ふことができます。それらは全て取り消すことができますし、"." コマンドで繰り返すことができます。

a

カーソルの後ろにテキストを [count] 回追加します。’virtualedit’ がセットされてゐないなら、カーソルが空行の最初のカラムにあるときはそこに插入します。

A

行末にテキストを [count] 回追加します。

<insert> または
i

カーソルの前にテキストを [count] 回插入します。插入モード中の CTRL-O |i_CTRL-O| で使ふときはカウントはサポートされてゐません。

I

行の先頭の非空白文字の前にテキストを [count] 回插入します。

cpoptions’ にフラグ ’H’ が入つてゐる場合、空白のみを含む行では最後の空白文字の 1 文字前から插入を開始します。

gI

カラム 1 からテキストを [count] 回插入します。

gi

カレントバッファの最後に入力がされた場所にテキストを入力します。これは |'^| マークを使ひます。マークが行末を越えてゐるときに "’^i" と動作が異なります。行が插入、削除されてゐると入力位置は調整されますが、文字單位の變更は考慮されません。|:keepjumps| コマンドが使はれると |'^| マークは變更されません。

o

カーソルのある行の下に新しい行を作り、そこにテキストを [count] 回繰り返し插入します。

cpoptions’ にフラグ ’#’ が入つてゐる場合、カウント指定は無視されます。

O

カーソルのある行の上に新しい行を作り、そこにテキストを [count] 回繰り返し插入します。

cpoptions’ にフラグ ’#’ が入つてゐる場合、カウント指定は無視されます。

これらのコマンドはテキストの插入を開始するのに使はれます。插入モードは <Esc> で止めることができます。插入モードでのその他の特殊な文字は |mode-ins-repl| を參照してください。[count] の效果は插入モードから拔けた時に現れます。

autoindent’ が設定されてゐる時には、新しい行のインデントに、前の行と同じものが使用されます。’smartindent’ か ’cindent’ が設定されてゐる時には、行のインデントは C プログラム (ソースコード) のスタイルに、自動的に調整されます。

textwidth’ は、行の最大幅 (文字數) を設定することができます。文字を追加してゐる時に行が長くなりすぎると、自動的に改行が插入されます。

9. Ex の插入コマンド

:{range}a[ppend][!]

指定された行の下に何行分かのテキストを插入します。{range} が省略された場合、テキストは現在行の後から插入されます。

[!] をつけるとその實行中のみ ’autoindent’ をトグルします。

:{range}i[nsert][!]

指定された行の上に何行分かのテキストを插入します。{range} が省略された場合、テキストは現在行の前から插入されます。

[!] をつけるとその實行中のみ ’autoindent’ をトグルします。

これら 2 つのコマンドは、"." だけを含んだ行を入力するまで、插入すべきテキストを待ち續けます。バックスラッシュで始まる行には氣をつけてください。|line-continuation| を參照してください。

Ex モード (|-e| を參照してください) では行末にバックスラッシュを置くことで NUL 文字を插入することができます。行末にバックスラッシュを插入したいときはバックスラッシュを二重にしてください。バックスラッシュが行末にある場合は實際に插入される數は半分になります。

Note:
これらのコマンドは |:global| または |:vglobal| と組み合はせて使ふことはできないことに注意してください。":append" と ":insert" は ":if" と ":endif", ":for" と ":endfor", ":while" と ":endwhile" の閒では機能しません。

:star[tinsert][!]

このコマンドの實行直後に插入モードを開始します。ノーマルモードで "i" をタイプしたやうに働きます。! が含まれてゐた時には、行に追加する "A" のやうに働きます。さうでなければ現在の位置から插入が始まります。

Note:
函數やスクリプトの中でこのコマンドを使用したときには、函數やスクリプトが終了してから插入が始まることに注意してください。

|:normal| からこのコマンドを呼び出すと機能しません。

:stopi[nsert]

できるだけ早く插入モードを中止します。插入モードで <Esc> を押したやうに機能します。自動コマンドで使ふことができます。例:

:au BufEnter scratch stopinsert
:startr[eplace][!]

このコマンドを實行した直後に置換モードに入ります。ノーマルモードにおける "R" とちやうど同じです。! をつけると "$R" とタイプしたのと同じになります (つまり行末から置換モードを開始します)。! をつけないとカーソル位置から置換モードを開始します。

Note:
函數やスクリプトの中からこのコマンドを實行すると、その函數・スクリプトが終了した後ではじめて置換モードになることに注意してください。

:startg[replace][!]

|:startreplace| と同じですが、|gR| のやうな假想置換モードになります。

10. ファイルを插入する

:r[ead] [++opt] [name]

カーソルの後ろに、ファイル [name] (省略した場合: 現在のファイル) を插入します。

[++opt] として指定できる値については |++opt| を參照してください。

:{range}r[ead] [++opt] [name]

指定した行の下に、ファイル [name] (省略した場合: 現在のファイル) を插入します。

[++opt] として指定できる値については |++opt| を參照してください。

:[range]r[ead] [++opt] !{cmd}

カーソルまたは指定行の後ろに、{cmd} を實行したその標準出力の內容を插入します。コマンドの出力を蓄へ、バッファに讀み込むために、テンポラリファイルが使用されます。コマンドの出力を保存するために ’shellredir’ が使用されるので、標準エラー出力も含めるか含めないか指定することができます。

{cmd} は ":!{cmd}" と同じやうに實行されるので、’!’ だけを指定した場合には、以前に實行された |:!| コマンドに置き換へられます。

[++opt] として指定できる値については |++opt| を參照してください。

これらのコマンドは、ファイルの內容もしくはコマンドの出力をバッファへ插入します。これらは取り消す (UNDO) ことができます。これらは "." コマンドで繰り返すことはできません。これらは行單位で行はれる操作で、插入はカーソルの直後のラインからか、指定したラインの直後から行はれます。一番最初のラインより上 (ファイルの先頭) に插入するには ":0r {name}" といふコマンドを使ひます。

":read" コマンドの後には、新しいラインの左で、最初の空白でない文字にカーソルが移動します。もし Ex モードでなければ、カーソルは新しい行の最後の左側に移動します (殘念ですが Vi との互換性のため)。

":r" にファイル名が與へられた場合、それが代替バッファのファイルになります。これは、例へば代はりにそのファイルを編輯したい時に使ふことができます: ":e! #"。

cpoptions’ オプションから ’a’ フラグを削除することで、オフに切り替へることができます。

":read" には特別な [++opt] 引數が 1 つあります。それは ++edit です。これは實際にファイルを開いたときと同じやうにファイルを插入したい場合に便利です。空のバッファで次のコマンドを使ひます:

:read ++edit filename

かうすると ’fileformat’, ’fileencoding’, ’bomb’ などのオプションがそのファイルに對して檢出された値になります。

Note:
(:e filename とした場合と異なり) バッファの先頭に餘計な空行が 1 行入つてしまふことに注意してください。これは削除したはうがいいでせう。

fileformat’ オプションがファイルの <EOL> の流儀を決定します:

fileformat文字名前
"dos"<CR><NL> or <NL>DOS format
"unix"<NL>Unix format
"mac"<CR>Mac format

以前には ’textmode’ が使用されました。それは現在では廢れてゐます。

fileformat’ が "dos" の時には、<NL> の前の <CR> は無視され、ファイルの終端にある CTRL-Z もまた無視されます。

fileformat’ が "mac" の時には、ファイル內の <NL> は內部的に <CR> によつて表現されます。これは <NL> を表現するために使用される <NUL> との混同を避けるためです。|CR-used-for-NL| を參照してください。

fileformats’ オプションが空でなかつたら、Vim は <EOL> のタイプを識別しようと試みます (|file-formats| を參照してください)。しかしながら、’fileformat’ オプションは變更されません。檢出されたフォーマットはファイルの讀み込みの際にだけ使用されます。’fileencodings’ についても同じです。

MS-DOS, Win32 そして OS/2 以外のシステムでは、DOS フォーマットのファイルを讀み込んだときにはそれを知らせるために、"[dos format]" といふメッセージが表示されます。

Macintosh, MS-DOS, Win32 そして OS/2 においては、ファイルが Unix フォーマットであつた場合に、"[unix format]" といふメッセージが表示されます。

Macintosh 以外のシステムでは、ファイルが Mac フォーマットであつた場合に、"[Mac format]" といふメッセージが表示されます。

":r !" をどう使ふかの例:

:r !uuencode binfile binfile

このコマンドは "binfile" を讀み込み uuencode 化して、それを現在のバッファに讀み込みます。e-mail を編輯してゐて、バイナリファイルを含めたい時に便利です。

ファイルを讀み込むとき Vim はその情報を表示します。いくつかのものについて說明をあげます。他のものは見ればわかります。ロングとショートのどちらを使ふかは ’shortmess’ オプションに依存します。

ロングショート意味
[readonly]{RO}ファイルは書き込み制限されてゐる
[fifo/socket]ストリームを使つてゐる
[fifo]FIFO ストリームを使つてゐる
[socket]ソケットストリームを使つてゐる
[CR missing]"dos" ファイルフォーマットで讀み込んでゐて CR のないNLを見つけた
[NL found]"mac" ファイルフォーマットで讀み込んでゐて NL を見つけた (unix フォーマットなのだらう)
[long lines split]少なくとも 1 つの行が 2 つに分割された
[NOT converted]fileencoding’ から ’encoding’ の變換が失敗した
[converted]fileencoding’ から ’encoding’ の變換を實施した。
[crypted]暗號が解除された
[READ ERRORS]ファイルを全て讀み込めなかつた

{譯注: 以下日本語メッセージの場合:

ロングショート意味
[讀込專用][讀專]ファイルは書き込み制限されてゐる
[FIFO/ソケット]ストリームを使つてゐる
[FIFO]FIFO ストリームを使つてゐる
[ソケット]ソケットストリームを使つてゐる
[CR無]"dos" ファイルフォーマットで讀み込んでゐて CR のない NL を見つけた
[NL有]"mac" ファイルフォーマットで讀み込んでゐて NL を見つけた (unix フォーマットなのだらう)
[長行分割]少なくとも 1 つの行が 2 つに分割された
[未變換]fileencoding’ から ’encoding’ の變換が失敗した
[變換濟]fileencoding’ から ’encoding’ の變換を實施した。
[暗號化]暗號が解除された
[讀込エラー]ファイルを全ては讀み込めなかつた

}


Up: 目次   [Index]