1 *usr_20.txt* For Vim バージョン 7.2. Last change: 2006 Apr 24
3 VIM USER MANUAL - by Bram Moolenaar
8 Vim にはコマンド入力を簡単にするための一般的な機能が備わっています。コロン (:)
9 コマンドでは短縮入力、編集、履歴、文脈依存の補完機能が利用できます。
17 次章: |usr_21.txt| 中断と再開
18 前章: |usr_12.txt| 便利な小技
21 ==============================================================================
24 コロン (:) コマンドや検索コマンド (/ or ?) を使うとき、カーソルは画面の一番下
25 に表示されます。そこにコマンドや検索パターンを入力するわけです。その場所を「コ
28 コマンドラインの編集で最もわかりやすいのは <BS> でしょう。カーソルの直前の文字
29 を削除できます。他の位置にある文字を削除したい場合は、矢印キーでカーソルを動か
35 <Enter> を押す前になって、"col" が "cow" の入力ミスであることに気づきました。
36 これを修正するには、左矢印キー (<Left>) を 5 回押して "col" の直後にカーソルを
37 動かしてから、<BS> と "w" を入力します: >
41 修正したら、その場で <Enter> を押しましょう。コマンドを実行するためにカーソル
44 コマンドラインでのカーソル移動には次のキーがよく使われます:
48 <S-Left> or <C-Left> 1 単語左
49 <S-Right> or <C-Right> 1 単語右
54 <S-Left> (シフトキーを押したまま左矢印キーを押す) と <C-Left> (コント
55 ロールキーを押したまま左矢印キーを押す) が機能しないキーボードもありま
56 す。その他のシフトキーとコントロールキーの組み合せも同様に、機能しない
65 上述のとおり、<BS> でカーソルの直前の文字を削除できます。単語を削除するには
74 CTRL-U ですべてのテキストを削除できます。コマンドを最初から入力し直したいとき
81 <Insert> キーを押すと、挿入と上書きが切り替わります。次のテキストを使って説明
86 <S-Left> を 2 回押して (<S-Left> が機能しない場合は <Left> を 8 回押して)
87 "fine" の先頭にカーソルを動かします。<Insert> を押して上書きに切り替え、
92 おっと、スペースが消えてしまいました。ここで <BS> を押すと "t" が削除されてし
93 まいます (置換モードとは違いますね)。<Insert> を押して、上書きから挿入に切り替
102 : または / コマンドを入力した後で、そのコマンドの実行をキャンセルしたくなった
103 場合は、CTRL-C または <Esc> を押してください。
106 <Esc> キーはどこでも使える「脱出」キーですが、残念なことに、古き良き
107 Vi では、コマンドラインで <Esc> を押すと、コマンドが実行されてしまいま
108 す。これはおそらくバグなので、Vim では <Esc> でコマンドをキャンセルで
109 きるようになっています。ただし、'cpoptions' を設定して Vi 互換の動作に
110 変更することもできます。また、マップが適用されたときは (それが Vi 用に
111 書かれたものであってもなくても) <Esc> は Vi 互換の動作をします。CTRL-C
112 を使えば設定に関係なくキャンセルできます。
114 コマンドラインの先頭にカーソルがあるときに <BS> キーを押すとコマンドをキャンセ
115 ルできます。これは行頭にある ":" や "/" を削除するような感覚です。
117 ==============================================================================
120 とても長い名前の ":" コマンドがいくつかあります。":substitute" が ":s" と短縮
121 できることは既に説明しましたが、これはなにも特別なことではありません。すべての
124 コマンドはどこまで短縮できるでしょうか。アルファベットは 26 文字ですが、コマン
125 ドはそれよりたくさんあります。例えば、":set" の先頭は ":s" ですが、":s" では
126 ":set" を実行できません。":set" の短縮形は ":se" です。
127 二つのコマンドが同じ名前に短縮できたとしても、最短の名前を使えるのは一つのコマ
128 ンドだけです。その決定方法に明確なルールはないので、個別に覚えるしかありませ
129 ん。コマンドの最短の名前はヘルプファイルに記述されています。例: >
133 これは ":substitute" の短縮形が ":s" であることを示しています。それ以降の文字
134 は任意です。":su" でも ":sub" でも動作します。
136 ユーザーマニュアルではコマンドの長い名前と短い名前の両方が使われますが、読み難
137 い短縮形は使われません。例えば、":function" は ":fu" と短縮できますが、これだ
138 と大半の人が何の略なのか理解できないので ":fun" が使われます。(Vim に ":funny"
139 コマンドはありませんが、もしあれば、":fun" でも混乱を招きますよね)
141 Vim スクリプトを書くときはコマンドの長い名前を使うことをお勧めします。そうして
142 おけば、後で変更しようと思ったときに読むのが楽です。しかし、":w" (":write") や
143 ":r" (":read") のような頻繁に使われるコマンドなら短縮形を使っても構わないでしょ
145 特にややこしいのは ":end" です。これは ":endif" の短縮形ですが、":endwhile" や
146 ":endfunction" と誤解しやすいので、常に長い名前を使うようにしましょう。
152 ユーザーマニュアルではオプションの長い名前が使われますが、ほとんどのオプション
153 には短い名前があります。":" コマンドと違い、オプションの短い名前は一つしかあり
154 ません。例えば、'autoindent' の短い名前は 'ai' なので、次の二つのコマンドは同
160 オプションの長い名前と短い名前の一覧は |option-list| を参照してください。
162 ==============================================================================
165 コマンドライン補完はこれだけでも Vi から Vim に乗り換えるに値する程の機能です。
166 一度使ってしまったら、手放せなくなるでしょう。
168 次のようなファイルを含むディレクトリがあるとします:
174 bodyofthepaper.txt を開くには次のコマンドを使います: >
176 :edit bodyofthepaper.txt
178 いかにも打ち間違えそうです。もっと簡単にやりましょう: >
182 どちらも結果は同じになります。どういうことでしょうか。<Tab> キーによってカーソ
183 ル直前の単語 (この場合なら "b") が補完されたのです。ディレクトリが検索され、
184 "b" で始まるファイルが一つだけ見つかり、それはあなたが探しているファイルに違い
191 ビープ音が鳴り、次のように表示されます: >
195 ビープ音は複数のファイルが見つかったことを示しています。まずは (アルファベット
196 順で) 最初のファイルが表示されます。もう一度 <Tab> を押すと、次のようになりま
201 つまり、最初の <Tab> で、探しているファイルが出てこなかったら、もう一度 <Tab>
202 を押せばよいのです。ファイルがたくさんあるなら、一つずつ表示していきましょう。
203 最後の補完候補を表示しているときに <Tab> を押すと、最初の状態に戻ります: >
207 また最初から補完候補を表示できます。つまり、補完候補は循環表示されます。CTRL-P
210 <------------------- <Tab> -------------------------+
213 :edit i :edit info.txt :edit intro.txt
214 <-- CTRL-P <-- CTRL-P
216 +---------------------- CTRL-P ------------------------>
222 ":edit i" ではなく、":set i" と入力してから <Tab> を押すと、次のようになりま
227 どうして ":set info.txt" にならないのでしょうか。それは、Vim が文脈を認識して
228 いるからです。補完される単語の種類は入力されたコマンドに依存します。":set" コ
229 マンドに指定するのはファイル名ではなくオプション名であることを Vim は知ってい
231 上述の例と同様、<Tab> を入力すれば補完候補が一つずつ順番に表示されます。たいて
232 いは、いくつかの文字を入力してから補完した方が素早く補完できます: >
240 さて、"=" を入力してから <Tab> を押してみましょう: >
242 :set iskeyword=@,48-57,_,192-255
244 オプションの現在の設定が挿入されるので、それを編集することができます。
245 <Tab> で補完されるのはその場所に入力すべき内容です。どのように動作するかは自分
246 で試してみてください。期待したような結果にならないこともあると思いますが、それ
247 は、Vim がその文脈を認識できなかったか、その文脈における補完が実装されていない
248 かのどちらかです。その場合は <Tab> 文字が挿入されます (画面上では ^I と表示さ
255 補完候補がたくさんあるとき、その一覧を確認することができます。それには CTRL-D
256 を使います。例えば、次のコマンドを入力してから CTRL-D を押してみます: >
263 incsearch isfname isident iskeyword isprint
266 補完候補の一覧が表示され、また元の入力に戻ります。この一覧に期待した項目がある
267 かどうか確認してください。ない場合は、<BS> でテキストを削除し、入力し直してく
268 ださい。補完候補がたくさんある場合は、さらにいくつかの文字を入力してから <Tab>
270 注意深い方なら、候補一覧にある "incsearch" が "is" で始まっていないことに気づ
271 いたと思います。"is" は "incsearch" の短縮形です。ほとんどのオプションには短い
272 名前と長い名前がありますが、Vim は賢いので、 オプションの短い名前を見て、長い
279 CTRL-L コマンドを使うと、共通したところまで補完できます。例えば、"info.txt" と
280 "info_backup.txt" というファイルがあって、":edit i" と入力してから CTRL-L を押
281 すと、":edit info" になります。
283 'wildmode' オプションで補完の動作を変更できます。
284 'wildmenu' オプションを設定すると補完候補をメニューのように表示できます。
285 'suffixes' オプションに優先度の低いファイルを指定しておくと、それらのファイル
287 'wildignore' オプションには補完候補として表示して欲しくないファイルを指定しま
290 コマンドライン補完についての詳細は |cmdline-completion| を参照してください。
292 ==============================================================================
295 履歴については三章で簡単に説明しました。簡単に言えば、<Up> キーで以前に入力し
296 た古いコマンドラインを呼び出すことができる機能です。<Down> で新しい方のコマン
299 履歴には四種類あります。ここでは ":" コマンドと検索コマンド ("/" or "?") の履
300 歴を説明します。"/" と "?" はどちらも検索コマンドなので、同じ履歴を共有します。
301 他には、式入力と input() 関数の履歴があります。|cmdline-history|
303 例えば、":set" コマンドを実行した後で、他のコマンドを 10 個実行し、再び ":set"
304 コマンドを実行したいとします。":" を押してから <Up> を 10 回押せばできますが、
309 以前使った "se" で始まるコマンドに戻ります。これなら探していた ":set" コマンド
310 に効率良くたどり着けるでしょう。少なくとも、何度も何度も <Up> を押す必要はあり
311 ません (入力したすべてのコマンドが ":set" コマンドでもない限り)。
313 <Up> キーを押すと、入力されたテキストと履歴のコマンドラインが比較され、マッチ
315 探していた履歴が見つからなかった場合は、<Down> で元に戻ってから正しく入力し直
316 すか、CTRL-U を押して最初からやり直してください。
318 履歴をすべて見るには次のコマンドを使います: >
322 ":" コマンドの履歴が表示されます。検索コマンドの履歴を表示するには、次のコマン
327 <Up> の代わりに CTRL-P を使うこともできますが、CTRL-P の前に入力されていたテキ
328 ストは無視されます。同様に、<Down> の代わりに CTRL-N を使うこともできます。
329 CTRL-P は previous (前)、CTRL-N は next (次) という意味です。
331 ==============================================================================
334 コマンドラインでの文字入力は挿入モードでの文字入力とは違います。テキストを編集
335 するための多くのコマンドが使えません。通常のコマンドライン入力ではそれほど問題
336 になりませんが、複雑なコマンドを入力しなければならないときもあるでしょう。その
337 ようなときは、コマンドラインウィンドウが便利です。
339 次のコマンドでコマンドラインウィンドウを開いてください: >
343 画面の下の方に (小さな) ウィンドウが作成されます。ウィンドウにはコマンドライン
344 履歴が表示され、最終行には空行があります:
346 +-------------------------------------+
349 |file.txt=============================|
352 |:set path=.,/usr/include,, |
353 |:set iskeyword=@,48-57,_,192-255 |
357 |command-line=========================|
359 +-------------------------------------+
361 ウィンドウを開いた後はノーマルモードになっています。"hjkl" キーで移動できます。
362 例えば、"5k" を入力し、":e config.h.in" の行に移動します。"$h" で "in" の "i"
363 に移動し "cwout" と入力します。行が次のように変更されました:
367 <Enter> を押すとこのコマンドが実行され、コマンドラインウィンドウが閉じます。
368 <Enter> コマンドで現在行が実行されます。挿入モードでもノーマルモードでも同じ動
370 コマンドラインウィンドウでの編集は失われます。つまり、コマンドライン履歴は変更
371 されません。ただし、実行したコマンドは、通常どおり、履歴に追加されます。
373 コマンドラインウィンドウは、実行したいコマンドに似たコマンドを履歴の一覧から探
374 し、それをちょっと変更して再実行するような場合に便利です。コマンドラインウィン
376 上の例の場合なら、"?config" という検索コマンドを実行すれば、以前に実行した
377 "config" を含んでいるコマンドを探せます。これは少し不思議ですね。コマンドライ
378 ンを使ってコマンドラインウィンドウの中を検索しているのですから。しかし、検索コ
379 マンドを入力するための新たなコマンドラインウィンドウを作成することはできませ
380 ん。コマンドラインウィンドウは常に一つだけです。
382 ==============================================================================
384 次章: |usr_21.txt| 中断と再開
386 Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl: