Up: 目次   [Index]


テキストの削除と變更

*change.txt*    For Vim バージョン 8.1.  Last change: 2019 Sep 28


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

このファイルでは、テキストを削除したり變更するコマンドを說明します。この文章の中では、「テキストを變更する」とは、1 つのコマンドでテキストを削除し、別のテキストに置き換へることを意味します。これらのコマンドは全てアンドゥすることができます。非 Ex コマンドはコマンド "." で繰り返すことができます。

1. テキストの削除|deleting|
2. 削除と插入|delete-insert|
3. 單純な變更|simple-change|
4. 複雜な變更|complex-change|
    4.1 フィルタコマンド|filter|
    4.2 置換|:substitute|
    4.3 檢索と置換|search-replace|
    4.4 タブの變換|change-tabs|
5. テキストのコピーと移動|copy-move|
6. テキストの整形|formatting|
7. テキストのソート|sorting|

テキストの插入に關しては |insert.txt| を參照してください。

1. テキストの削除

["x]<Del> または
["x]x

カーソル下から後の [count] 文字を [レジスタ x に入れて] 削除します (行單位 |linewise| ではありません)。"dl" と同じです。

<Del> キーには [count] が使へません。代はりに、[count] の最後の文字を削除します。{譯注: 123<Del> と押すと 3 が消え 12 になる}

<Del> キーが思つたやうに動作しないときは、|:fixdel| を參照してください。<EOL> の削除 (行の連結) については、|'whichwrap'| を參照してください。

["x]X

カーソルから前の [count] 文字を [レジスタ x に入れて] 削除します (行單位 |linewise| ではありません)。"dh" と同じです。|'whichwrap'| も參照してください。

["x]d{motion}

{motion} でカーソルが動く範圍のテキストを [レジスタ x に入れて] 削除します。例外については以下を參照してください。

["x]dd

[count] 行を [レジスタ x に入れて] 行單位 |linewise| で削除します。

["x]D

カーソル下から行の最後までの文字と、[count]-1 行を、[レジスタ x に入れて] 削除します。"d$" と同義 (行單位 |linewise| ではありません)。

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

{Visual}["x]x または
{Visual}["x]d または
{Visual}["x]<Del>

ビジュアル選擇されたテキストを [レジスタ x に入れて] 削除します ({Visual} については |Visual-mode| を參照してください)。

{Visual}["x]CTRL-H または
{Visual}["x]<BS>

選擇モード內で: ビジュアル選擇されたテキストを [レジスタ x に入れて] 削除します。

{Visual}["x]X または
{Visual}["x]D

ビジュアル選擇された行を [レジスタ x に入れて] 削除します ({Visual} については |Visual-mode| を參照してください)。矩形ビジュアルモードでは、"D" はビジュアル選擇されたテキストと行末までの全てのテキストを削除します。

:[range]d[elete] [x]

[range] 行 (既定値: 現在行) を [レジスタ x に入れて] 削除します。

Note:
これらの變な短縮入力:

:dldelete と list
:dell同上
:delel同上
:deletl同上
:deletel同上
:dpdelete と print
:dep同上
:delp同上
:delep同上
:deletp同上
:deletep同上
:[range]d[elete] [x] {count}

[range] 行目 (既定: 現在行 |cmdline-ranges|) から {count} 行を [レジスタ x に入れて] 削除します。

これらのコマンドはテキストを削除します。これらは (‘:d‘ を除いて) コマンド ‘.‘ で繰り返したりアンドゥすることができます。テキストのブロックを削除するには、ビジュアルモードを使ひます。レジスタの說明については、|registers| を參照してください。

コマンド "d{motion}" に關する例外: 移動が行單位でなく、移動の開始點と終了點が同じ行になく、移動の開始點の前に空白しかなく、終了點の後に空行以外がない場合には、削除は行單位となります。このときユーザーは空白のみの行が殘ると期待するかもしれませんが、共に削除されます。削除を文字單位に强制したい場合は |o_v| を使つてください。

オプション ’cpoptions’ がフラグ ’E’ を含んでゐるときは、テキストの空の範圍を削除しようとすると (例へば、1 列目での "d0")、エラーにります。

J

[count] 行を連結します (最低は 2 行)。インデントを削除し、空白を最大 2 個まで插入します (以下を參照してください)。バッファの最終行では失敗します。大きすぎる [count] は、有效な行數まで減少されます。

{Visual}J

ビジュアル選擇された行を連結します (最低は 2 行)。インデントを削除し、空白を最大 2 個まで插入します (以下を參照してください)。

gJ

[count] 行を連結する (最低は 2 行)。空白の插入や削除を行ひません。

{Visual}gJ

ビジュアル選擇された行を連結します (最低は 2 行)。空白の插入や削除を行ひません。

:[range]j[oin][!] [flags]

[range] 行を連結します。"J" と同じですが、[!] と共に使ふと空白の插入や削除を行ひません。[range] の開始點と終了點が同じときは、このコマンドは何もしません。既定の動作では、現在行を次行と連結します。

[flags] については |ex-flags| を參照してください。

:[range]j[oin][!] {count} [flags]

[range] 行目 (既定では現在行 |cmdline-ranges|) からの {count} 行を連結します。"J" と同じですが、[!] と共に使ふと空白の插入や削除を行ひません。

[flags] については |ex-flags| を參照してください。

これらのコマンドは、行の閒の <EOL> を削除します。この結果、複數行が 1 行に連結されます。これらのコマンド (‘:j‘ 以外) は、繰り返しやアンドゥすることができます。

これらのコマンド ("gJ" 以外) は <EOL> の場所に空白を 1 個插入します。ただし行末に空白が付いてゐたり、次の行が ’)’ で始まるときは插入しません。これらのコマンド ("gJ" 以外) は次行の先頭あたりにある空白を全て削除します。オプション ’joinspaces’ がオンのときは、これらのコマンドは ’.’, ’!’, ’?’ の後に 2 個の空白を插入します (しかし ’cpoptions’ がフラグ ’j’ を含んでゐるときは、2 個の空白は ’.’ の後にしか插入しません)。

formatoptions’ のフラグ ’M’ と ’B’ は、マルチバイト文字の前後に空白を插入するときの動作を變更します |fo-table|。

’[ マークは連結前の最初の行の末尾に設定されます。’] マークは連結後の行の末尾に設定されます。

2. 削除と插入

R

置換モードに入ります。打ち込んだ文字がカーソル下の既存の文字をどんどん置き換へていきます。入力されたテキストを [count]-1 回繰り返します。詳細は |Replace-mode| を參照してください。

gR

假想置換モードに入ります。打ち込んだ文字が畫面上の既存の文字をどんどん置き換へていきます。そのため <Tab> は數文字を 1 回で置き換へることができます。入力されたテキストを [count]-1 回繰り返します。詳細は |Virtual-Replace-mode| を參照してください。

["x]c{motion}

{motion} のテキストを [レジスタ x に入れて] 削除し、插入を始めます。’cpoptions’ がフラグ ’E’ を含むときは、削除すべきテキストがないと (例へば "cTx" でカーソルが ’x’ の直後にあるとき)、エラーが發生して插入モードは始まりません (これは Vi 互換です)。

cpoptions’ がフラグ ’E’ を含まないときは、コマンド "c" は削除すべきテキストがなくても、必ず插入モードを始めます。

["x]cc

[count] 行を [レジスタ x に入れて] 削除し、行單位 |linewise| で插入を始めます。’autoindent’ がオンのとき、最初の行のインデントを保持します。

["x]C

カーソル位置から行の終はりまでと、[count]-1 行を [レジスタ x に入れて] 削除し、插入を始めます。"c$" と同義です (行單位 |linewise| ではありません)。

["x]s

[count] 文字を [レジスタ x に入れて] 削除し、插入を始めます (s は Substitute –置換 を意味します)。"cl" と同義です (行單位 |linewise| ではありません)。

["x]S

[count] 行を [レジスタ x に入れて] 削除し、插入を始めます。"cc" と同義です (行單位 |linewise|)。

{Visual}["x]c または
{Visual}["x]s

ビジュアル選擇されたテキストを [レジスタ x に入れて] 削除し、插入を始めます ({Visual} については |Visual-mode| を參照してください)。

{Visual}["x]r{char}

ビジュアル選擇されたテキストを全て {char} に置き換へます。

{Visual}["x]C

ビジュアル選擇された行を [レジスタ x に入れて] 削除し、插入を始めます。矩形ビジュアルモードでは少し動作が違ひます |v_b_C|。

{Visual}["x]S

ビジュアル選擇された行を [レジスタ x に入れて] 削除し、插入を始めます ({Visual} については |Visual-mode| を參照してください)。

{Visual}["x]R

現在のところ {Visual}["x]S と同じです。次のバージョンでは動作が變はるかもしれません。

Notes:

レジスタに關する說明は |registers| を參照してください。

置換モードは插入モードと似てゐますが、文字を打ち込むたびに 1 文字ずつ削除される點が違ひます。行の最後に達すると、Vim はそれ以降は (插入モードと同樣に) 文字を追加します。置換モードでは、バックスペースキーは (もしあれば) 以前のテキストを復元します (「テキストの插入と置換」の章 |mode-ins-repl| を參照してください)。

特別な場合: "cw" と "cW" は、カーソルが單語の上にあるとき、單語のあとにつづく空白を含めず、單語の末尾までを變更します ("ce" と "cE" と同じ働きをします)。これは Vim が "cw" を單語の變更 (change-word) として解釋し、また「單語」にはあとに續く空白は含まれないからです。

{Vi: あとに空白が續く空白上での "cw" は、最初の空白のみを變更します。これは多分バグです。"dw" は全ての空白を削除するからです。とにかく、Vi 風に動作させるときには ’cpoptions’ にフラグ ’w’ を含めてください}

"cw" の變更範圍に單語の後の空白も含めたいときは、次のマップを使つてください。

:map cw dwi

または "caw" を使ひます (|aw| を參照してください)。

:{range}c[hange][!]

テキストを行單位で別のテキストと置き換へます。"." のみを含む行を打ち込むことで置換を終了します。{range} なしの場合、現在行のみを變更します。

[!] をつけると、このコマンドを實行するときだけ ’autoindent’ をトグルします。

3. 單純な變更

r{char}

カーソル下の文字を {char} に置き換へます。{char} が <CR> か <NL> のとき、文字は改行に置き換はります。文字を本當の <CR> に置き換へるには、CTRL-V <CR> を使ひます。CTRL-V <NL> は文字を <Nul> に置き換へます。

{char} が CTRL-E または CTRL-Y のとき、ちやうど |i_CTRL-E| と |i_CTRL-Y| と同じやうに、下の行または上の行の文字が使はれます。回數も指定することができるため、‘10r<C-E>‘ は下の行から 10 文字をコピーすることになります。

[count] を指定すると、[count] 文字が [count] 個の {char} に置き換はります。しかし {char} が <CR> か <NL> の場合、插入される <CR> はただ 1 個です。"5r<CR>" は 5 文字を 1 個の改行に置き換へます。

{char} が <CR> か <NL> のとき、Vim は自動インデントを行ひます。これは置き換へるべき文字を削除した後 "i<CR><Esc>" を實行したやうな動作になります。 {char} はダイグラフ |digraph-arg| として入力することができます。|:lmap| マッピングは {char} に適用されます。插入モードでは、コマンド CTRL-^ を使つてマッピングを切り替へられます |i_CTRL-^|。オプション ’encoding’ が Unicode の一種のときに合成文字を使ふことについては |utf-8-char-arg| を參照してください。

gr{char}

カーソル下の假想文字を {char} に置き換へます。このコマンドはファイル上の文字單位ではなく、畫面上の文字幅單位で置き換へます。詳細は |gR| と |Virtual-Replace-mode| を參照してください。|r| と同樣、回數を指定することができます。{char} の入力方法は |r| と同じです。

|r| や |t| 等のノーマルモードコマンドの引數は、1 個の文字です。オプション ’cpoptions’ がフラグ ’D’ を含まないとき、この文字はダイグラフ |digraphs| と同樣に入力することができます。まづ CTRL-K を打ち込み、次にダイグラフの 2 文字を入力します。

{Vim が |+digraphs| 機能付きでコンパイルされたときのみ有效}

以下のコマンドは、アルファベットの大文字/小文字を切り替へます。現在有效なロケール |locale| が使はれます。|:language| を參照してください。環境變數 LC_CTYPE の値に影響されます。

~

オプション ’tildeop’ がオフのとき: カーソル下の文字の大文字/小文字を切り替へ、カーソルを右に移動させます。[count] が指定されたときは、[count] 文字に作用します。

~{motion}

オプション ’tildeop’ がオンのとき: {motion} のテキストの大文字/小文字を切り替へます。

g~{motion}

{motion} のテキストの大文字/小文字を切り替へます。

g~g~
g~~

現在行の大文字/小文字を切り替へます。

{Visual}~

ビジュアル選擇されたテキストの大文字/小文字を切り替へます ({Visual} については |Visual-mode| を參照してください)。

{Visual}U

ビジュアル選擇されたテキストを大文字にします ({Visual} については |Visual-mode| を參照してください)。

gU{motion}

{motion} のテキストを大文字にします。

例:

:map! <C-F> <Esc>gUcw`]a

これは插入モードで機能します: カーソルの前にある單語を大文字にするために CTRL-F を押します。小文字で單語を入力して、後から大文字にした方が樂です。

gUgU
gUU

現在行を大文字にします。

{Visual}u

ビジュアル選擇されたテキストを小文字にします ({Visual} については |Visual-mode| を參照してください)。

gu{motion}

{motion} のテキストを小文字にします。

gugu
guu

現在行を小文字にします。

g?{motion}

{motion} のテキストを Rot13 エンコードします。

{Visual}g?

ビジュアル選擇されたテキストを Rot13 エンコードします ({Visual} については |Visual-mode| を參照してください)。

g?g?
g??

現在行を Rot13 エンコードします。

各單語の最初の文字を大文字にします:

:s/\v<(.)(\w*)/\u\1\L\2/g

加算と減算

CTRL-A

カーソルの下または後の數字またはアルファベットに [count] を加へます。

{Visual}CTRL-A

ビジュアル選擇されたテキスト中の數字またはアルファベットに [count] を加へます。

{Visual}g CTRL-A

ビジュアル選擇されたテキスト中の數字またはアルファベットに [count] を加へます。複數行がビジュアル選擇されてゐる場合、各行は付加された [count] ごとに增やされます (そのため效果的に [count] ごとに增加する排列を作ることができます)。 例へば、このやうな數字のリストがあるとします:

1.
1.
1.
1.

2 番目の "1." に移動し 3 行をビジュアル選擇してから g CTRL-A を押すと、このやうになります:

1.
2.
3.
4.
CTRL-X

カーソルの下または後の數字またはアルファベットから [count] を減じます。

{Visual}CTRL-X

ビジュアル選擇されたテキスト中の數字またはアルファベットから [count] を減じます。

MS-Windows では、ビジュアルモードでのテキストの切り取りにマップされます |dos-standard-mappings|。このマッピングを無效にしたいなら、次のやうにします:

silent! vunmap <C-X>
{Visual}g CTRL-X

ビジュアル選擇されたテキスト中の數字またはアルファベットから [count] を減じます。複數行がビジュアル選擇されてゐる場合、各値は付加された [count] ごとに減らされます (そのため效果的に [count] ごとに減少する排列を作ることができます)。

CTRL-ACTRL-X が適用できるのは:

nrformats’ オプションに依存してゐます:

10 進數では先頭の負の符號は增加/減少に對して考慮されます。しかし 2 進數、8 進數および 16 進數では考慮されません。符號を無視するには CTRL-A または CTRL-X を使ふ前に數字をビジュアル選擇します。

ゼロから始まる數 (全ての 8 進數、16 進數を含む) に對して、Vim はできる限りその數の文字數を保たうとします。"0077" 上で CTRL-A を使ふと "0100" となり、"0x100" 上で CTRL-X を使ふと "0x0ff" となります。

1 つだけ例外があります: ゼロで始まるが 8 進數でないとき (’8’ や ’9’ を含んでゐるとき)、’nrformats’ が "octal" を含んでゐるならば、結果が 8 進數とみなされないやうに、前方のゼロは削除されます。

Note:
nrformats’ が "octal" を含んでゐるとき、0 で始まる 10 進數は、8 進數と區別しづらいため、意圖しない結果になる可能性があることに注意してください。

Note:
nrformats’ が "bin" を含んでゐるとき、’0x’ または ’0X’ で始まる 2 進數は 16 進數として解釋されることに注意してください。これは ’0b’ が 16 進數の桁として有效だからです。

{譯注: 0x0b0011 のやうな値のこと。}

コマンド CTRL-A はマクロ內でたいへん便利である。例: 番號付きリストを作るには、次の方法を使ひます。

1.リストの最初の項目を作る。番號から始まるやうにすること
2. qa- レジスタ ’a’ への記錄を始める
3. Y- 項目をコピーする
4. p- 項目のコピーを最初の項目の後に貼り付ける
5. CTRL-A- 番號を增やす
6. q- 記錄をストップする
7. <count>@a- コピー、貼り付け、番號增加を <count> 回繰り返す

行を左右にずらす

<{motion}

{motion} の行を ’shiftwidth’ 1 個分左に移動します。

もしも ’vartabstop’ 機能が有效で ’shiftwidth’ オプションが 0 に設定されてゐるなら、行中の最初の空白でない場所でインデントの總計が計算されます。

<<

[count] 行を ’shiftwidth’ 1 個分左に移動します。

{Visual}[count]<

ビジュアル選擇された行を、’shiftwidth’ の [count] 個分左に移動します ({Visual} については |Visual-mode| を參照してください)。

>{motion}

{motion} の行を ’shiftwidth’ 1 個分右に移動します。

もしも ’vartabstop’ 機能が有效で ’shiftwidth’ オプションが 0 に設定されてゐるなら、行中の最初の空白でない場所でインデントの總計が計算されます。

>>

[count] 行を ’shiftwidth’ 1 個分右に移動します。

{Visual}[count]>

ビジュアル選擇された行を、’shiftwidth’ の [count] 個分右に移動します ({Visual} については |Visual-mode| を參照してください)。

:[range]<

[range] の行を、’shiftwidth’ 1 個分左に移動します。’shiftwidth’ の複數個分移動するには、’<’ を繰り返します。

:[range]< {count}

[range] (既定は現在行 |cmdline-ranges|) から始まる {count} 行を ’shiftwidth’ 1 個分左に移動します。’shiftwidth’ の複數個分移動するには、’<’ を繰り返します。

:[range]le[ft] [indent]

[range] の行を左揃へします。行のインデントは [indent] (既定値は 0) に設定されます。

:[range]> [flags]

[range] の行を、’shiftwidth’ 1 個分右に移動します。’shiftwidth’ の複數個分移動するには、’>’ を繰り返します。[flags] については |ex-flags| を參照してください。

:[range]> {count} [flags]

[range] (既定は現在の行 |cmdline-ranges|) から始まる {count} 行を、’shiftwidth’ 1 個分右に移動します。’shiftwidth’ の複數個分移動するには、’>’ を繰り返します。[flags] については |ex-flags| を參照してください。

コマンド ">" と "<" は、プログラムに含まれるインデントを變更するのに便利です。オプション ’shiftwidth’ には、これらのコマンドが插入、削除する空白の幅を設定します。’shiftwidth’ は既定では 8 ですが、例へば 3 に設定して、インデントをもつと少なくすることもできます。左方向へのシフトは、インデントがなくなつたときに終了します。右方向へのシフトは、空行には適用されません。

shiftround’ がオンのとき、インデントは ’shiftwidth’ の倍數に丸められます。

shiftwidth’ がオンのとき、あるいは ’cindent’ がオンで ’cinkeys’ が値 0 の ’#’ を含むとき、右方向へのシフトは ’#’ で始まる行に適用されません (これらの行は、行の最初に位置すべき C プリプロセッサー指令であると考へられます)。これは ’cino’ オプションで變更することができます。|cino-#| を參照してください。

expandtab’ がオフ (既定値) のとき、Vim はインデントにできる限り多くの <Tab> を使ひます。">><<" によつて、空白のみで構成されたインデントを、<Tab> (と必要ならばいくつかの空白) で構成されたインデントに置換することができます。’expandtab’ がオンのときは、Vim は空白のみを使ひます。">><<" によつて、インデント內の <Tab> を空白に置換することができます (あるいは ‘:retab!‘ を使ひます)。

行を ’shiftwidth’ の複數個分移動するには、ビジュアルモードかコマンド ‘:‘ を使ひます。

例:

Vjj4>       3 行をインデント 4 個分右に移動
:<<<        現在の行をインデント 3 個分左に移動
:>> 5       5 行をインデント 2 個分右へ移動
:5>>        5 行目をインデント 2 個分右に移動

4. 複雜な變更

4.1 フィルタコマンド

フィルタとは、テキストを標準入力から受け取り、何らかの變更を加へ、標準出力に送るプログラムのことです。以下のコマンドにより、テキストの一部をフィルタにかけることができます。フィルタの例としては、行をアルファベット順にソートする "sort"、C のプログラムを整形する "indent" (ただし、フィルタ機能を持つたバージョンが必要。全てのバージョンでできるわけではありません) などがあります。

オプション ’shell’ は、Vim がフィルタコマンドを實行するときに使ふシェルを指定します (’shelltype’ も參照してください)。フィルタコマンドはコマンド "." で繰り返すことができます。Vim は ‘:!‘ の後の (’"’ で始まる) コメントを認識しません。

!{motion}{filter}

{motion} のテキストを外部プログラム {filter} でフィルタ處理します。

!!{filter}

[count] 行を外部プログラム {filter} でフィルタ處理します。

{Visual}!{filter}

ビジュアル選擇された行を外部プログラム {filter} でフィルタ處理します ({Visual} については |Visual-mode| を參照してください)。

:{range}![!]{filter} [!][arg]

{range} 行を外部プログラム {filter} でフィルタ處理します。{filter} の後ろには ’!’ を付けてもよい。これは最後に實行されたコマンドに置き換へられます。さらに [arg] を付けると、それがコマンドに付け加へられます。

Vim はフィルタコマンドの出力を一時ファイルに保存し、そのファイルをバッファに讀み込みます |tempfile|。フィルタの出力を一時ファイルにリダイレクトするときはオプション ’shellredir’ が使はれます。Unix では ’shellredir’ がオフのとき、可能ならばパイプが使はれます。

cpoptions’ に ’R’ フラグが含まれるとき、フィルタ處理された行のマークは削除されます。|:keepmarks| コマンドを使ふと削除されません。例:

:keepmarks '<,'>!sort

フィルタ處理のあと行數が少なくなつてゐた場合、すでにない行を指してゐるマークは削除されます。

={motion}

{motion} の行を、オプション ’equalprg’ で指定された外部プログラムでフィルタ處理します。’equalprg’ が空のとき (これが既定) は、組み込みの整形機能の |C-indenting| と |'lisp'| を使ひます。しかし ’indentexpr’ が空でないときは、それが使はれます |indent-expression|。Vim が內部フォーマット機能なしでコンパイルされてゐるときは、最後の手段として "indent" プログラムが使はれます。

==

[count] 行を ={motion} と同樣にフィルタ處理します。

{Visual}=

ビジュアル選擇されたテキストを ={motion} と同樣にフィルタ處理します。

フィルタリング、diff の生成、tempname() などを行ふときには、一時ファイルが作成されます。Unix ではこのファイルはプライベートな (自分だけがアクセスできる) ディレクトリに置かれます。セキュリティ上の問題 (symlink attack や他の人があなたのファイルを讀むなど) を避けるためです。

Vim が終了するとき、そのディレクトリと中にあるファイルは自動的に削除されます。Vim に setuid ビットが立つてゐるとこれが問題を引き起こすことがあります。一時ファイルは setuid されたユーザーが所有するのに對し、フィルタコマンドは元のユーザーとして動作するためです。 MS-DOS と OS/2 では、次のディレクトリのうち最初に利用可能なものが使はれます: $TMP, $TEMP, c:\TMP, c:\TEMP。

Unix におけるディレクトリのリストは: $TMPDIR, /tmp, current-dir, $HOME。

MS-Windows ではシステム函數 GetTempFileName() が使はれます。

他のシステムではライブラリ函數 tmpnam() が使はれます。

4.2 置換

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

[range] の各行で {pattern} のマッチを {string} に置き換へます。{pattern} については |pattern| を參照してください。{string} は普通の文字列でもよいし、特別な指定方法を使つてもよい。|sub-replace-special| を參照してください。 [range] と [count] が指定されないときは現在行內でのみ置換を行ひます。[count] が指定されるときは[range] の最終行から數へて[count] 行で置換を行ひます。[range] が指定されないときは現在行から開始します。 [count] は正の數でなければなりません。|cmdline-ranges| も參照してください。

フラグについては |:s_flags| を參照してください。

:[range]s[ubstitute] [flags] [count] または
:[range]&[&][flags] [count]

最後の置換を同じパターンかつ同じ置換文字列で、フラグをつけずに繰り返します。フラグを追加することもできます (|:s_flags| を參照してください)。

Note:
:substitute‘ の後ではフラグ ’&’ は使へないことに注意してください。パターンの區切り文字だと認識されてしまひます。‘:substitute‘ とフラグ ’c’, ’g’, ’i’, ’I’, ’r’ の閒の空白は必要不可缺ではありません。しかしスクリプト內では、混亂しないやうに空白を入れておくのはよい考へです。

:[range]~[&][flags] [count]

最後の置換を同じ置換文字列で、最後の檢索パターン {譯注: "/" で使つたもの} に對して繰り返します。‘:&r‘ と似てゐます。フラグについては |:s_flags| を參照してください。

&

:s‘ と同じ (最後の置換を繰り返します)。

Note:
同じフラグが使はれるわけではないことに注意してください。實際の動作は違ふかもしれません。フラグも同じにするには ‘:&&‘ を使つてください。

g&

:%s//~/&‘ と同じ (全ての行に對し、最後の檢索パターンで、同じフラグで最後の置換を繰り返します)。例へば、‘:s/pattern/repl/flags‘ と置換を實行し、次に ‘/search‘ と檢索を實行すると、‘g&‘ は ‘:%s/search/repl/flags‘ を實行します。

覺え方: 「グローバル (global –全體的な) 置換」

:[range]sno[magic] ...

:substitute‘ と同じですが、常に ’nomagic’ を使ひます。

:[range]sm[agic] ...

:substitute‘ と同じですが、常に ’magic’ を使ひます。

置換コマンドで使へるフラグ:

[&]

先頭に指定しなければなりません。前囘の置換コマンドと同じフラグを使ひます。例:

:&&
:s/this/that/&

Note:
コマンド ‘:s‘ と ‘:&‘ では、前囘と同じフラグは使はれません。

[c]

置換前に每囘確認します。マッチしてゐる文字列を (强調表示グループ |hl-IncSearch| で) 强調表示します。確認を求められたら、ユーザーは以下のやうに應答します。

’y’そのマッチを置換する ("yes")
’l’そのマッチを置換し、置換を終了する ("last")
’n’そのマッチを置換せず、次に移る ("no")
<Esc>置換を終了する
’a’そのマッチと、以降の全てのマッチを置換する
’q’置換を終了する
CTRL-E畫面を上にスクロールする
CTRL-Y畫面を下にスクロールする

オプション ’edcompatible’ がオンのとき、Vim はフラグ [c] を記憶し、それが指定される度にオン/オフを切り替へますが、新しい檢索パターンが使はれるとリセットします。

[e]

檢索パターンが何もマッチしなかつたとき、エラーメッセージを表示しません。特にマッピング內ではエラーが發生しなかつたかのやうに續行されます。これは「パターンは見つかりませんでした」のエラーによるマッピングの中斷を防ぐのに使へます。しかし以下のエラーの發生は抑制されません。

「正規表現は文字で區切ることができません」
「\\ の後は / か ? か & でなければなりません」
「正規表現置換がまだ實行されてゐません」
「餘分な文字が後ろにあります」
「(割込まれました)」
[g]

行中の全てのマッチを置換します。このフラグなしだと、各行の 1 個目のマッチのみが置換されます。オプション ’edcompatible’ がオンのとき、Vim はこのフラグを記憶し、指定される度にオン/オフを切り替へますが、新しい檢索パターンが使はれるとリセットします。’gdefault’ がオンのときは、このフラグはオンが既定値になり、フラグ [g] を指定したときにはオフになります。

[i]

パターンの大文字/小文字の區別をしません。オプション ’ignorecase’ と ’smartcase’ は使はれません。

[I]

パターンの大文字/小文字を區別します。オプション ’ignorecase’ と ’smartcase’ は使はれません。

[n]

マッチの個數を表示し、實際には置換を行ひません。フラグ [c] は無視されます。’report’ が 0 のときと同じやうにマッチが表示されます。何個あるか調べるときに便利です |count-items|。

\= |sub-replace-expression| が使はれたときは、式はそれぞれのマッチに對してサンドボックス (|sandbox|) で實行されます。

[p]

最後に置換を行つた行を表示します。

[#]

[p] と同じ。行番號をつけます。

[l]

[p] と同じですが、|:list| のやうに表示します。

[r]

引數のない ‘:&‘ か ‘:s‘ との連携でのみ有效。‘:&r‘ は ‘:~‘ と同樣に動作します。檢索パターンが空のとき、最後の置換コマンドや ‘:global‘ でのパターンではなく、最後の檢索パターンを使用します。最後に檢索パターンを使用したコマンドが置換や ‘:global‘ だつたときは、何もしません。最後のコマンドが "/" のやうな檢索コマンドだつたときは、そのコマンドの檢索パターンを使ひます。 引數付きの ‘:s‘ では、すでにさう動作するやうになつてゐました。

:s/blue/red/
/green
:s//red/  または  :~  または  :&r

最後のコマンドは "green" を "red" に置き換へます。

:s/blue/red/
/green
:&

最後のコマンドは "blue" を "red" に置き換へます。

Note:
パターンに ’magic’ が適用されるかどうかを變更するフラグはないことに注意してください。代はりに違ふコマンド {譯注: |:snomagic|} または |/\v| などを使ひます。これは、パターン解釋を飛ばすことでのみフラグを認識できますが、その一方でパターン解釋を飛ばすには ’magic’ の適用狀態が知られてゐる必要があるためです。Catch 22! {譯注: どうにもならないといふ意味}

置換コマンドで {pattern} が空のときは、最後に使はれた置換コマンドまたはコマンド ‘:global‘ のパターンが使はれます。それが無い場合は、直前の檢索パターンがあればそれが使はれます。フラグ [r] を指定すると、最後の置換、‘:global‘、または檢索コマンドのパターンが使はれます。

{string} を省略した場合は、空文字列を指定したのと同じ結果になります。すなはち、マッチしたパターンが削除されます。{pattern} の後のセパレータも省略することができます。例:

:%s/TESTING

これは、全行から "TESTING" を削除する例です。ただし、1 つの行に 2 個以上あつても 1 個しか削除されません。

Vi との互換性のため、これら 2 つの例外が許されます。

’/’ でパターンと置換文字列を圍む代はりに、英數字や ’\’, ’"’, ’|’ 以外であれば、他の 1 バイト文字を使ふことができます。これは檢索パターンや置換文字列に ’/’ を含む場合に有益です。例:

:s+/+//+

パターンの定義については |pattern| を參照してください。矩形ビジュアルモードで、置換をその領域內だけで行ひたい場合は、パターンに |/\%V| を含めます。これを使はない場合は、置換は常に行全體に對して行はれます。

{string} が "\=" で始まるときは、それは式として評價されます。|sub-replace-expression| を參照してください。複雜な置換や特殊な文字を使ふことができます。

さうでなければ、{string} の中のこれらの文字は特別な意味を持ちます: cpoptions’ に ’/’ が含まれてゐる場合、{string} が "%" に等しいなら、前の置換コマンドの {string} が使はれます。|cpo-/| を參照してください。

magicnomagic作用
&\&マッチしたパターン全體に置き換はる
\&&’&’ に置き換はる
\0マッチしたパターン全體に置き換はる
\11 番目の () 內のマッチしたパターンに置き換はる
\22 番目の () 內のマッチしたパターンに置き換はる
....
\99 番目の () 內のマッチしたパターンに置き換はる
~\~前囘の置換の {string} に置き換はる
\~~’~’ に置き換はる
\u次の文字が大文字になる
\U後に續く文字が (\E まで) 大文字になる
\l次の文字が小文字になる
\L後に續く文字が (\E まで) 小文字になる
\e\u, \U, \l, \L の終はり

Note:
<Esc> の意味ではありません!

\E\u, \U, \l, \L の終はり
<CR>ここで行を 2 つに分ける (<CR> は CTRL-V <Enter> と入力する)
\r同上
\<CR>キャリッジリターン (CTRL-M) の插入 (<CR> は CTRL-V <Enter> と入力する)
\n<NL> (ファイル內では <NUL>) の插入 (改行を「起こさない」)
\b<BS> の插入
\t<Tab> の插入
\\’\’ の插入
\x(’x’ は上で說明されてゐない文字) 將來の擴張用に豫約濟み

特別な意味は |substitute()| の 第 3 引數 {sub} でも使へますが、いくつか例外があります:

例:

:s/a\|b/xxx\0xxx/g             "a b"      を "xxxaxxx xxxbxxx"  に置換
:s/\([abc]\)\([efg]\)/\2\1/g   "af fa bg" を "fa fa gb"         に置換
:s/abcde/abc^Mde/              "abcde"    を "abc", "de" (2 行) に置換
:s/$/^V^M/                     "abcde"    を "abcde^M"          に置換
:s/\w\+/\u\0/g                 "bla bla"  を "Bla Bla"          に置換
:s/\w\+/\L\u\0/g               "BLA bla"  を "Bla Bla"          に置換

Note:
"\L\u" を使ふと單語の最初の文字をキャピタライズできます。これは Vi や古い Vim とは互換性がなことに注意してください。それらの古い環境では "\u" は "\L" をキャンセルします。"\U\l" も同じです。

Note:
以前のバージョンでは CTRL-V が特別に扱はれてゐました。これは Vi 互換ではないので變更されました。代はりに ’\’ を使つてください。

コマンドテキスト置換結果
:s/aa/a^Ma/aaa<line-break>a
:s/aa/a\^Ma/aaa^Ma
:s/aa/a\\^Ma/aaa\<line-break>a

(ここで ^M を使ふには CTRL-V <CR> と打ち込んでください)

"\1", "\2" などの番號付けは、パターン內でどの "\(" が最初に來るかによつて決まります (左から右の順)。括弧でくくられたグループが複數回マッチするときは、最後のものが "\1", "\2" 等に使はれます。例:

:s/\(\(a[a-d] \)*\)/\2/      "aa ab x" を "ab x" に置換

"\2" は、"\(a[a-d] \)" を參照します。このパターンはまず "aa " にマッチし、次に "ab " にマッチします。

\([ab]\)\|\([cd]\) のやうに括弧を ’|’ と連携して使つてゐるとき、1 番目か 2 番目のどちらかの括弧內のパターンにはマッチしません、すなはち、\1 か \2 のどちらかは空になります。例:

:s/\([ab]\)\|\([cd]\)/\1x/g   "a b c d" を "ax bx x x" に置換

2 文字もしくは 3 文字の :substitute コマンド

:substitute コマンド一覽

|      c    e    g    i    I    n    p    l    r
| c  :sc  :sce :scg :sci :scI :scn :scp :scl  ---
| e
| g  :sgc :sge :sg  :sgi :sgI :sgn :sgp :sgl :sgr
| i  :sic :sie  --- :si  :siI :sin :sip  --- :sir
| I  :sIc :sIe :sIg :sIi :sI  :sIn :sIp :sIl :sIr
| n
| p
| l
| r  :src  --- :srg :sri :srI :srn :srp :srl :sr

例外:

:scr  is  `:scriptnames`
:se   is  `:set`
:sig  is  `:sign`
:sil  is  `:silent`
:sn   is  `:snext`
:sp   is  `:split`
:sl   is  `:sleep`
:sre  is  `:srewind`

式で置換する

置換文字列が "\=" で始まるとき、それ以降の文字列は式として解釋されます。これは再歸的に機能しません。

"<CR>" 以外の文字の特別な意味 |sub-replace-special| は無效になります。<NL> 文字は改行として使はれるのでダブルクォート文字列 "\n" で改行を入れることができます。實際の <NL> 文字 (ファイルにおける NUL 文字) を插入するにはバックスラッシュを前置します。

"\=" 表記は |substitute()| 函數の第 3 引數 {sub} でも使ふことができます。その場合、|sub-replace-special| で說明されてゐる文字は特別な意味を持たなくなります。特に、<CR> と <NL> は改行として解釋されるのではなく、そのままキャリッジリターンとニューラインとして解釋されます。

結果が |List| のときはその要素が改行を區切りとして連結されます。よつて要素がそれぞれ行となります。ただし要素が改行を含んでゐる場合は除きます。

|submatch()| 函數を使用して一致するテキストを取得することができます。マッチしたテキストの全體は "submatch(0)" で參照することができます。1 番目の () 內でマッチしたテキストは "submatch(1)" で參照することができます。以降の () 內でマッチしたテキストも同樣に參照することができます。

注意:
正規表現の區切り文字が expression 內に現れてはいけません!區切りには "@" や ":" を使ふよう檢討してください。Expression の結果に區切り文字が現れても問題はありません。

例:

:s@\n@\="\r" . expand("$HOME") . "\r"@

かうすると置換を行つた行の下に、環境變數 $HOME の値を含む新しい行が插入されます。

s/E/\="\<Char-0x20ac>"/g

これは文字 ’E’ をユーロ記號で置換します。詳しくは |<Char->| を參照してください。

4.3 檢索と置換

:promptf[ind] [string]

檢索ダイアログを表示する。 [string] が與へられると、それが初期檢索文字列になる。

{Vim の Win32 版、Motif 版、GTK の GUI 版、MacVim 版のみ}

:promptr[epl] [string]

檢索/置換ダイアログを表示する。 [string] が與へられると、それが初期檢索文字列になる。

{Vim の Win32 版、Motif 版、GTK の GUI 版、MacVim 版のみ}

4.4 タブの變換

:[range]ret[ab][!] [new_tabstop]

新たに指定されたタブストップ (タブ幅) に基づき、<Tab> を含む空白の連續を全て、新しい空白と <Tab> の列に置き換へる。新たなタブストップの指定がないか 0 が指定されたときは、Vim はオプション ’tabstop’ の現在の値を使用する。

tabstop’ の現在の値は、既存のタブの幅を計るために常に使用される。’!’ を付けると、Vim は通常の空白のみの列も、適切なタブに置き換へる。’expandtab’ がオンのとき、Vim は全てのタブを適切な數の空白に置き換へる。

このコマンドは ’tabstop’ を新たに指定された値に設定する {譯注: この事實は重要である}。ファイル全體に適用されたときは (それが既定の動作)、ファイルの見かけに變化が起こることはないはずだ。

注意:
このコマンドは C プログラム中の文字列內部にある <Tab> 文字も修正する。これを避けるためには、プログラム內では "\t" を使ふとよい (さうでなくても、これはよい習慣である)。

:retab!‘ も空白の連續を <Tab> 文字に變へてしまひ、printf() の出力をめちやくちやにするかもしれない。

|+vartabs| 機能が有效な場合、單一の tabstop の代はりにコンマで分けられたタブ幅のリストが使用されるだらう。リストのそれぞれの値は 1 つの tabstop の幅を意味するが、最後の値だけは後續するすべての tabstop に適用される。

タブストップが 8 で保存され、タブストップが 4 で編輯されたファイルを編輯するために autocommand と ":retab" を使ふ例。警告: 文字列內の空白は變はつてしまふことがある!オプション ’softtabstop’ も參照。

:auto BufReadPost   *.xx    retab! 4
:auto BufWritePre   *.xx    retab! 8
:auto BufWritePost  *.xx    retab! 4
:auto BufNewFile    *.xx    set ts=4

5. テキストのコピーと移動

"{a-zA-Z0-9.%#:-"}

續く操作 (削除、コピー、貼り付け) にレジスタ {a-zA-Z0-9.%#:-"} を使ふ (削除、コピーでは大文字を使ふことでレジスタに追記できる) ({.%#:} は貼り付けにのみ使用可能)。

:reg[isters]

全ての名前付きレジスタおよび番號付きレジスタのタイプと內容を表示します。レジスタが |:redir| の書き込み先になつてゐる場合はそのレジスタは表示されません。

タイプは次のいづれか:
"c"|characterwise| のテキスト
"l"|linewise| のテキスト
"b"|blockwise-visual| のテキスト
:reg[isters] {arg}

{arg} に指定された名前付きレジスタおよび番號付きレジスタを表示する。例:

:reg 1a

レジスタ ’1’ と ’a’ が表示される。{arg} の中では空白を用ゐてよい。

:di[splay] [arg]

:registers と同じ。

["x]y{motion}

{motion} のテキストを [レジスタ x に] コピーする。コピーされるテキストがないとき (例へば 1 桁目で "y0" を行ふ)、オプション ’cpoptions’ がフラグ ’E’ を含んでゐるならエラーになる。

["x]yy

[count] 行を [レジスタ x に] コピーする (行單位 |linewise|)。

["x]Y

[count] 行を [レジスタ x に] コピーする ("yy" と同義、行單位 |linewise|)。"Y" でカーソル位置から行の終はりまでコピーしたいときは (この方が論理的と言へるが、Vi 互換ではない) ":map Y y$" を使ふ。

{Visual}["x]y

ビジュアル選擇されたテキストを [レジスタ x に] コピーする ({Visual} については |Visual-mode| を參照)。

{Visual}["x]Y

ビジュアル選擇された行を [レジスタ x に] コピーする ({Visual} については |Visual-mode| を參照)。

:[range]y[ank] [x]

[range] の行を [レジスタ x に] コピーする。"* レジスタと "+ レジスタへのコピーは |+clipboard| 機能が有效な場合のみ可能。

:[range]y[ank] [x] {count}

[range] の最後の行 (省略時は現在行 |cmdline-ranges|) から數へて {count} 行を [レジスタ x に] コピーする。

["x]p

カーソルの後に、テキストを [count] 回 [レジスタ x から] 貼り付ける。

["x]P

カーソルの前に、テキストを [count] 回 [レジスタ x から] 貼り付ける。

["x]<MiddleMouse>

カーソルの前に、テキストを [count] 回 [レジスタ x から] 貼り付ける。レジスタ指定がない場合は "* が使はれる。カーソルは插入したテキストの末尾に置かれる。マウスは ’mouse’ が ’n’ か ’a’ を含むときのみ使へる。 もしあなたがスクロールホイールを持つてゐて意圖せずにテキストを貼り付けてしまふのなら、次のマッピングでマウスの眞ん中のボタンを無效化できる。

:map <MiddleMouse> <Nop>
:imap <MiddleMouse> <Nop>

複數クリックも無效にしたいなら |double-click| も參照のこと。

["x]gp

"p" と似てゐるが、カーソルは插入したテキストの直後に置かれる。

["x]gP

"P" と似てゐるが、カーソルは插入したテキストの直後に置かれる。

:[line]pu[t] [x]

[line] 行目 (省略時は現在行) の後にテキストを [レジスタ x から] コピーする。このコマンドは常に行單位 |linewise| の動作をするので、コピーされたブロックを新しい行として插入するときに使へる。

レジスタが指定されてゐないときのレジスタは ’cb’ オプションに依存する。’cb’ が "unnamedplus" を含むときは + レジスタ |quoteplus| からペーストする。さうではなく、’cb’ が "unnamed" を含むときは * レジスタ |quotestar| からペーストする。さうでなければ、無名レジスタ |quote_quote| からペーストする。

レジスタには ’=’ に續けて式を指定することもできる。コマンドの末尾までが式として評價される。文字 ’|’ と ’"’ がコマンドの末尾として解釋されないやうにするには、それらをエスケープする {譯注: 前に ’\’ を置く} 必要がある。例:

:put ='path' . \",/test\"

’=’ の後に式がないときは前囘の式が使はれる。それはコマンド ":dis =" で見ることができる。

:[line]pu[t]! [x]

[line] 行目 (省略時は現在行) の前にテキストを [レジスタ x から] コピーする。

["x]]p または
["x]]<MiddleMouse>

"p" と似てゐるが、現在行に合はせてインデントが調整される。マウスは、’mouse’ が ’n’ か ’a’ を含むときだけ使へる。

["x][P または
["x]]P または
["x][p または
["x][<MiddleMouse>

"P" と似てゐるが、現在行に合はせてインデントが調整される。マウスは、’mouse’ が ’n’ か ’a’ を含むときだけ使へる。

これらのコマンドを使つて、ある場所から別の場所へテキストをコピーできる。まづコピー、削除または變更コマンドを使つて、テキストをレジスタに蓄へる。そしてレジスタの內容を、貼り付けコマンドで文章中に插入する。これらのコマンドで、あるファイルから別のファイルへテキストを移動させることもできる。Vim はバッファを切り替へても、全てのレジスタの內容を保つてゐるからである (コマンド CTRL-^ は、2 個のバッファを素早く切り替へられる)。

貼り付けコマンド (":put" 以外) は、"." で繰り返したり、アンドゥできる。テキストをレジスタに蓄へるのに使はれたコマンドが行單位 |linewise| のものだつたら、テキストはカーソルのある行の次の行 ("p" のとき) や前の行 ("P" のとき) に貼り付けられる。さうでなければ、テキストはカーソルの後 ("p" のとき) や前 ("P" のとき) に插入される。コマンド ":put" を使つたときは、テキストは常に次の行へ插入される。

"xp" といふコマンド列で、カーソル上の文字と次の文字との入れ替へができる。現在行と次の行との入れ替へには、コマンド列 "ddp" を使ふ。(カーソルが單語の前の空白の上にあるとき) 次の單語とその次の單語との入れ替へには、コマンド列 "deep" を使ふ。貼り付けコマンドを使つた後には、コマンド "’]" か "‘]" で插入された行の終はりに移動でき、コマンド "’[" か "‘[" で插入された行の最初に移動できる。

ビジュアルモードで |p| や |P| 等の貼り付けコマンドを使つたとき、Vim は選擇されたテキストをレジスタの中身で置き換へようとする。これがうまく動作するかどうかは、選擇領域の種類とレジスタ內のテキストの種類による。矩形選擇では、ブロックのサイズと、選擇領域の角が既存の文字上にあるかどうかにもよる。(實裝上の詳細: 實際の動作は、まづレジスタの中身を選擇領域の後に貼り付け、その後で選擇領域を削除するやうになつてゐる)

それまで選擇されてゐたテキストが無名レジスタに保存される。同じテキストを複數のビジュアル選擇領域にプットしたい場合は、ほかのレジスタを使ふ必要がある。例へば、コピーしたいテキストをヤンクして、選擇したテキストを "0p で置き換へる。これを好きなだけ繰り返す。このとき、無名レジスタはプットするたびに變はる。

矩形ビジュアルモードで一行のみをヤンクしたとき、それをビジュアル選擇した範圍に貼り付けると、選擇範圍にその一行が貼り付けされる (つまり貼り付けた行のブロックによつて矩形選擇範圍が置換される)。

矩形ビジュアルモードで、レジスタにテキストを蓄へるコマンドを使ふと、テキストのブロックはカーソルの前 ("P" のとき) または後 ("p" のとき) から、現在行と引き續く行にわたつて、插入される。テキストのブロック全體は同じ列から始まるやうに插入される。そのため插入されたテキストはコピーや削除されたときと同じ形を保つてゐる。

Vim は、このやうにするために <Tab> を空白で置き換へることがある。しかし、テキストのブロックの幅が <Tab> の幅の整數倍でなく、さらに插入されたブロックの後のテキストが <Tab> を含むとき、列揃へがをかしくなることがある。

Note:
文字單位のコピーコマンドの後、コピーされたテキストの中でバッファの先頭に一番近い文字の上にカーソルが置かれることに注意。つまり "yl" ではカーソルは動かないが、"yh" ではカーソルは 1 文字左に動く。

理論的說明: Viでは、後方移動を伴つたコマンド "y" ではコピーされたテキストの先頭にカーソルを移動させないことがあつた。これは再表示が省かれたためである。Vim では Posix に定められた通り、常に先頭の文字にカーソルを移動させる。

行單位のコピーコマンドではカーソルは選擇の最初の行に置かれるが、カラムは變更されない。なのでその位置はコピーされた最初の文字の上ではないかもしれない。

レジスタには 10 種類ある:

  1. 無名レジスタ ""
  2. 10 個の番號付きレジスタ "0 から "9
  3. 小削除用レジスタ "-
  4. 26 個の名前付きレジスタ "a から "z または "A から "Z
  5. 3 個の讀み取り專用レジスタ ": と ". と "%
  6. 代替バッファ用レジスタ "#
  7. expression 用レジスタ "=
  8. 選擇領域用レジスタ "* と "+ と "~
  9. 消去專用レジスタ "_
  10. 最終檢索パターン用レジスタ "/

1. 無名レジスタ ""

このレジスタには、コマンド "d", "c", "s", "x" 等で削除されたテキストや、"y" 等のコピーコマンドでコピーされたテキストが蓄へられる。特定のレジスタが指定されてゐてもゐなくても關係ない (例へば "xdd でもこれが使はれる)。つまり無名レジスタは最後に使はれたレジスタを指してゐると考へられる。よつて、大文字レジスタを使つて名前つきレジスタにテキストを追加したときも、無名レジスタの中身は、その名前つきレジスタと同じになる。

例外はレジスタ ’_’ である。"_dd は、削除されたテキストをどのレジスタにも蓄へない。 無名レジスタの中身は、レジスタを指定しない貼り付けコマンド (p や P) で使ふことができる。加へて、このレジスタは ’"’ といふ名前で使ふことができる。これは、使ふときには二重引用符 ’"’ を 2 個打ち込むといふことである。レジスタ "" に對する書き込みはレジスタ "0 にも書き込むことになる。

{Vi ではレジスタの內容はファイルを變更するときに失はれ、’"’ もない}

2. 番號付きレジスタ "0 から "9

これらのレジスタには、コピーや削除コマンドによつてテキストが蓄へられる。番號付きレジスタの 0 には、一番最近にコピーしたテキストが蓄へられるが、コピーの際に ["x] として別のレジスタ名を指定したときは、これには蓄へられない。 番號付きレジスタ 1 には、一番最近に削除したり變更したテキストが蓄へられるが、コマンドに別のレジスタ名を指定したり、削除や變更したテキストが 1 行以下だつたりしたときは、これには蓄へられない (そのときは小削除用レジスタが使はれる)。例外は、以下の移動コマンドと削除コマンドを組み合はせたときである。|%|, |(|, |)|, |`|, |/|, |?|, |n|, |N|, |{|, |}|。このときは必ずレジスタ "1 が使はれる (これは Vi 互換の動作である)。削除や變更したテキストが 1 行以下だつたときは、レジスタ "- も使はれる。

Note:
これらの文字はマップ可能である。例: |%| は matchit プラグインによつてマップされてゐる。

削除や變更が行はれるたびに、レジスタ 1 の內容はレジスタ 2 に、レジスタ 2 の內容はレジスタ 3 に、といふ風にずれていく。レジスタ 9 の內容は失はれる。

{Vi では番號付きレジスタの內容はファイルを變更する際に失はれる。レジスタ 0 はない}

3. 小削除用レジスタ "-

このレジスタには、範圍が 1 行以下の削除コマンドで削除されたテキストが蓄へられる。ただし、コマンドに ["x] で別のレジスタ名を指定したときはこれには蓄へられない。

4. 名前付きレジスタ "a から "z または "A から "Z

これらのレジスタが使はれるのは、ユーザーに指定されたときのみである。コピーや削除の際にこれらのレジスタを小文字で指定すると、コピーや削除されたテキストが蓄へられ、元から入つてゐたテキストは消える。大文字で指定すると、元から入つてゐた內容の後ろに新しいテキストを付け加へる。’cpoptions’ にフラグ ’>’ が入つてゐると、新しいテキストの前に改行が插入される。

5. 讀みとり專用レジスタ ": と ". と "%

讀みとり專用レジスタには ’%’ と ’#’ と ’:’ と ’.’ がある。コマンド "p", "P", ":put" および CTRL-R でのみ使ふことができる。

".

最後に插入されたテキストが蓄へられる (插入モードのコマンド CTRL-ACTRL-@ で插入されるものと同じテキストである)。

Note:
これはコマンドライン上での CTRL-R では使へないことに注意。動作が少し異なり、テキストを貼り付けるといふより插入するやうな動作をする (插入されるテキストに ’textwidth’ 等のオプションが影響する)。

"%

カレントファイルの名前が蓄へられる。

":

一番最近に實行されたコマンドラインの內容が蓄へられる。例: 前囘のコマンドラインによるコマンドを實行するには、"@:" が使へる。コマンドラインがこのレジスタに蓄へられるのは、コマンドライン內にコマンドが最低でも1文字打ち込まれたときである。そのため、コマンドが完全にキーマッピングから實行されたときには、この內容に變化はない。

{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}

6. 代替ファイルレジスタ "#

カレントウィンドウの代替ファイルの名前を含む。これは |CTRL-^| コマンドがどのやうに働くかを變更する。

このレジスタは書き込み可能で、主にプラグインがこのレジスタを變更した後で元に戾すためである。バッファ番號を許容する:

let altbuf = bufnr(@#)
...
let @# = altbuf

バッファ番號が越えるあるいはそのバッファが存在しない場合はエラー |E86| を返す。 また存在するバッファ名でのマッチングを許容する:

let @# = 'buffer_name'

與へられた名前にマッチしたバッファが 1 つより多い場合はエラー |E93| を、與へられた名前にマッチするバッファがない場合は |E94| を返す。

7. Expression レジスタ "=

これは、本當はテキストを蓄へるレジスタではないが、レジスタを使ふコマンドで式を評價するために使へる。この expression レジスタは讀み取り/書き込み可能である。

" または CTRL-R の後に ’=’ を打ち込むと、カーソルはコマンド行に移動し、あらゆる式を入力することができる (|expression| を參照)。コマンドラインから入力できる普通の編輯用コマンドは、式用の特別履歷も含め、全て使用可能である。<CR> を打ち込んでコマンドライン入力を終了させると、式の結果が計算される。<Esc> を打ち込んで終了させると、式は破毀される。式が入力されないときは、(コマンド"/" と同樣) 前囘の式が使はれる。

式を評價した結果は文字列でなければならない。評價した結果が數値なら、文字列に變換される。"p" と ":put" コマンドの場合、結果が浮動小數點數なら文字列に變換される。リストの場合、各要素が文字列に變換され、それぞれが 1 行として插入される。辭書または FuncRef はエラーメッセージが出る (string() を使つて變換する)。

レジスタ "= が "p" で使はれると、文字列は <NL> 文字 {譯注: New Line –改行} の所で分割される。文字列が <NL> で終はつてゐたら、これは行單位のレジスタと見なされる。

8. 選擇範圍レジスタ "* と "+ と "~

これらのレジスタは、GUI で、選擇されたテキストを蓄へたり取り出すために使はれる。|quotestar| と |quoteplus| を參照。クリップボードが利用できないときは、無名レジスタが代はりに使はれる。Unix では |+xterm_clipboard| が有效になつてゐるときだけクリップボードを利用できる。

Note:
"* と "+ に區別があるのは X11 システムのみであることに注意。違ひについては |x11-selection| を參照。MS-Windows では "* と "+ は實際には同義で、クリップボード |gui-clipboard| を使用する。

この讀み込み專用の "~ レジスタは最後にドラッグアンドドロップされたテキストを提供する。何かが Vim にドロップされたとき、"~ レジスタがそれで埋められ、<Drop> 假想キーが通知される。このキーをリマップして使ふことができる。デフォルトでは (全てのモードにおいて) "~ レジスタの內容をカーソルの位置に插入する。

{|+dnd| 付きでコンパイルされたときのみ有效。現在は GTK GUI でのみ使へる。}

Note:
"~ レジスタはプレーンテキストを Vim にドロップしたときのみ使はれる。URI のリストは內部で扱はれる。

9. 消去專用レジスタ "_

このレジスタを指定してテキストを削除しても、{譯注: レジスタには} 何も起こらない。そのため、普通のレジスタに影響を與へずに削除が行へる。このレジスタから貼り付けようとしても、何も出てこない。

10. 最終檢索パターン用レジスタ "/

最後に使はれた檢索パターンが蓄へられる。これはコマンド "n" やオプション ’hlsearch’ による强調表示に使はれる。このレジスタは ‘:let‘ で變更できるので、’hlsearch’ による强調表示を、實際に檢索を行はずに別のマッチに適用することができる。このレジスタを使つてコピーしたり削除することはできない。檢索の方向は |v:searchforward| で設定することができます。

Note:
函數から拔けると、この値は函數に入る前の値に復元される。|function-search-undo|

レジスタには、コマンド ‘:let‘ で書き込むことができる |:let-@|。例:

:let @/ = "the"

レジスタを指定せずに貼り付けコマンドを使ふと、最後に書き込みが行はれたレジスタが使はれる (その內容は無名レジスタと同じである)。混亂したときは、コマンド ‘:dis‘ を使ふとレジスタの內容が分かる (このコマンドは、全てのレジスタの內容を表示する。無名レジスタは ’"’ と示される)。

以下の 3 個のコマンドは、必ず行全體に對して働く。

:[range]co[py] {address}

[range] 行を、{address} 行目の下にコピーする。

:t

":copy" と同義。

:[range]m[ove] {address}

[range] 行を、{address} 行目の下に移動する。

6. テキストの整形

:[range]ce[nter] [width]

[range] の行を、幅 [width] (既定値は ’textwidth’, ’textwidth’ が 0 のときは 80) に基づいて中央揃へする。

:[range]ri[ght] [width]

[range] の行を、幅 [width] (既定値は ’textwidth’, ’textwidth’ が 0 のときは 80) に基づいて右揃へする。

:[range]le[ft] [indent]

[range] の行を左揃へする。行中のインデントを [indent] (既定値 0) に設定する。

gq{motion}

{motion} の行を整形する。整形は3種類の方法のうちどれかで行はれる。

  1. formatexpr’ が空でなければその expression が評價される。これはバッファごとに異なつてもよい。
  2. formatprg’ が空でなければ外部プログラムが使はれる。
  3. それ以外の場合は內部整形ルーチンが使はれる。

3 番目の場合は、オプション ’textwidth’ が整形された各行の長さを制禦する (後述)。’textwidth’ が 0 なら、整形された行の長さは畫面の幅となる (ただし、最大で 79)。 ’formatoptions’ は、整形の仕方を制禦する |fo-table|。カーソルは最後に整形された行の最初の非空白文字の上に置かれる。

Note:
以前はコマンド "Q" でこの機能を行つてゐた。やはり整形に "Q" を使ひたいならば、次のマッピングを使ふこと。

:nnoremap Q gq
gqgq
gqq

現在行を整形する。カウントを指定するとその行數だけ整形される。

{Visual}gq

ビジュアル選擇されたテキストを整形する。({Visual} については |Visual-mode| を參照)。

gw{motion}

{motion} で動いた範圍の行を整形する。|gq| に似てゐるがカーソルは元の位置に戾る。’formatprg’ と ’formatexpr’ は使はれない。

gwgw
gww

"gw" と同樣にして現在行を整形する。

{Visual}gw

選擇されたテキストを "gw" と同樣にして整形する。({Visual} については |Visual-mode| を參照)。

例: 現在の段落を整形するには、次のやうにする。

gqap

コマンド "gq" は、移動コマンドによつてカーソルが動くはずの位置にカーソルを移動させる。このため、"." で整形を繰り返すことができる。これは、"gqj" (現在行と次行を整形) と、"gq}" (段落の最後までを整形) で有用である。

Note:
formatprg’ が設定されてゐるときは、"gq" を實行すると (フィルタコマンド使用時と同樣に) カーソルは整形された最初の行に移動する。

カーソルのある位置の段落をフォーマットし、その位置からさらに編輯を再開するにはかうする。

gwap

いつも段落をフォーマットしておきたいなら ’formatoptions’ に ’a’ フラグを追加すればよい。|auto-format| も參照のこと。

オプション ’autoindent’ がオンのとき、Vim は最初の行のインデントを續く行に對して適用する。

テキストの整形處理は空の行には變更を加へない (しかし、空白のみで構成された行には變更を行ふ!)。

オプション ’joinspaces’ は、行が連結されるときに使はれる。

オプション ’formatexpr’ でテキストの整形に使ふ expression を設定したり、’formatprg’ で外部プログラムの名前を設定することができる。外部プログラムによる整形處理には、’textwidth’ や他のオプションは何の影響も與へない。

formatexpr’ オプションには、バッファの再整形を行ふ Vim script 函數を設定することができる。整形はファイルの種類に强く依存するので、これは通常 |ftplugin| で發生するべきである。對應するスクリプトは實際に必要とされるときにだけ讀み込まれ、かつそのスクリプト名は <filetype>format.vim とされるべきなので、|autoload| スクリプトを使用することは理にかなつてゐる。

例へば、Vim と共に配布され $VIMRUNTIME ディレクトリに配置されてゐる XML ファイルタイププラグインは、’formatexpr’ オプションを以下のやうに設定する:

setlocal formatexpr=xmlformat#Format()

これは xmlformat#Format() 函數を定義してゐるスクリプトが以下のディレクトリで見つかることを意味してゐる:

‘$VIMRUNTIME/autoload/xmlformat.vim‘

以下は、選擇されたテキストから末尾の空白を取り除くスクリプトの例である。これを autoload ディレクトリに置くこと。例、~/.vim/autoload/format.vim:

func! format#Format()
  " 明示的な gq コマンドの場合だけ再整形する
  if mode() != 'n'
    " Vim の內部再整形に立ち戾る
    return 1
  endif
  let lines = getline(v:lnum, v:lnum + v:count - 1)
  call map(lines, {key, val -> substitute(val, '\s\+$', '', 'g')})
  call setline('.', lines)

  " 內部の整形は實行させない!
  return 0
endfunc

その後以下のやうに整形を有效にすることができる:

setlocal formatexpr=format#Format()

Note:
この函數は、插入モードから呼ばれた場合に明示的に非ゼロを返す (基本的に ’textwidth’ の制限を超えてテキストが插入されることを意味する)。これは Vim に內部の整形機能に立ち戾つて再整形させることになる。

しかしながら、テキストを再整形するために |gq| コマンドが使用された場合、その函數は選擇された行を受け取り、それらの行から末尾の空白を取り除き、そして所定の位置にそのテキストを配置しなほす。もし 1 つの行を複數行に分割しようとしてゐる場合、何か上書きしてしまはないよう注意すること。

插入もしくは置換モードからのテキストの再整形を可能にしたい場合、函數が再歸的に呼び出されることがあるため注意しなければならない。これをデバッグするためには、’debug’ オプションを設定することが役に立つ。

テキストを右揃へするコマンドは、Vim には存在しない。"par" 等の外部コマンド (例: "!}par" で段落の最後までを整形する) を實行したり、’formatprg’ に "par" を指定することで、これを行ふことができる。

コメント整形の槪要がユーザーマニュアルの |30.6| にある。

Vim は特殊な方法で自動的にコメントを插入・整形できる。Vim は行の最初の特定の文字列 (空白を無視する) によつて、コメントを認識できる。コメントには 3 種類が使へる。

オプション ’comments’ は要素のコンマ區切りのリストである。各要素はコメント文字列の種類を定義してゐる。要素は次のやうに構成される。

@{flags@}:@{string@}

{string} は普通のテキストで、これがなければならない。

{flags}:

n入れ子になつたコメント。混在した要素の入れ子も有效である。’comments’ が "n:),n:>" であれば、"> ) >" で始まる行はコメント。
b{string} の後に餘白 (<Space>、<Tab> または <EOL>) が必要。
f最初の行のみがコメント文字列を持つ。次の行にはコメントを繰り返さないが、インデントは保持する (例、bullet-list)。
s3 部コメントの開始部分。
m3 部コメントの中閒部分。
e3 部コメントの終了部分。
l左揃へ。’s’ か ’e’ と共に指定された場合、それぞれ最初または最後の部分の一番左の文字が、眞ん中の一番左の文字に對して揃へられる。この動作はデフォルトであるが、省略もできる。詳しくは後述。
r右揃へ。一番左でなく一番右であること以外、l と同じ。詳しくは後述。
Oコマンド "O" ではこのコメントを考慮しない。
x3 部コメントで、中閒部分のコメントがすでに自動で插入されてゐるとき、新しい行の最初のアクションとして、終了部分のコメント文字列の最後の文字を打ち込むだけで、コメントを終了させる。詳細は以下を參照。
{digits}’s’ か ’e’ と共に指定された場合: 自動的に插入された、中閒または最後のコメントの最初の部分に對し、{digits} 分のオフセットを加へる。このオフセットは左端を基準とする。詳しくは後述。
-{digits}{digits} に似てゐるが、インデントを減らす。開始部分と終了部分に減らすべきインデントが存在してゐるときのみ機能する。

コメント文字列にフラグ ’f’, ’s’, ’m’, ’e’ のいづれも指定しないとき、Vim はコメント文字列を行の最初に繰り返すと假定する。フラグ欄は空になる。

{string} の前や後にある餘白は、{string} の一部とされる。コメント文字列に必要でない限り、餘白を前や後に付けないこと。

あるコメント開始文字列が他のコメントの一部であるときは、共通部分の後で特定の部分を指定すること。例へば、"-" と "->" の兩方を含みたいときは、次のやうにする。

:set comments=f:->,f:-

3 部コメントには常に開始部分、中閒部分、終了部分を指定しなければならない。そして、他の要素を閒に入れてはならない。C言語での3部コメントの例は次の通り。

sr:/*,mb:*,ex:*/

"*ptr" がコメントとして認識されないやうに、中閒部分の文字列がフラグ ’b’ を含んでゐる。3 部コメントでは、Vim は開始部分と中閒部分の文字列の後のテキスト內に、最後の文字列が含まれてゐないかを調べる。終了部分の文字列が見つかると、コメントは次の行には續かない。3 部コメントには、Vim が中閒の行を認識できるやうにするために、中閒部分の文字列を指定しなければならない。

上記の 3 部コメントの定義における、フラグ "x" の使用について注意しておく。C コメントでリターンを打てば、Vim は新しい行に對して " * " のやうなコメントの中閒部分の開始文字列を插入する。このコメントを閉ぢるには、新しい行において何も打ち込む前に "/" と打ち込めばよい。これは中閒のコメント指示を最後のコメント指示に置き換へ、" */" とする。指定された桁揃へは適用される。その前にバックスペースを打ち込む必要はない。

中閒部分がマッチしたとき、終了部分もマッチしてゐてそちらの方が長い場合は、終了部分が使はれる。これによつて C スタイルコメントが中閒部分の末尾にスペースを付けなくても機能するやうになる。

桁揃へフラグを使つてコメントを目立たせる例を示す。’comments’ が次のやうになつてゐる場合:

:set comments=sr:/***,m:**,ex-2:******/
                                   /***
                                     **<--"r" フラグによつて右揃へされてゐる
                                     **
 "-2" フラグによつてスペース         **
 2 個分のオフセットがついてゐる  --->**
                                   ******/

これを入力する際、コメントの開始行を入力し、リターンを 4 回押す。そして "/" を押せばコメントが終了する。

3 部コメントについて、より細かいことをいくつか說明する。桁揃へフラグとオフセットフラグが考慮される箇所は、次の 3 箇所ある。コメント開始行のあとの新規行を開くとき、コメント終了行の前の新規行を開くとき、自動的にコメントを終了させるときである。終了部分の桁揃へフラグは、上の行を參照する。これによつて、"s" と "e" に同じ桁揃へフラグを指定したとき、開始部分と終了部分のインデント量が同じになる。コメントの部分ごとに 1 個だけの桁揃へが使はれるやうになつてゐる。しかし、オフセットの數は "r" と "l" フラグより優先する。

cindent’ をオンにしてゐると、多くの場合、桁揃へフラグより優先される。|gq| や |=| を使つて再インデントするときも、桁揃へフラグは適用されない。同じ擧動を定義するには、それらのコマンドのオプションを使ふ。1 つの考へとしては、’cindent’ に文脈に應じてコメントをインデントさせるオプションを追加することであるが、3 部コメントの桁揃へを摸倣することはほとんどできない。しかし ’indentexpr’ は 3 部コメントをもつとうまく扱へる可能性を持つ。

他の例:

"b:*""*" の後に非ブランク文字が付いてゐなければ、"*" で始まる行を含む。これはポインタの値への參照 "*str" が、コメントとして認識されるのを防ぐ。
"n:>"">", ">>", ">>>" などで始まる行を含む。
"fb:-""- " で始まるリストを整形する。

既定では "b:#" が含まれてゐる。これは "#include" で始まる行がコメントとならないことを意味する。しかし、"# define" で始まる行はコメントとなる。これは妥協的解決である。

テキストの整形方法はオプション ’formatoptions’ で調整できる。’formatoptions’ は以下のフラグを含む文字列である。既定値は "tcq" である。讀みやすくするために、フラグをコンマで區切つてもよい。

フラグ ’formatoptions’ に指定されたときの作用

ttextwidth’ を使つてテキストを自動折返しする
ctextwidth’ を使つてコメントを自動折返して、現在のコメント開始文字列を自動插入する。
r插入モードで <Enter> を打ち込んだ後に、現在のコメント開始文字列を自動插入する。
oノーマルモードで ’o’, ’O’ を打ち込んだ後に、現在のコメント開始文字列を自動的に插入する。
q"gq" でコメントを整形する。

Note:
整形は空行やコメント開始文字列のみの行は變更しないことに注意。新しい段落はそのやうな行の次、またはコメント開始文字列が變はつた所から始まる。

w行末に空白が付いてゐるとき、段落が次行に續いてゐると認識する。行末が空白以外の行で段落が終はるとする。
a段落を自動整形する。テキストが插入されたり削除されるたび、段落は再整形される。|auto-format| を參照。’c’ フラグも設定されてゐるときはコメント插入時のみ機能する。
nテキストの整形時、番號付きリストを認識する。これは實際には ’formatlistpat’ を使ふ。それゆゑ、どんな種類のリストでも處理できる。

數字の後のテキストのインデントが次の行に使はれる。數字の後に ’.’, ’:’, ’)’, ’]’ や ’}’ が付いてもよい。オプション ’autoindent’ がオンでなければならないことに注意。"2" と一緖には機能しない。例:

1. 1 つ目の項目
   折り返し
2. 2 つ目の項目
2テキストを整形するとき、段落の最初の行ではなく 2 番目の行のインデントを使つてそれ以降の行を整形する。これは最初の行のインデントが他の行と異なるやうな段落をサポートする。’autoindent’ もオンである必要がある。例:
        ここはある段落の 1 行目
ここは上の行と同じ段落の 2 行目
ここは 3 行目。

これはコメントの中でも機能します (コメント文字がないかのやうに)。

v插入モードでVi互換の自動折返しを使ふ: 插入モードに入つて以來入力された空白でのみ折返しが行はれる。(Note: これは 100% の Vi 互換ではない。Vi にはこのあたりに「豫期できない機能」、といふかバグがあつた。Vi は實際のテキストの列の代はりに畫面上の列を使用する。)
b’v’ と同樣だが、折返し餘白の中または前で、空白を入力したときのみ自動折返しをする。插入開始時に ’textwidth’ より行が長かつたり、’textwidth’ に達するまで空白を入力しなかつたときは、Vim は自動折返しをしない。
l插入モードでは長い行は折り返されない: 插入開始時に行が ’textwidth’ より長い場合、Vim は自動で整形を行はない。
m文字コードが 255 より後のマルチバイト文字の閒でも改行する。これは文字全てがそれだけで單語であるやうな、アジア言語のテキストで便利である。
M行の連結時に、マルチバイト文字の前後に空白を插入しない。こちらの方がフラグ ’B’ より優先する。
B行の連結時に、マルチバイト文字同士の閒に空白を插入しない。こちらよりフラグ ’M’ の方が優先する。
11 文字の單語の後では改行しない。代はりにその前で改行される (可能ならば)。
j可能ならば、行を連結する際にコメントリーダーを削除する。例へば、以下の行を連結する場合:
int i;   // the index
         // in the list

以下のやうになる:

int i;   // the index in the list
pピリオドに續く單一の空白で改行しない。これは、2 つの空白で區切られた文章を含む散文用に ’joinspaces’ と |cpo-J| を補完するためのものである。例へば、’textwidth’ を 28 に設定すると:
Surely you're joking, Mr. Feynman!

以下のやうになる:

Surely you're joking,
Mr. Feynman!

以下のやうにはならない:

Surely you're joking, Mr.
Feynman!

’t’ と ’c’ で Vim が自動折返しを行ふタイミングを指定できる。

フラグ作用
""自動整形しない ("gq" で手動の整形處理を行ふ)
"t"テキストを自動整形するが、コメントにはしない
"c"コメントを自動整形するが、テキストにはしない (C 言語コードに適してゐる)
"tc"テキストとコメントを自動整形する

Note:
textwidth’ が 0 のとき、Vim はいかなる自動整形も行はないので注意 (’comments’ によるコメント開始文字列の插入はする)。例外はフラグ ’a’ が入つてゐる場合である。|auto-format|

Note:
paste’ がオンのとき、Vim は全ての整形處理を行はないので注意。

Note:
Vim に自動折返しをさせなくても、’textwidth’ は非 0 であつてよいことに注意。’textwidth’ は "gq" による整形處理でも便利だからである。

comments’ が "/*" と ("*" と) "*/" を含んでゐるときは、Vim 組み込みの機能によりこれらのタイプのコメントをもう少し巧く扱ふことができる。

(’formatoptions’ に ’r’ か ’o’ が含まれてゐるとき) "/*" または "*/" の前か後で新しい行を始めると、行の正しい開始位置が自動的に與へられる。同じことが整形處理と自動折返しでも行はれる。"/*" や "*" で始まり、かつ "*/" を含む行の後で行を始めるときは、コメント開始文字列が插入されず、新しい行のインデントはコメントの最初の行に合はせられる。

例:

/*
 * 典型的なコメント。
 */
この行のインデントは、上のコメントの先頭行と同じになる。

これら全ては、特に異なるファイルタイプに對する異なる設定に對應する際、新しい autocommand と連携して、クールに振舞ふはずである。

いくつかの例:

C 言語コード用 (コメントの整形のみ):

:set fo=croq

メール/ネットニューズ用 (全て整形、コマンド "o" でコメントを始めない):

:set fo=tcrq

自動整形

オプション ’formatoptions’ にフラグ ’a’ が含まれると、テキストを插入したり削除したときに自動整形が行はれる。これはテキストの段落分けを編輯するときに便利である。以下では使ひ方についてのヒントをいくつか。

次にいくつかの警告:

7. テキストのソート

Vimはソート函數とソートコマンドを備へてゐる。ソート函數については |sort()|, |uniq()| を參照。

:[range]sor[t][!] [b][f][i][n][o][r][u][x] [/{pattern}/]

[range]の行をソートする。範圍が指定されない場合は全行をソートする。

[!] をつけると順序が逆になる。

[i] をつけると大文字・小文字を區別しない。

[n][f][x][o][b] オプションはどれかひとつのみ指定できる。

[n] をつけると行の ({pattern} のマッチの後ろまたは內側の) 最初の 10 進數の數字でソートする。數字が ’-’ で始まる場合、マイナスとみなされる。

[f] をつけると行の小數點數でソートする。小數點數の値は ({pattern} によるマッチの後ろまたは內側の) テキストを str2float() に渡すやうにして決定される。このオプションは Vim が小數點數サポートを有效にしてコンパイルされたときのみ使へる。

[x] をつけると行の ({pattern} のマッチの後ろまたは內側の) 最初の 16 進數の數字でソートする。"0x" と "0X" は無視される。數字が ’-’ で始まる場合、マイナスとみなされる。

[o] をつけると行の ({pattern} のマッチの後ろまたは內側の) 最初の 8 進數の數字でソートする。

[b] をつけると ({pattern} によるマッチの後ろまたは內側の) 行の最初の 2 進數でソートする。

[u] をつけると (u は unique=「一意の」といふ意味に基づく) 連續する同一行の最初の行だけを殘す。([i] がつくと大文字・小文字を無視する) このフラグがつかない場合、連續する同一行はそのままの順序で殘される。

Note:
先頭と末尾の空白が原因で異なる行にみなされるかもしれない。

/pattern/ が指定され、フラグ [r] がない場合は {pattern} にマッチするテキストはスキップされる。これによつて、そのマッチの後に來るテキストでソートできる。スラッシュの代はりにどんな non-letter でも使ふことができる。 例へば、コンマで區切られた2番目のフィールドでソートするには:

:sort /[^,]*,/

畫面上の10桁目でソートするには(そのためタブとスペースは同一視される):

:sort /.*\%10v/

行中の最初の數字でソートするには:

:sort /.\{-}\ze\d/

(解說: ".\{-}" は任意のテキストにマッチする。"\ze" はそのマッチの終はりをセットし、"\d" は數字にマッチする。) [r] がつくと、前述のやうに {pattern} をスキップするのでなく、{pattern} にマッチする部分でソートする。例へば、各行の最初の 3 文字だけでソートするには:

:sort /\a\a\a/ r

{pattern} が使はれると {pattern} を含まない行は現在の順序のままになる。逆順でソートすると、それらはソートされた行の後で逆順になる。逆順でなければ、ソートされた行の前でもとの順序のまま置かれる。

{pattern} が空である場合 (例: // が指定されたとき)、最後に使はれた檢索パターンが使はれる。よつて、まづ檢索コマンドでパターンを確かめてみることができる。

Note:
‘:global‘ といつしよに ‘:sort‘ を使つてもマッチする行をソートすることにはならない。これはまつたく無意味である。

ソートの詳細は使つてゐるライブラリ函數による。ソートが現在のロケールに從ふといふ保證はない。それを調べるには實行してみるしかない。ソートは「安定」ソートである。

ソートは中斷することができる。しかし中斷するのが遲いと行が重複してしまふかもしれない。これも使つてゐるシステムのライブラリ函數による。


Up: 目次   [Index]