Next: , Previous: , Up: 目次   [Index]


素早く入力する

*usr_24.txt*	For Vim バージョン 8.1.  Last change: 2018 Mar 18

		     VIM USER MANUAL - by Bram Moolenaar

				素早く入力する

テキストを入力するときに、キーストロークを減らしたり入力ミスを防いだりする方法がいくつかあります。補完機能を使へば以前に入力した單語を繰り返し入力できます。長い單語を短縮形で入力することもできます。キーボードに無い文字を入力する方法もあります。

|24.1|修正する
|24.2|對應する括弧を表示する
|24.3|補完
|24.4|插入を繰り返す
|24.5|隣の行からコピーする
|24.6|レジスタを插入する
|24.7|短縮形 (Abbreviations)
|24.8|特殊な文字を入力する
|24.9|ダイグラフ (Digraph)
|24.10|ノーマルモードコマンド

修正する

<BS> キーは既に說明しましたね。<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| 參照。

對應する括弧を表示する

"‘)’" を入力したときに、對應する "‘(’" の場所を確認できたら便利ですよね。次のコマンドでそのやうに設定できます:

:set showmatch

例へば "‘(example)’" と入力したとき、"‘)’" を入力した瞬閒に、對應する括弧にカーソルが移動します。カーソルは 0.5 秒くらゐその場所に留まり、再び元の場所に歸つてきます。

對應する括弧が見つからなかつた場合はビープ音が鳴ります。そのときは、‘(’ を入力し忘れてないか、‘)’ を入力し過ぎてないか、確認しませう。

この機能は、‘[]’ や ‘{}’ の組み合はせにも對應してゐます。カーソルが移動してゐるときに、戾つてくるまで次の入力を待つ必要はありません。次の文字を入力した瞬閒にカーソルは元に戾るので、すぐに入力を再開できます。

カーソルが移動先で待機する時閒は ’matchtime’ オプションで設定できます。例へば、1.5 秒待機するには次のやうに設定します:

:set matchtime=15

時閒は 1/10 秒單位で指定してください。

補完

テキストの中から單語を檢索して補完することができます。單語の出だしを入力して CTRL-P を押すと、殘りの部分が入力されます。

例へば、C プログラムを書いてゐて、次のやうに入力したいとします:

total = ch_array[0] + ch_array[1] + ch_array[2];

まづ、次のやうに入力してください:

total = ch_array[0] + ch_

ここで、CTRL-P コマンドを使つて單語を補完します。カーソル直前の文字列にマッチする單語が檢索されます。この場合なら、"‘ch_’" にマッチする單語、つまり "‘ch_array’" がヒットします。したがつて、CTRL-P を押すと次のやうになります:

total = ch_array[0] + ch_array

續けて入力し、次のやうになりました (末尾に空白があります):

total = ch_array[0] + ch_array[1] +

さて、ここで CTRL-P を押すと再びカーソル直前の文字列が補完されます。今囘は文字が無いので、最初に見つかつた單語、つまり "‘ch_array’" が補完されます。もう一度 CTRL-P を押すと、さらに次の候補が補完されます。この場合は "total" です。もう一度 CTRL-P を押せばさらに次の候補が補完されます。次の單語が見つからなかつた場合は元の文字列に戾ります。この例では空文字列です。4 度目に CTRL-P を押すと再び最初の "ch_array" が補完されます。

前方檢索する場合は CTRL-N を使ひます。檢索はファイル終端を超えて處理されるので、CTRL-NCTRL-P は順番が違ふだけで、同じ單語が檢索されます。

Hint: CTRL-N は Next-match (次の候補)、CTRL-P は Previous-match (前の候補) です。

單語の補完では、樣々な場所から單語を檢索できます。初期設定では、次の場所が檢索されます:

  1. カレントファイル
  2. 他のウィンドウのファイル
  3. ロードされたファイル (隱しバッファ)
  4. ロードされてないファイル (休眠バッファ)
  5. タグファイル
  6. カレントファイルが #include してゐるファイル

オプション

檢索場所の順番は ’complete’ オプションで設定できます。

