vim-jp / vimdoc-ja / usr_20

usr_20 - Vimドキュメント

メインヘルプファイルに戻る
usr_20.txt    For Vim バージョン 8.2.  Last change: 2006 Apr 24

                     VIM USER MANUAL - by Bram Moolenaar

                        コマンドラインを素早く入力する


Vim にはコマンド入力を簡単にするための一般的な機能が備わっています。コロン (:)
コマンドでは短縮入力、編集、履歴、文脈依存の補完機能が利用できます。

20.1  コマンドライン編集
20.2  コマンドライン短縮入力
20.3  コマンドライン補完
20.4  コマンドライン履歴
20.5  コマンドラインウィンドウ

次章: usr_21.txt  中断と再開
前章: usr_12.txt  便利な小技
目次: usr_toc.txt

==============================================================================
20.1  コマンドライン編集

コロン (:) コマンドや検索コマンド (/ or ?) を使うとき、カーソルは画面の一番下
に表示されます。そこにコマンドや検索パターンを入力するわけです。その場所を「コ
マンドライン」と呼びます。

コマンドラインの編集で最もわかりやすいのは <BS> でしょう。カーソルの直前の文字
を削除できます。他の位置にある文字を削除したい場合は、矢印キーでカーソルを動か
してから <BS> を押してください。
例えば、次のように入力して:

        :s/col/pig/

<Enter> を押す前になって、"col" が "cow" の入力ミスであることに気づきました。
これを修正するには、左矢印キー (<Left>) を 5 回押して "col" の直後にカーソルを
動かしてから、<BS> と "w" を入力します:

        :s/cow/pig/

修正したら、その場で <Enter> を押しましょう。コマンドを実行するためにカーソル
を行末まで動かす必要はありません。

コマンドラインでのカーソル移動には次のキーがよく使われます:

        <Left>                  1 文字左
        <Right>                 1 文字右
        <S-Left> or <C-Left>    1 単語左
        <S-Right> or <C-Right>  1 単語右
        CTRL-B or <Home>        行頭
        CTRL-E or <End>         行末

        Note:
        <S-Left> (シフトキーを押したまま左矢印キーを押す) と <C-Left> (コント
        ロールキーを押したまま左矢印キーを押す) が機能しないキーボードもありま
        す。その他のシフトキーとコントロールキーの組み合せも同様に、機能しない
        ことがあります。

カーソルはマウスでも動かせます。


削除
-----

上述のとおり、<BS> でカーソルの直前の文字を削除できます。単語を削除するには
CTRL-W を使います。

        /the fine pig

                     CTRL-W

        /the fine

CTRL-U ですべてのテキストを削除できます。コマンドを最初から入力し直したいとき
に使ってください。


上書き
------

<Insert> キーを押すと、挿入と上書きが切り替わります。次のテキストを使って説明
します:

        /the fine pig

<S-Left> を 2 回押して (<S-Left> が機能しない場合は <Left> を 8 回押して)
"fine" の先頭にカーソルを動かします。<Insert> を押して上書きに切り替え、
"great" と入力します:

        /the greatpig

おっと、スペースが消えてしまいました。ここで <BS> を押すと "t" が削除されてし
まいます (置換モードとは違いますね)。<Insert> を押して、上書きから挿入に切り替
え、スペースを入力します:

        /the great pig


キャンセル
----------

: または / コマンドを入力した後で、そのコマンドの実行をキャンセルしたくなった
場合は、CTRL-C または <Esc> を押してください。

        Note:
        <Esc> キーはどこでも使える「脱出」キーですが、残念なことに、古き良き
        Vi では、コマンドラインで <Esc> を押すと、コマンドが実行されてしまいま
        す。これはおそらくバグなので、Vim では <Esc> でコマンドをキャンセルで
        きるようになっています。ただし、'cpoptions' を設定して Vi 互換の動作に
        変更することもできます。また、マップが適用されたときは (それが Vi 用に
        書かれたものであってもなくても) <Esc> は Vi 互換の動作をします。CTRL-C
        を使えば設定に関係なくキャンセルできます。

コマンドラインの先頭にカーソルがあるときに <BS> キーを押すとコマンドをキャンセ
ルできます。これは行頭にある ":" や "/" を削除するような感覚です。

==============================================================================
20.2  コマンドライン短縮入力

とても長い名前の ":" コマンドがいくつかあります。":substitute" が ":s" と短縮
できることは既に説明しましたが、これは何も特別なことではありません。すべての
":" コマンドが短縮できます。

コマンドはどこまで短縮できるでしょうか。アルファベットは 26 文字ですが、コマン
ドはそれよりたくさんあります。例えば、":set" の先頭は ":s" ですが、":s" では
":set" を実行できません。":set" の短縮形は ":se" です。
二つのコマンドが同じ名前に短縮できたとしても、最短の名前を使えるのは一つのコマ
ンドだけです。その決定方法に明確なルールはないので、個別に覚えるしかありませ
ん。コマンドの最短の名前はヘルプファイルに記述されています。例:

        :s[ubstitute]

これは ":substitute" の短縮形が ":s" であることを示しています。それ以降の文字
は任意です。":su" でも ":sub" でも動作します。

ユーザーマニュアルではコマンドの長い名前と短い名前の両方が使われますが、読み難
い短縮形は使われません。例えば、":function" は ":fu" と短縮できますが、これだ
と大半の人が何の略なのか理解できないので ":fun" が使われます。(Vim に ":funny"
コマンドはありませんが、もしあれば、":fun" でも混乱を招きますよね。)

Vim script を書くときはコマンドの長い名前を使うことをお勧めします。そうしてお
けば、後で変更しようと思ったときに読むのが楽です。しかし、":w" (":write")
や ":r" (":read") のような頻繁に使われるコマンドなら短縮形を使っても構わないで
しょう。
特にややこしいのは ":end" で、これは ":endif"、":endwhile" あるいは
":endfunction" を表しているのかもしれません。そのため、常に長い名前を使うよう
にしましょう。


オプションの短い名前
--------------------

ユーザーマニュアルではオプションの長い名前が使われますが、ほとんどのオプション
には短い名前があります。":" コマンドと違い、オプションの短い名前は一つしかあり
ません。例えば、'autoindent' の短い名前は 'ai' なので、次の二つのコマンドは同
じ動作をします:

        :set autoindent
        :set ai

オプションの長い名前と短い名前の一覧は option-list を参照してください。

==============================================================================
20.3  コマンドライン補完

コマンドライン補完はこれだけでも Vi から Vim に乗り換えるに値する程の機能です。
一度使ってしまったら、手放せなくなるでしょう。

次のようなファイルを含むディレクトリがあるとします:

        info.txt
        intro.txt
        bodyofthepaper.txt

bodyofthepaper.txt を開くには次のコマンドを使います:

        :edit bodyofthepaper.txt

いかにも打ち間違えそうです。もっと簡単にやりましょう:

        :edit b<Tab>

どちらも結果は同じになります。どういうことでしょうか。<Tab> キーによってカーソ
ル直前の単語 (この場合なら "b") が補完されたのです。ディレクトリが検索され、
"b" で始まるファイルが一つだけ見つかり、それはあなたが探しているファイルに違い
ないので、その名前が補完されました。

さて、次はこのように入力してみます:

        :edit i<Tab>

ビープ音が鳴り、次のように表示されます:

        :edit info.txt

ビープ音は複数のファイルが見つかったことを示しています。まずは (アルファベット
順で) 最初のファイルが表示されます。もう一度 <Tab> を押すと、次のようになりま
す:

        :edit intro.txt

