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


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

*usr_20.txt*	For Vim バージョン 8.1.  Last change: 2006 Apr 24

		     VIM USER MANUAL - by Bram Moolenaar

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

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

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

コマンドライン編輯

コロン (:) コマンドや檢索コマンド (/ 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> キーを押すとコマンドをキャンセルできます。これは行頭にある "‘:’" や "‘/’" を削除するやうな感覺です。

コマンドライン短縮入力

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

コマンドはどこまで短縮できるでせうか。アルファベットは 26 文字ですが、コマンドはそれよりたくさんあります。例へば、":set" の先頭は ":s" ですが、":s" では ":set" を實行できません。":set" の短縮形は ":se" です。

2 つのコマンドが同じ名前に短縮できたとしても、最短の名前を使へるのは 1 つのコマンドだけです。その決定方法に明確なルールはないので、個別に覺えるしかありません。コマンドの最短の名前はヘルプファイルに記述されてゐます。例:

:s[ubstitute]

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

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

Vim script を書くときはコマンドの長い名前を使ふことをお勸めします。さうしておけば、後で變更しようと思つたときに讀むのが樂です。しかし、":w" (":write") や ":r" (":read") のやうな頻繁に使はれるコマンドなら短縮形を使つても構はないでせう。

特にややこしいのは ":end" で、これは ":endif"、":endwhile" あるいは ":endfunction" を表してゐるのかもしれません。そのため、常に長い名前を使ふやうにしませう。

オプションの短い名前

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

:set autoindent
:set ai

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

コマンドライン補完

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

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

info.txt
intro.txt
bodyofthepaper.txt

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

:edit bodyofthepaper.txt

いかにも打ち閒違へさうです。もつと簡單にやりませう:

:edit b<Tab>

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

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

:edit i<Tab>

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

:edit info.txt

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

:edit intro.txt

つまり、最初の <Tab> で、探してゐるファイルが出てこなかつたら、もう一度 <Tab> を押せばよいのです。ファイルがたくさんあるなら、1 つずつ表示していきませう。

最後の補完候補を表示してゐるときに <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> を入力すれば補完候補が 1 つずつ順番に表示されます。たいていは、いくつかの文字を入力してから補完した方が素早く補完できます:

: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| を參照してください。

コマンドライン履歷

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

履歷には 4 種類あります。ここでは ":" コマンドと檢索コマンド ("/" 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 (次) といふ意味です。

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

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

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

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" を含んでゐるコマンドを探せます。これは少し不思議ですね。コマンドラインを使つてコマンドラインウィンドウの中を檢索してゐるのですから。しかし、檢索コマンドを入力するための新たなコマンドラインウィンドウを作成することはできません。コマンドラインウィンドウは常に 1 つだけです。


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