檢索には ’ignorecase’ オプションが使はれます。このオプションがオンのときは、大文字と小文字は區別されません。

infercase’ は補完用の特別なオプションです。大文字と小文字を區別しない (’ignorecase’ がオンに設定されてゐる) ときでも、自分で入力した文字の種類をそのまま使へます。つまり、"‘For’" と入力して "‘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-VVim のコマンドライン

補完を實行した後は、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 を入力します。カレントディレクトリから "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/" を確定してからさらに深い階層へ進みたい場合は再び CTRL-X CTRL-F を使ひます:

the file is found in /usr/X11R6/

もちろん、ファイル構成が違へば結果は異なるでせう。檢索結果はアルファベット順にソートされます。

ソースコードの補完

ソースコードは書式が決まつてゐるので、より賢い補完を實裝することができます。Vim ではそれをオムニ補完 (Omni completion) と呼びます。某エディタではインテリセンスと呼ばれてゐますが、それは商標です。

オムニ補完のキーは CTRL-X CTRL-O です。O は Omni の頭文字なので覺えやすいでせう。C 言語のソースを使つて說明します:

{
    struct foo *p;
    p->

カーソルは "‘p->’" の後ろにあります。CTRL-X CTRL-O を押すと、"struct foo" のメンバが候補として表示されます。これは CTRL-P の補完とはまつたく違ひます。CTRL-P ではあらゆる單語が候補になりますが、オムニ補完は "struct foo" のメンバだけが補完されます。

オムニ補完を使ふには設定が必要です。最低でもファイルタイププラグインを有效にしておく必要があります。vimrc に以下の行を書き加へてください:

        filetype plugin on
または:
        filetype plugin indent on

C 言語の場合はタグファイルを作成して ’tags’ オプションを設定する必要があります。|ft-c-omni| を參照してください。他のファイルタイプでも似たやうな設定が必要になります。|compl-omni-filetypes| を參照してください。オムニ補完は特定のファイルタイプでしか利用できません。’omnifunc’ オプションを確認し、オムニ補完が利用できるかどうか確認してください。

插入を繰り返す

CTRL-A を押すと、前囘の插入モードで入力したテキストを插入できます。

例へば、次のやうなファイルがあつたとします:

"file.h"
/* Main program begins */

1 行目の行頭に "#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 と同じことを實行してから插入モードを拔けます。まつたく同じ插入を繰り返したいときに使ひます。

隣の行からコピーする

CTRL-Y コマンドを使ふと、カーソルの上の文字を插入できます。1 つ上の行を複製したい場合に便利です。例へば、次のやうな 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-Y と似たコマンドに CTRL-E があります。これはカーソルの下の文字を插入するコマンドです。

レジスタを插入する

CTRL-R {register} コマンドを使ふと、レジスタの內容を插入できます。長い單語を入力するのが簡單になります。例へば、次の行を入力したいとします。

r = VeryLongFunction(a) + VeryLongFunction(b) + VeryLongFunction(c)

函數名は別のファイルで定義されてゐます。そのファイルを開いてカーソルを函數名の先頭に移動し、次のコマンドでレジスタ v にヤンクします:

"vyiw

"v はレジスタの指定、"yiw" は yank-inner-word (單語をヤンクする) です。さて、元のファイルに戾り、插入モードを開始して次のやうに入力します:

r =

ここで、CTRL-R v を押して函數の名前を插入します:

r = VeryLongFunction

續けて函數の引數などを入力し、函數名を入力するときになつたら再び CTRL-R v を使ひます。

同じことは補完を使つてもできますが、同じ文字で始まる單語がたくさんある場合にはレジスタが便利です。

レジスタの中に <BS> などの特殊な文字が含まれてゐる場合、その文字は、實際にキーボードから入力されたのと同じやうに處理されます。それが望みの動作ではない場合 (例へば、<BS> をテキストとして插入したい場合) は CTRL-R CTRL-R {register} を使つてください。

短縮形 (Abbreviations)

短縮形とは長い單語を置き換へる短い單語のことです。例へば、"ad" は "advertisement" の短縮形です。Vim では、入力した短縮形を自動的に展開することができます。

"ad" を "advertisement" の短縮形として登錄するには、次のコマンドを使ひます:

:iabbrev ad advertisement

これで、"ad" と入力すると、完全形の "advertisement" がテキストに插入されます。短縮形の置き換へは、スペースなどの、單語の一部として認識されない文字を入力したときに實行されます:

入力した文字畫面上での見え方
I saw the aI saw the a
I saw the adI saw the ad
I saw the ad<Space>I saw the advertisement<Space>

"ad" と入力しただけでは展開されません。これは例へば "add" のやうな單語も入力できるやうにするためです。單語の境界が確定してから短縮形の展開が適用されます。

複數の單語の短縮形

複數の單語に展開される短縮形を定義できます。例へば、"JB" を "Jack Benny" の短縮形として登錄するには、次のコマンドを使ひます:

:iabbrev JB Jack Benny

プログラムを書くとき、私は少し變はつた短縮形を使つてゐます:

:iabbrev #b /****************************************
:iabbrev #e <Space>****************************************/

これはコメントブロックを作成するときに使ひます。コメントを開始するときに #b で最初の行を描き、コメントを書いてから、#e で末尾の行を描きます。#e の展開形がスペースで始まつてゐます。

別の言ひ方をすれば、最初の 2 文字がスペースとスターになつてゐます。通常、短縮形と展開形の閒の空白は無視されるので、スペースを入れたい場合は ‘<’, ‘S’, ‘p’, ‘a’, ‘c’, ‘e’, ‘>’ といふ 7 文字の特殊な表記を使ひます。

Note:
":iabbrev" は入力するのが長くて大變なので、":iab" でも構ひません。これは短縮コマンドの短縮形です!

入力ミスを直す

入力ミスの癖ってありますよね。例へば、"the" と入力するはずが "teh" になつてしまつたり。短縮形を使つて修正しませう:

:abbreviate teh the

このやうな短縮形のリストを作成し、入力ミスの癖を見つけたら追加しませう。

短縮形を一覽表示する

":abbreviate" コマンドで短縮形の一覽を表示できます:

:abbreviate
i  #e             ****************************************/
i  #b            /****************************************
i  JB            Jack Benny
i  ad            advertisement
!  teh           the

行頭の "i" は插入モードの意味です。その短縮形は插入モードの中だけで有效です。他にも、次のやうな文字が表示されます:

cコマンドラインモード:cabbrev
!插入モードとコマンドラインモード:abbreviate

コマンドラインモードで短縮形が役に立つことはあまりないので、"iabbrev" コマンドを主に使ふことになるでせう。"iabbrev" なら、次のやうなコマンドで "ad" が展開される心配はありません:

:edit ad

短縮形の削除

短縮形を取り除くには ":unabbreviate" コマンドを使ひます。次のやうな短縮形が登錄されてゐるなら:

:abbreviate @f fresh

次のコマンドで削除できます:

:unabbreviate @f

このコマンドを入力すると @f が "fresh" に展開されてしまひますが、心配はいりません。コマンドは正しく處理されます (ただし、"fresh" といふ別の短縮形が定義されてゐる場合は期待した動作になりません。まぁそんなことはほとんどないはずですが)。

すべての短縮形を削除するには次のコマンドを使ひます:

:abclear

":unabbreviate" と ":abclear" にも、插入モード用 (":iunabbreviate" と ":iabclear") とコマンドライン用 (":cunabbreviate" と ":cabclear") があります。

短縮形の再マップ

短縮形を定義するときに注意すべき點がもう 1 つあります。展開された文字列がマップされないやうにしなくてはなりません。例をあげませう:

:abbreviate @a adder
:imap dd disk-door

"@a" を入力すると "adisk-doorer" になつてしまひます。これは意圖した動作ではないはずです。これを避けるには、":noreabbrev" コマンドを使ひます。":abbreviate" と機能は同じですが、展開結果にマップが適用されません:

:noreabbrev @a adder

これで、展開結果がマップされなくなります。

特殊な文字を入力する

CTRL-V コマンドを使ふと、その次に入力した文字をそのまま插入できます。つまり、文字の特殊效果が無視されます。例へば、このやうに入力すると:

CTRL-V <Esc>

エスケープ文字が插入されます。插入モードは終了しません。(CTRL-V の後ろの空白は見やすくするためのものなので、實際には入力しないでください)

Note:
MS-Windows では CTRL-V はテキストのペーストに使はれてゐます。CTRL-V の代はりに CTRL-Q を使つてください。Unixでは逆に一部の端末で CTRL-Q に特別な意味があるので使へないかもしれません。

また、CTRL-V {digits} コマンドを使ふと、文字コードを 10 進數で指定して、その文字を入力できます。例へば、文字コード 127 は <Del> 文字 (<Del> キー と同じとは限りません) です。<Del> を插入するには次のやうに入力します:

CTRL-V 127

同じやりかたで文字コード 255 までの文字を入力できます。文字コードが 2 桁以下の場合は、數字以外の文字を入力してコマンドを確定してください。數字以外の文字を入力したくない場合は、數値が 3 桁になるやうに 1 つか 2 つの "0" を數値の前に付けてください。

次のコマンドはいづれも <Tab> と "." を插入します:

CTRL-V 9.
CTRL-V 09.
CTRL-V 009.

文字コードは 16 進數でも指定できます。その場合は CTRL-V の直後に "x" を指定します:

CTRL-V x7f

この場合もコード 255 (CTRL-V xff) までの文字が入力できます。"o" で 8 進數の數値を指定することもできます。他にも "u" と "U" でそれぞれ 16 ビットと 32 ビットの文字コード (例へば Unicode の文字) を指定できます:

CTRL-V o123
CTRL-V u1234
CTRL-V U12345678

ダイグラフ (Digraph)

例へば、コピーライト文字 (©) など、キーボードに無い文字がいくつかあります。そのやうな文字を Vim で入力するにはダイグラフを使ひます。つまり、2 文字で 1 文字を表現します。例へば、コピーライト文字 (©) を入力するには、次のやうにします:

CTRL-K Co

使用できるダイグラフの一覽を表示するには、次のコマンドを使ひます:

:digraphs

一部拔萃:

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 (ポンド) の略です。ほとんどのダイグラフには、生成される文字が聯想しやすい文字が割り當てられてゐます。法則は表を見ればだいたいわかると思ひます。

ダイグラフの 1 文字目と 2 文字目は逆の順番で入力しても構ひません。ただし、その組み合はせが他のダイグラフで使はれてゐない場合に限ります。すなはち、CTRL-K dP もポンド記號になります。"dP" といふ組み合はせが他に使はれてゐないので、"Pd" のダイグラフが使はれるのです。

Note:
ダイグラフはユーザーが使つてゐる (と Vim が認識してゐる) 文字セットに依存します。MS-DOS の文字セットと MS-Windows の文字セットは違ひます。":digraphs" を使つて、利用可能なダイグラフを確認してください。

自分でダイグラフを定義することもできます。例:

:digraph a" ä

CTRL-K a" を入力すると ä になります。文字コードを 10 進數で指定することもできます。次のコマンドは上記のコマンドと同じです:

:digraph a" 228

ダイグラフについての詳細は |digraphs| を參照してください。

他にも、キーマップを使つて特殊な文字を入力することもできます。詳しくは |45.5| 參照。

ノーマルモードコマンド

插入モードで使へるコマンドはそれほど多くありませんが、ノーマルモードにはたくさんのコマンドがあります。それらのコマンドを使ふには <Esc> で插入モードを拔けて、ノーマルモードコマンドを實行し、"i" または "a" で插入モードに戾つてこなければなりません。

もつと簡單な方法があります。CTRL-O {command} を使へばノーマルモードコマンドを插入モードの中で實行できます。例へば、次のコマンドでカーソル位置から行末まで削除できます:

CTRL-O D

この方法で實行できるのは 1 つのコマンドだけです。ただし、レジスタやカウントの指定はできます。もう少し複雜な例:

CTRL-O "g3dw

3 つの單語を削除してレジスタ g に格納します。


Next: , Previous: , Up: 目次   [Index]