Usr_24

Nvim の:helpページ。 生成された ソースは こちらtree-sitter-vimdoc パーサーを使用。


VIM ユーザーマニュアル - Bram Moolenaar 著
高速挿入
テキスト入力時、Vim はキーストローク数を削減し、タイプミスを回避する様々な方法を提供します。挿入モード補完を使用して、以前に入力した単語を繰り返します。長い単語を短い単語に略します。キーボードにない文字を入力します。
24.1 修正の実施 24.2 マッチの表示 24.3 補完 24.4 挿入の繰り返し 24.5 別行からのコピー 24.6 レジスタの挿入 24.7 略語 24.8 特殊文字の入力 24.9 ダイグラフ 24.10 ノーマルモードコマンド
次章: usr_25.txt フォーマット済みテキストの編集 前章: usr_23.txt その他のファイルの編集 目次: usr_toc.txt

修正の実施

<BS>キーは既に説明しました。カーソル直前の文字を削除します。<Del>キーは、カーソル下(後)の文字を削除します。単語全体を間違って入力した場合は、CTRL-Wを使用します。
The horse had fallen to the sky
CTRL-W
The horse had fallen to the
行全体をめちゃくちゃにしてやり直したい場合は、CTRL-Uを使用して削除します。これにより、カーソル後のテキストとインデントが保持されます。最初の空白でない文字からカーソルまでのテキストのみが削除されます。次の行の「fallen」の「f」にカーソルを置いた状態でCTRL-Uを押すと、次のようになります。
The horse had fallen to the
CTRL-U
fallen to the
数単語前の間違いに気づいた場合は、カーソルをそこに移動して修正する必要があります。たとえば、次のように入力したとします。
The horse had follen to the ground
「follen」を「fallen」に変更する必要があります。カーソルが最後にある場合、修正するには次のように入力します。
<Esc>4blraA
挿入モードを終了<Esc> 4単語戻る 4b 「o」の上に移動 l 「a」に置換 ra 挿入モードを再開 A
別の方法
<C-Left><C-Left><C-Left><C-Left><Right><Del>a<End>
4単語戻る <C-Left><C-Left><C-Left><C-Left> 「o」の上に移動 <Right> 「o」を削除 <Del> 「a」を挿入 a 行末に移動 <End>
これは、挿入モードを維持しながら、特別なキーを使用して移動する方法です。これは、モードレスエディタで行う操作に似ています。覚えやすいですが、時間がかかります(手を文字からカーソルキーに移動する必要があり、<End>キーはキーボードを見ずに押すのが困難です)。これらの特別なキーは、挿入モードを終了しないマッピングを作成する場合に最も役立ちます。その場合、追加の入力は問題になりません。挿入モードで使用できるキーの概要を以下に示します。
<C-Home> ファイルの先頭へ <PageUp> 1画面分上へ <Home> 行の先頭へ <S-Left> 1単語左へ <C-Left> 1単語左へ <S-Right> 1単語右へ <C-Right> 1単語右へ <End> 行の末尾へ <PageDown> 1画面分下へ <C-End> ファイルの末尾へ
その他にもいくつかあります。ins-special-specialを参照してください。

24.2 マッチの表示

)を入力すると、対応する(がどこにあるかを確認できると便利です。Vimでそれを行うには、次のコマンドを使用します。
:set showmatch
ここで「(example)」のようなテキストを入力すると、)を入力した直後に、Vimはカーソルを対応する(に一時的に移動し、0.5秒間保持してから、入力位置に戻ります。対応する(がない場合、Vimはビープ音を鳴らします。(をどこかで忘れ、または)を多く入力した可能性があることを示しています。マッチは[]と{}のペアにも表示されます。次の文字を入力するまで待つ必要はありません。Vimがそれを認識するとすぐにカーソルが戻り、以前と同様に挿入が続きます。 'matchtime'オプションを使用して、Vimが待つ時間を変更できます。たとえば、Vimに1.5秒待たせるには
:set matchtime=15
時間は10分の1秒単位で指定されます。

24.3 補完

Vimは、挿入時に単語を自動的に補完できます。単語の先頭部分を入力し、CTRL-Pを押すと、Vimが残り部分を推測します。たとえば、Cプログラムを作成していて、次のように入力するとします。
total = ch_array[0] + ch_array[1] + ch_array[2];
最初に次のように入力します。
total = ch_array[0] + ch_
この時点で、CTRL-Pコマンドを使用してVimに単語の補完を指示します。Vimはカーソルの前にある文字で始まる単語を検索します。この場合は「ch_」で、単語ch_arrayと一致します。そのため、CTRL-Pを入力すると、次のようになります。
total = ch_array[0] + ch_array
さらに少し入力すると、次のようになります(スペースで終わります)。
total = ch_array[0] + ch_array[1] +
ここでCTRL-Pを入力すると、Vimはカーソルの前の単語を補完する単語を再度検索します。カーソルの前に何もないため、逆方向の最初の単語である「ch_array」が見つかります。CTRL-Pをもう一度入力すると、次の単語「total」が一致する単語として表示されます。3回目のCTRL-Pはさらに後ろを検索します。他に何もない場合、エディタは単語を使い果たすため、元のテキスト(何もない)に戻ります。4回目のCTRL-Pでエディタは「ch_array」から再開します。
前方検索にはCTRL-Nを使用します。検索はファイルの末尾で折り返されるため、CTRL-NCTRL-Pは同じ一致を見つけることができますが、シーケンスは異なります。ヒント:CTRL-Nは次のマッチ、CTRL-Pは前のマッチです。
Vimエディタは、補完する単語を見つけるために多くの努力をしています。デフォルトでは、次の場所を検索します。
1. 現在のファイル 2. その他のウィンドウのファイル 3. 他の読み込まれたファイル(非表示バッファ) 4. 読み込まれていないファイル(非アクティブバッファ) 5. タグファイル 6. 現在のファイルで#includeされたすべてのファイル

オプション

'complete'オプションを使用して、検索順序をカスタマイズできます。
'ignorecase'オプションが使用されます。設定されている場合、マッチを検索する際に大文字と小文字の区別は無視されます。
補完のための特別なオプションは'infercase'です。これは、大文字と小文字を無視しながら('ignorecase'を設定する必要があります)マッチを見つける場合に役立ちますが、これまでに入力された単語の大文字と小文字は使用します。そのため、「For」を入力し、Vimが「fortunately」というマッチを見つけた場合、「Fortunately」になります。

特定のアイテムの補完

探しているものが見つかった場合は、次のコマンドを使用して特定の種類のアイテムで補完できます。
CTRL-X CTRL-F ファイル名 CTRL-X CTRL-L 行全体 CTRL-X CTRL-D マクロ定義(含まれているファイルにも) CTRL-X CTRL-I 現在のファイルと含まれているファイル CTRL-X CTRL-K 辞書の単語 CTRL-X CTRL-T 類義語辞典の単語 CTRL-X CTRL-] タグ CTRL-X CTRL-V Vimコマンドライン
それぞれのコマンドの後、CTRL-Nを使用して次のマッチを見つけ、CTRL-Pを使用して前のマッチを見つけることができます。これらのコマンドの詳細については、ins-completionを参照してください。

ファイル名の補完

例としてCTRL-X CTRL-Fを取り上げます。これはファイル名を見つけます。現在のディレクトリでファイルがスキャンされ、カーソルの前の単語と一致するファイルがそれぞれ表示されます。たとえば、現在のディレクトリに次のファイルがあるとします。
main.c sub_count.c sub_done.c sub_exit.c
挿入モードに入り、入力します。
The exit code is in the file sub
この時点でCTRL-X CTRL-Fコマンドを入力します。Vimは、現在のディレクトリのファイルを参照して、現在の単語「sub」を補完します。最初のマッチはsub_count.cです。これは目的のものではないため、CTRL-Nを入力して次のファイルにマッチします。このマッチはsub_done.cです。CTRL-Nをもう一度入力すると、sub_exit.cになります。結果は次のとおりです。
The exit code is in the file sub_exit.c
ファイル名が/(Unix)またはC:\(MS-Windows)で始まる場合、ファイルシステム内のすべてのファイルを見つけることができます。たとえば、「/u」とCTRL-X CTRL-Fを入力します。これにより「/usr」と一致します(これはUnix上です)。
the file is found in /usr/
ここでCTRL-Nを押すと、「/u」に戻ります。「/usr/」を受け入れて1ディレクトリレベル深く移動するには、CTRL-X CTRL-Fを再度使用します。
the file is found in /usr/X11R6/
もちろん、結果はファイルシステムで見つかったものによって異なります。マッチはアルファベット順にソートされます。

ソースコードでの補完

ソースコードファイルは構造化されています。そのため、インテリジェントな方法で補完を行うことができます。Vimではこれをオムニ補完と呼びます。他のエディタではインテリセンスと呼ばれますが、これは商標です。
オムニ補完のキーはCTRL-X CTRL-Oです。明らかに、Oはオムニを表しており、覚えやすくなっています。Cソースの編集の例を使用してみましょう。
{
    struct foo *p;
    p->
カーソルは「p->」の後です。ここでCTRL-X CTRL-Oを入力します。Vimは代替案のリストを提供します。これは「struct foo」に含まれるアイテムです。これは、任意の単語を補完するCTRL-Pを使用する場合とは大きく異なります。ここでは「struct foo」のメンバーのみが有効です。
オムニ補完が機能するには、いくつかの設定が必要な場合があります。少なくとも、ファイルタイププラグインが有効になっていることを確認してください。vimrcファイルには次のような行を含める必要があります。
filetype plugin on
または
filetype plugin indent on
Cコードの場合は、タグファイルを作成し、'tags'オプションを設定する必要があります。ft-c-omniで説明されています。他のファイルタイプでは、同様の処理が必要になる場合があります。compl-omni-filetypes以下を参照してください。特定のファイルタイプでのみ機能します。'omnifunc'オプションの値を確認して、機能するかどうかを確認してください。

24.4 挿入の繰り返し

CTRL-Aを押すと、最後に挿入モードにあったときにタイプしたテキストが挿入されます。たとえば、次のように始まるファイルがあるとします。
"file.h" ~
/* Main program begins */ ~
このファイルを編集して、最初の行の先頭に「#include 」を挿入します。
#include "file.h" ~
/* Main program begins */ ~
「j^」コマンドを使用して次の行の先頭に移動します。ここで新しい「#include」行の挿入を開始します。そのため、次のように入力します。
i CTRL-A
結果は次のようになります。
#include "file.h" ~
#include /* Main program begins */ ~
CTRL-Aは前の挿入のテキストを挿入するため、「#include 」が挿入されました。「main.h」<Enter>を入力して行を終了します。
#include "file.h" ~
#include "main.h" ~
/* Main program begins */ ~
CTRL-@コマンドはCTRL-Aを実行してから挿入モードを終了します。これは、まったく同じ挿入を再び実行する迅速な方法です。

24.5 別行からのコピー

CTRL-Yコマンドは、カーソルの上の文字を挿入します。これは、前の行を複製する場合に便利です。たとえば、次のCコードの行があるとします。
b_array[i]->s_next = a_array[i]->s_next;
ここで、同じ行を入力する必要がありますが、「s_next」の代わりに「s_prev」を使用します。新しい行を開始し、CTRL-Yを14回押して、「next」の「n」まで移動します。
b_array[i]->s_next = a_array[i]->s_next;
b_array[i]->s_
ここで「prev」を入力します。
b_array[i]->s_next = a_array[i]->s_next;
b_array[i]->s_prev
次の「next」までCTRL-Yを押し続けます。
b_array[i]->s_next = a_array[i]->s_next;
b_array[i]->s_prev = a_array[i]->s_
ここで「prev;」を入力して終了します。
CTRL-Eコマンドは、カーソル下の文字を挿入する点を除いて、CTRL-Yコマンドと同様の動作をします。

24.6 レジスタの挿入

CTRL-R {register}コマンドは、レジスタの内容を挿入します。これは、長い単語を何度もタイプする手間を省くのに役立ちます。例えば、以下を入力する必要があるとします。
r = VeryLongFunction(a) + VeryLongFunction(b) + VeryLongFunction(c)
関数名は別のファイルで定義されています。そのファイルを開き、関数名の上にカーソルを移動して、レジスタvにヤンクします。
"vyiw
「v」はレジスタ指定、「yiw」はヤンク・インナワードです。新しい行を挿入するファイルを開き、最初の文字を入力します。
r =
ここで、CTRL-R vを使用して関数名を挿入します。
r = VeryLongFunction
関数名と関数名の間に文字を続けて入力し、CTRL-R vをさらに2回使用します。補完機能でも同じことができます。レジスタの使用は、同じ文字で始まる単語が多数ある場合に便利です。
レジスタに<BS>などの特殊文字が含まれている場合、キーボードから入力されたかのように解釈されます。これを避けたい場合(テキストに<BS>を実際に挿入したい場合)、CTRL-R CTRL-R {register}コマンドを使用します。

24.7 省略語

省略語とは、長い単語の代わりに短い単語を使用することです。例えば、「ad」は「advertisement」の略です。Vimでは、省略語を入力すると、自動的に展開されます。「ad」を常に「advertisement」に展開するには、次のコマンドを使用します。
:iabbrev ad advertisement
これで、「ad」と入力すると、テキストに「advertisement」という単語全体が挿入されます。これは、単語の一部になり得ない文字(例えば、スペース)を入力することでトリガーされます。
入力内容 表示内容
I saw the a I saw the a
I saw the ad I saw the ad
I saw the ad<Space> I saw the advertisement<Space>
「ad」だけを入力した場合は、展開されません。「add」のような単語は展開されません。省略語のチェックは単語全体に対して行われます。

複数の単語の省略

複数の単語になる省略語を定義することもできます。例えば、「JB」を「Jack Benny」として定義するには、次のコマンドを使用します。
:iabbrev JB Jack Benny
プログラマーとして、私は2つのかなり珍しい省略語を使用しています。
:iabbrev #b /****************************************
:iabbrev #e <Space>****************************************/
これらは、ボックス化されたコメントを作成するために使用されます。コメントは#bで始まり、上線が描画されます。次にコメントテキストを入力し、#eを使用して下線を引きます。#eの省略語はスペースで始まっていることに注意してください。つまり、最初の2文字はスペースとアスタリスクです。通常、Vimは省略語と展開の間のスペースを無視します。その問題を回避するために、スペースを7文字で記述します:<, S, p, a, c, e, >。
注記: ":iabbrev"は長い単語です。":iab"でも同じように機能します。省略語コマンドの省略です!

入力ミス修正

同じ入力ミスを何度も繰り返すことはよくあることです。例えば、「teh」を「the」と入力してしまうなどです。これは省略語で修正できます。
:abbreviate teh the
これらをいくつでも追加できます。よくあるミスを発見するたびに1つずつ追加してください。

省略語の一覧表示

":abbreviate"コマンドは省略語の一覧を表示します。
:abbreviate
i  #e                  ****************************************/
i  #b                 /****************************************
i  JB                 Jack Benny
i  ad                 advertisement
!  teh                 the
最初の列の「i」は挿入モードを示します。これらの省略語は挿入モードでのみ有効です。他の可能性のある文字は次のとおりです。
c コマンドラインモード :cabbrev ! 挿入モードとコマンドラインモードの両方 :abbreviate
省略語はコマンドラインモードではあまり役に立たないため、主に":iabbrev"コマンドを使用します。これにより、例えば、「ad」が次のコマンドを入力したときに展開されるのを防ぎます。
:edit ad

省略語の削除

省略語を削除するには、":unabbreviate"コマンドを使用します。次の省略語があるとします。
:abbreviate @f fresh
これはこのコマンドで削除できます。
:unabbreviate @f
これをタイプしている間、@fが「fresh」に展開されることに気付くでしょう。心配しないでください。Vimはそれを理解します(「fresh」の省略語がある場合を除きますが、それは非常にまれです)。すべての省略語を削除するには、
:abclear
":unabbreviate"と":abclear"は、挿入モード(":iunabbreviate"と":iabclear")とコマンドラインモード(":cunabbreviate"と":cabclear")のバリアントも存在します。

省略語の再マッピング

省略語を定義する際に注意すべき点が1つあります。結果の文字列はマッピングされてはなりません。例えば
:abbreviate @a adder
:imap dd disk-door
ここで@aと入力すると、「adisk-doorer」が表示されます。これは望ましい結果ではありません。これを回避するには、":noreabbrev"コマンドを使用します。これは":abbreviate"と同じ動作をしますが、結果の文字列がマッピングに使用されるのを防ぎます。
:noreabbrev @a adder
幸いなことに、省略語の結果がマッピングされることはめったにありません。

24.8 特殊文字の入力

CTRL-Vコマンドは、次の文字を文字通り挿入するために使用されます。つまり、文字が持つ特殊な意味は無視されます。例えば
CTRL-V <Esc>
エスケープ文字を挿入します。したがって、挿入モードを終了しません。(CTRL-Vの後にスペースを入力しないでください。これは読みやすくするためだけです)。
注記: MS-Windowsでは、CTRL-Vはテキストを貼り付けるために使用されます。CTRL-Vの代わりにCTRL-Qを使用してください。一方、Unixでは、CTRL-Qは一部のターミナルでは機能しません。特殊な意味を持っているためです。
CTRL-V {digits}コマンドを使用して、10進数{digits}の文字を挿入することもできます。例えば、文字番号127は<Del>文字です(ただし、必ずしも<Del>キーではありません!)。<Del>を挿入するには、次のように入力します。
CTRL-V 127
このようにして、最大255文字を入力できます。2桁未満の数字を入力すると、数字以外の文字がコマンドを終了します。数字以外の文字を入力する必要を回避するには、先頭に0を1つまたは2つ追加して3桁にします。次のコマンドはすべて<Tab>とドットを挿入します。
CTRL-V 9. CTRL-V 09. CTRL-V 009.
16進数で文字を入力するには、CTRL-Vの後に「x」を使用します。
CTRL-V x7f
これも文字255までです(CTRL-V xff)。「o」を使用して文字を8進数で入力し、さらに2つの方法で最大16ビットと32ビットの番号を入力できます(Unicode文字など)。
CTRL-V o123
CTRL-V u1234
CTRL-V U12345678

24.9 ダイグラフ

一部の文字はキーボードにありません。例えば、著作権記号(©)などです。Vimでこれらの文字を入力するには、ダイグラフを使用します。ダイグラフは、2つの文字が1つの文字を表します。例えば、©を入力するには、3つのキーを押します。
CTRL-K Co
使用可能なダイグラフを確認するには、次のコマンドを使用します。
:digraphs
Vimはダイグラフテーブルを表示します。その3行を示します。
AC ~_ 159 NS | 160 !I ¡ 161 Ct ¢ 162 Pd £ 163 Cu ¤ 164 Ye ¥ 165
BB ¦ 166 SE § 167 ': ¨ 168 Co © 169 -a ª 170 << « 171 NO ¬ 172
-- ­ 173 Rg ® 174 'm ¯ 175 DG ° 176 +- ± 177 2S ² 178 3S ³ 179
これにより、例えば、CTRL-K Pdと入力することで得られるダイグラフは (£) 文字であることがわかります。これは163(10進数)の文字番号です。PdはPoundの略です。ほとんどのダイグラフは、生成する文字に関するヒントを与えるように選択されています。リストをよく見ると、その論理が理解できるでしょう。その組み合わせのダイグラフがない場合は、最初の文字と2番目の文字を入れ替えることができます。したがって、CTRL-K dPも機能します。「dP」のダイグラフがないため、Vimは「Pd」ダイグラフも検索します。
注記: ダイグラフは、Vimが使用していると想定している文字セットによって異なります。常に":digraphs"を使用して、現在使用可能なダイグラフを確認してください。
独自のダイグラフを定義できます。例
:digraph a" ä
これにより、CTRL-K a"がä文字を挿入するように定義されます。10進数で文字を指定することもできます。これは同じダイグラフを定義します。
:digraph a" 228
ダイグラフに関する詳細は、digraphsを参照してください。特殊文字を挿入する別の方法は、キーマップを使用することです。詳細は45.5を参照してください。

24.10 通常モードコマンド

挿入モードでは、使用できるコマンドは限られています。通常モードでは、はるかに多くのコマンドを使用できます。通常モードコマンドを使用する場合は、通常は<Esc>で挿入モードを終了し、通常モードコマンドを実行してから、「i」または「a」で挿入モードを再開します。より速い方法があります。CTRL-O {command}を使用すると、挿入モードから任意の通常モードコマンドを実行できます。例えば、カーソルから行末までを削除するには
CTRL-O D
このようにして、1つの通常モードコマンドのみを実行できます。ただし、レジスタまたはカウントを指定できます。より複雑な例
CTRL-O "g3dw
これにより、レジスタgに3番目の単語までが削除されます。
次の章:usr_25.txt フォーマットされたテキストの編集
著作権:manual-copyrightを参照してください vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンド索引
クイックリファレンス