つまり、最初の <Tab> で、探しているファイルが出てこなかったら、もう一度 <Tab>
を押せばよいのです。ファイルがたくさんあるなら、一つずつ表示していきましょう。
最後の補完候補を表示しているときに <Tab> を押すと、最初の状態に戻ります:

        :edit i

また最初から補完候補を表示できます。つまり、補完候補は循環表示されます。CTRL-P
を使うと、逆方向に移動できます:

              <------------------- <Tab> -------------------------+
                                                                  |
                  <Tab> -->                    <Tab> -->
        :edit i               :edit info.txt               :edit intro.txt
                  <-- CTRL-P                   <-- CTRL-P
           |
           +---------------------- CTRL-P ------------------------>


文脈
-----

":edit i" ではなく、":set i" と入力してから <Tab> を押すと、次のようになりま
す:

        :set icon

どうして ":set info.txt" にならないのでしょうか。それは、Vim が文脈を認識して
いるからです。補完される単語の種類は入力されたコマンドに依存します。":set" コ
マンドに指定するのはファイル名ではなくオプション名であることを Vim は知ってい
るのです。
上述の例と同様、<Tab> を入力すれば補完候補が一つずつ順番に表示されます。たいて
いは、いくつかの文字を入力してから補完した方が素早く補完できます:

        :set isk<Tab>

次のような結果になります:

        :set iskeyword

さて、"=" を入力してから <Tab> を押してみましょう:

        :set iskeyword=@,48-57,_,192-255

オプションの現在の設定が挿入されるので、それを編集することができます。
<Tab> で補完されるのはその場所に入力すべき内容です。どのように動作するかは自分
で試してみてください。期待したような結果にならないこともあると思いますが、それ
は、Vim がその文脈を認識できなかったか、その文脈における補完が実装されていない
かのどちらかです。その場合は <Tab> 文字が挿入されます (画面上では ^I と表示さ
れます)。


補完候補一覧
------------

補完候補がたくさんあるとき、その一覧を確認することができます。それには CTRL-D
を使います。例えば、次のコマンドを入力してから CTRL-D を押してみます:

        :set is

次のような結果になります:

        :set is
        incsearch  isfname    isident    iskeyword  isprint
        :set is

補完候補の一覧が表示され、また元の入力に戻ります。この一覧に期待した項目がある
かどうか確認してください。ない場合は、<BS> でテキストを削除し、入力し直してく
ださい。補完候補がたくさんある場合は、さらにいくつかの文字を入力してから <Tab>
を押して補完してください。
注意深い方なら、候補一覧にある "incsearch" が "is" で始まっていないことに気づ
いたと思います。"is" は "incsearch" の短縮形です。ほとんどのオプションには短い
名前と長い名前がありますが、Vim は賢いので、オプションの短い名前を見て、長い名
前に展開してくれます。


さらに他にも
------------

CTRL-L コマンドを使うと、共通したところまで補完できます。例えば、"info.txt" と
"info_backup.txt" というファイルがあって、":edit i" と入力してから CTRL-L を押
すと、":edit info" になります。

'wildmode' オプションで補完の動作を変更できます。
'wildmenu' オプションを設定すると補完候補をメニューのように表示できます。
'suffixes' オプションに優先度の低いファイルを指定しておくと、それらのファイル
は補完候補の末尾に現れます。
'wildignore' オプションには補完候補として表示して欲しくないファイルを指定しま
す。

コマンドライン補完についての詳細は cmdline-completion を参照してください。

==============================================================================
20.4  コマンドライン履歴

履歴については三章で簡単に説明しました。簡単に言えば、<Up> キーで以前に入力し
た古いコマンドラインを呼び出すことができる機能です。<Down> で新しい方のコマン
ドに戻れます。

履歴には四種類あります。ここでは ":" コマンドと検索コマンド ("/" or "?") の履
歴を説明します。"/" と "?" はどちらも検索コマンドなので、同じ履歴を共有します。
他には、式入力と input() 関数の履歴があります。cmdline-history

例えば、":set" コマンドを実行した後で、他のコマンドを 10 個実行し、再び ":set"
コマンドを実行したいとします。":" を押してから <Up> を 10 回押せばできますが、
もっと簡単な方法があります:

        :se<Up>

以前使った "se" で始まるコマンドに戻ります。これなら探していた ":set" コマンド
に効率良くたどり着けるでしょう。少なくとも、何度も何度も <Up> を押す必要はあり
ません (入力したすべてのコマンドが ":set" コマンドでもない限り)。

<Up> キーを押すと、入力されたテキストと履歴のコマンドラインが比較され、マッチ
した履歴だけが使われます。
探していた履歴が見つからなかった場合は、<Down> で元に戻ってから正しく入力し直
すか、CTRL-U を押して最初からやり直してください。

履歴をすべて見るには次のコマンドを使います:

        :history

":" コマンドの履歴が表示されます。検索コマンドの履歴を表示するには、次のコマン
ドを使います:

        :history /

<Up> の代わりに CTRL-P を使うこともできますが、CTRL-P の前に入力されていたテキ
ストは無視されます。同様に、<Down> の代わりに CTRL-N を使うこともできます。
CTRL-P は previous (前)、CTRL-N は next (次) という意味です。

==============================================================================
20.5  コマンドラインウィンドウ

コマンドラインでの文字入力は挿入モードでの文字入力とは違います。テキストを編集
するための多くのコマンドが使えません。通常のコマンドライン入力ではそれほど問題
になりませんが、複雑なコマンドを入力しなければならないときもあるでしょう。その
ようなときは、コマンドラインウィンドウが便利です。

次のコマンドでコマンドラインウィンドウを開いてください:

        q:

画面の下の方に (小さな) ウィンドウが作成されます。ウィンドウにはコマンドライン
履歴が表示され、最終行には空行があります:

        +-------------------------------------+
        |other window                         |
        |~                                    |
        |file.txt=============================|
        |:e c                                 |
        |:e config.h.in                       |
        |:set path=.,/usr/include,,           |
        |:set iskeyword=@,48-57,_,192-255     |
        |:set is                              |
        |:q                                   |
        |:                                    |
        |command-line=========================|
        |                                     |
        +-------------------------------------+

ウィンドウを開いた後はノーマルモードになっています。"hjkl" キーで移動できます。
例えば、"5k" を入力し、":e config.h.in" の行に移動します。"$h" で "in" の "i"
に移動し "cwout" と入力します。行が次のように変更されました:

        :e config.h.out

<Enter> を押すとこのコマンドが実行され、コマンドラインウィンドウが閉じます。
<Enter> コマンドで現在行が実行されます。挿入モードでもノーマルモードでも同じ動
作です。
コマンドラインウィンドウでの編集は失われます。つまり、コマンドライン履歴は変更
されません。ただし、実行したコマンドは、通常どおり、履歴に追加されます。

コマンドラインウィンドウは、実行したいコマンドに似たコマンドを履歴の一覧から探
し、それをちょっと変更して再実行するような場合に便利です。コマンドラインウィン
ドウでは検索コマンドも使えます。
上の例の場合なら、"?config" という検索コマンドを実行すれば、以前に実行した
"config" を含んでいるコマンドを探せます。これは少し不思議ですね。コマンドライ
ンを使ってコマンドラインウィンドウの中を検索しているのですから。しかし、検索コ
マンドを入力するための新たなコマンドラインウィンドウを作成することはできませ
ん。コマンドラインウィンドウは常に一つだけです。

==============================================================================

次章: usr_21.txt  中断と再開

Copyright: see manual-copyright  vim:tw=78:ts=8:noet:ft=help:norl:
関連キーワード:  コマンド, usr, 入力, 補完, CTRL, 名前, 履歴, Tab, Vim, 表示