*cmdline.txt* For Vim バージョン 8.1. Last change: 2019 Sep 27 VIMリファレンスマニュアル by Bram Moolenaar
コマンドラインモード
コマンドラインモードは Ex コマンド (":")、檢索パターン ("/" と "?")、フィルタコマンド ("!") の入力に使はれる。
コマンドライン編輯の基本は、ユーザーマニュアルの第 20 章で說明されてゐる |usr_20.txt|。
1. コマンドラインの編輯 | |cmdline-editing| |
2. コマンドラインの補完 | |cmdline-completion| |
3. Ex コマンドライン | |cmdline-lines| |
4. Ex コマンドラインの範圍 | |cmdline-ranges| |
5. Ex コマンドラインのフラグ | |ex-flags| |
6. Ex コマンド用の特別な文字 | |cmdline-special| |
7. コマンドラインウィンドウ | |cmdline-window| |
通常、文字はカーソル位置の前に插入される。コマンドラインでは左右のカーソルキーで移動ができる。<Insert>
キーで插入と上書を切り替へることができる。
Note:
キーボードに有效なカーソルキーまたは他の特殊なキーが一切ないときでも、コマンド ":cnoremap" を使つて他のキーをそれらに割り當てられることに注意。例へば、tcsh 風の編輯キーを定義する方法は以下の通り。:cnoremap <C-A> <Home> :cnoremap <C-F> <Right> :cnoremap <C-B> <Left> :cnoremap <Esc>b <S-Left> :cnoremap <Esc>f <S-Right>(<> 記法を使つてゐる |<>|.これらを全て文字通り打ち込むこと)
コマンドラインが長くなりすぎて畫面に收まらなくなつたときは、畫面に入るだけの部分が表示される。カーソルはこの見える部分しか動けない。そのため、これ以上は編輯できない。
ユーザーの打ち込んだコマンドは、履歷表に記錄される。これらの履歷は上下矢印キーで呼び出せる。實際には 4 つの履歷表がある。
履歷表:
これらは全く別のものである。それぞれの履歷は同種の入力をしたときだけ使用できる。オプション ’history’ で保存されるコマンド數を設定できる (既定値: 50)。
Note:
- 以前と全く同じコマンドを打ち込んだときは、古い方の記錄が消される (繰り返されたコマンドが古いコマンドの履歷を追ひ出して消すのを避けるため)。
- 打ち込んだコマンドだけが記錄される。完全にマッピングから實行されたコマンドは履歷に殘らない。
- 全ての檢索パターンは、コマンド "*" や "#" 等によるものも含め、檢索用の履歷に記錄される。しかしマッピングからの檢索に對しては、最後の檢索のみが記錄される (長いマッピングが履歷の內容を捨ててしまふのを避けるため)。
{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}
コマンドラインには名前の自動補完機能がある。|cmdline-completion| を參照。
次に打ち込まれた非數字文字を、その通りに插入する。また最大 3 個の數字により、1 バイト文字をコードの 10 進表現に基づいて入力できる。打ち込んだ非數字文字と 3 個の數字にはマッピングは適用されない。これは插入モードと同じ働きをする (|i_CTRL-V| を參照)。
Note:
Windows では CTRL-V はテキストの貼り付けにマッピングされてゐることが多い。そのときは代はりに CTRL-Q を使ふこと。
CTRL-V と同樣だが、ターミナルによつては表示制禦に使はれてゐる。その場合は使へない。
カーソルを左へ
カーソルを右へ
カーソルを 1 WORD 分左へ
カーソルを 1 WORD 分右へ
カーソルをコマンドライン先頭へ
カーソルをコマンドライン末尾へ
カーソルをマウスでクリックした所へ移動する
クリップボード (X11 ではプライマリ選擇)の內容を貼り付ける。これは CTRL-R * を使つた動作に似てゐるが、行閒に CR は插入されない。
カーソル前の文字を削除する (<BS>
キーが思ひ通り働かないときは |:fixdel| を參照)。
カーソル下の文字を削除する (行の最後では: カーソル前の文字) (<Del>
キーが思ひ通り働かないときは |:fixdel| を參照。)
カーソルの前の |word| を削除。これは ’iskeyword’ オプションに依存する。
行頭とカーソル位置の閒の全ての文字を削除する。Vim の以前のバージョンでは行內の文字を全て削除してゐた。その動作の方がよいなら、次の行をファイル .vimrc に加へること。
:cnoremap <C-U> <C-E><C-U>
插入/上書の切り替へ
ダイグラフの入力 (|digraphs| を參照)。{char1} が特殊キーのときは、そのキーコードは <> 形式で插入される。
番號/名前付きレジスタの內容を插入する。CTRL-R を打ち込んで次の文字を打ち込むまでの閒、レジスタ名の入力待ちであることを示すため ’"’ が表示される。
テキストは打ち込まれた通りに插入され、マッピングや短縮入力は無效である。’wildchar’ によるコマンドライン補完も行はれない。またコマンドラインを終了する文字 (<Esc>, <CR>, <NL>, <C-C>) も文字通り插入される。
<BS>
や CTRL-W はコマンドラインを終了できるが、コマンドラインに殘つてゐる文字が違ふモードで解釋されることなるので、意圖とは異なる動作になるかもしれない。
特殊なレジスタ:
’"’ | 無名レジスタ、最後の削除やコピーによるテキストを格納する。 |
’%’ | カレントファイル名 |
’#’ | 代替ファイル名 |
’*’ | クリップボードの內容 (X11: プライマリ選擇) |
’+’ | クリップボードの內容 |
’/’ | 最後の檢索パターン |
’:’ | 最後のコマンドラインの內容 |
’-’ | 最後の小規模な (1 行未滿の) 削除の內容 |
’.’ | 最後に插入されたテキスト |
’=’ | Expression レジスタ: 式を入力するやう要求される (|expression| を參照) (Expression プロンプトでは機能しない。バッファ變更やカレントウィンドウ變更などは副作用を避けるため許可されてゐない)
結果がリスト |List| である場合、各要素が 1 行として插入される。行の中に改行文字が含まれてゐてもよい。結果が浮動小數點數である場合、自動的に文字列に變換される。 |
レジスタに關しては |registers| を參照。
實裝上の詳細: |expression| レジスタを使つてゐるときに setcmdpos() を呼ぶと結果文字列を插入する前の位置をセットする。插入後の位置をセットするには CTRL-R CTRL-R を使ふこと。
カーソル下にオブジェクトを插入する。
CTRL-F | カーソル下のファイル名 |
CTRL-P | |gf| と同樣に ’path’ を使つて展開された、カーソル下のファイル名 |
CTRL-W | カーソル下の word |
CTRL-A | カーソル下の WORD; |WORD| を參照 |
CTRL-L | カーソル下の line |
’incsearch’ がセットされてるとき、現在表示されてゐるマッチの末尾のカーソル位置が使はれる。CTRL-W では word の一部がすでに入力されてゐるとき、その部分がもう一度入力されることはない。
{譯注: word といふ單語のrの上にカーソルを置き、:wo<C-r><C-w>
としてみると、’incsearch’ の値によつて結果が違ふことがわかる}
CTRL-F と CTRL-P: {Vim が |+file_in_path| 機能付きでコンパイルされたときのみ有效}
カーソル下にレジスタの內容またはオブジェクトを插入。|c_CTRL-R| と同樣の動作だが、テキストを文字通り插入する。例へば、レジスタ "a の內容が "xy^Hz" (ここで ^H はバックスペース) のとき、"CTRL-R a" は "xz" を插入するのに對し、"CTRL-R CTRL-R a" は"xy^Hz" を插入する。
コマンドラインを {expr} を評價した結果で置き換へる。式を入力し <Enter>
を押せば完了する。マッピングする時に使ふと便利である。|expression| も參照のこと。
式の評價を插入するには |c_CTRL-R_=| を使ふ。便利な函數に |getcmdtype()| と |getcmdline()| と |getcmdpos()| がある。 カーソルが行末になければカーソル位置は變更されない。カーソルが行末にあるときのコマンドライン變更後のカーソル位置は行末である。|setcmdpos()| を使ふとカーソル位置を變更できる。|sandbox| を使ふと不要な副作用を避けて式を評價することができる。
例:
:cmap <F7> <C-\>eAppendSome()<CR> :func AppendSome() :let cmd = getcmdline() . " Some()" :" place the cursor on the ) :call setcmdpos(strlen(cmd)) :return cmd :endfunc
これは再歸的には機能しない。つまり、すでに式を編輯してゐるときは動作しない。ただしマップの中では再歸的に使へる。
モードレスセレクションでテキストを選擇中のとき、テキストをクリップボードにコピーする。|modeless-selection| 選擇中でないときは、CTRL-Y は文字として插入される。
入力されたコマンドの實行
打ち込まれたときにオプション ’cpoptions’ にフラグ ’x’ が含まれてゐなければ、コマンドを實行せずにコマンドラインモードを終了する。マクロ內で使はれたとき、または ’cpoptions’ に ’x’ が含まれてゐるときは、コマンドラインを實行する。
Note:
お使ひのキーボードで<Esc>
が押しづらい場合は、CTRL-[ を使ふよう練習してください。
コマンドを實行せずにコマンドラインモードを終了する。
古いコマンドラインの內容のうち、先頭部分が現在のコマンドラインとマッチするものを履歷から呼び出す (下を參照)。
{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}
さらに最近のコマンドラインの內容のうち、先頭部分が現在のコマンドラインとマッチするものを履歷から呼び出す (下を參照)。{譯注: 變な譯ですが、<Up>
で行き過ぎたら <Down>
で戾るといふことです}
{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}
履歷から古いコマンドラインの內容を呼び出す。
{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}
履歷からさらに最近のコマンドラインの內容を呼び出す。
{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}
コマンドライン補完 (|cmdline-completion|を參照)
オプション ’wildchar’ で指定したキーコマンドライン補完 (|cmdline-completion| を參照)
コマンドライン補完 (|cmdline-completion| を參照)
コマンドライン補完 (|cmdline-completion| を參照)
コマンドライン補完 (|cmdline-completion| を參照)
コマンドライン補完 (|cmdline-completion| を參照)
コマンドライン、檢索や短縮入力等にヘブライ語テキストの項目が必要とされるときに便利である。Vim が |+rightleft| 機能付きでコンパイルされ、’allowrevins’ がオンのときのみ有效。
|rileft.txt| を參照。
ペルシア語モードでは、文字は普段とは反對の方向に插入される。コマンドライン、檢索や短縮入力等にペルシア語テキストの項目が必要とされるときに便利である。Vim が |+farsi| 機能付きでコンパイルされたときのみ有效。
|farsi.txt| を參照。
言語マッピング |:lmap| を切り替へたり、Input Method (IM) を切り替へる。
檢索コマンドのためにパターンを入力するとき、オプション ’imsearch’ が -1 でなければ VAL は ’imsearch’ の値に、さうでなければ VAL は ’iminsert’ の値になる。
言語マッピングが定義されてゐるとき:
言語マッピングが全く定義されてゐないとき:
普通、言語マッピングは、キーボードが生成するのと違ふ文字を打ち込むのに使はれる。オプション ’keymap’ を使へばまとめて設定できる。
コマンドラインに入つたときは、コマンドを打ち込むはずなので、言語マッピングはオフに切り替へられる。CTRL-^ でオンにした後も、次にコマンドや檢索パターンを打ち込むときにはその狀態は使はれない。
文字を插入することなく短縮入力を展開する。
コマンドラインを Emacs スタイルで編輯する方法については |emacs-keys| を參照。
キー <Up>
と <Down>
は現在のコマンドラインを檢索文字列として扱ふ。次/以前のコマンドラインの先頭部分が、この文字列と比較される。マッチした最初の行が新しいコマンドラインとなる。
これら 2 つのキーを繰り返し入力すると、同じ文字列が檢索に使はれる。例へば、以前の置換コマンドを見つけるためにはかうする: ":s" の後 <Up>
を打ち込むこと。同じことは、<S-Up> を望んだ行が出るまで數回打ち込むことでもできる。
Note:
シフトキーと矢印キーとの同時押しは、全ての端末で機能するわけではないことに注意
最近入力されたコマンドの履歷を表示する。
{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}
{name} の種類の履歷內容を一覽表示する。{name} に入るものは:
c[md] または : | コマンドラインの履歷 |
s[earch] または / または ? | 檢索文字列の履歷 |
[xpr] または = | Expression レジスタの履歷 |
i[nput] または | 入力行の履歷 |
d[ebug] または > | デバッグコマンドの履歷 |
a[ll] | 上記のもの全て |
{first} や {last} が指定されたときは、履歷中の指定された範圍の項目が表示される。これらの數字は次の形式で指定する。
正數は、":history
" の一覽表示で最初の列に表示される、項目の絕對的な番號を表す。この數字は、他の項目が削除されても固定されたままである。
負數は項目の相對的な位置を示す。これは最も新しい項目 (番號 -1 を持つ) から後ろ向きに數へたものである。
例:
檢索履歷の項目 6 から 12 までを一覽表示する。
:history / 6,12
全履歷の最後から 2 番目を一覽表示する。
:history all -2
全履歷の最近の 2 項目を一覽表示する。
:history all -2,
檢索履歷に何も加へずに、{command} を實行する。
コマンドラインの編輯をしてゐるとき、いくつかのコマンドを使つてカーソル前の單語を補完できる。補完は以下のものに對して有效である。
:tag
" の後でのみ使はれる。
:!cmd
", ":r !cmd
", ":w !cmd
" の後で使はれる。$PATH
が考慮される。
:set
" の後でのみ使はれる。
:map
" や類似コマンドの後でのみ使はれる。
:if
", ":call
" や類似コマンドの後でのみ使はれる。
マッチするヘルプ項目の個數には上限があります (現在のところは 300)。非常に多くのマッチがあつたとき、遲くなるのを避けるためです。
補完に使へるコマンドは以下の通りです:
カーソルより前のパターンに一致する名前を一覽表示する。ファイル名を表示してゐるときには、ディレクトリは强調表示される (オプション ’highlight’ を參照)。オプション ’suffixes’ の値がマッチした名前は、末尾の方に移動される。
’wildoptions’ を "tagfile" にセットすると、マッチするタグを含むファイル名をリストすることができる。
カーソルより前のパターンに對してマッチの檢索が行はれる。マッチ (いくつかあるなら、最初のもの) が、そのパターンの位置に插入される。
Note:
これはマクロの中では機能しない。なぜなら <Tab> と <Esc> は大抵 ’wildchar’ として使はれ、またいくつかのマクロの中ではこれらが特別な意味を持つからである
このキーを再び入力すると、複數のマッチがあるときは、次のマッチが插入される。最後のマッチの後には、最初のマッチが再び使はれる (繰り返し)。この動作は、オプション ’wildmode’ で變更できる。
’wildchar’ や <Tab>
と同樣だが、最後のマッチで初めて前のマッチに進んでいく。<S-Tab> はあらゆるところで使へない。
’wildchar’ を使つたら複數のマッチがあつたとき、その後に使ふと次のマッチが插入される。それ以外のときには、より最近使つたコマンドラインを履歷から呼び出す。
’wildchar’ を使つたら複數のマッチがあつたとき、その後に使ふと前のマッチが插入される。それ以外のときには、より昔に使つたコマンドラインを履歷から呼び出す。
カーソルより前のパターンに一致する、全ての名前が插入される。
カーソルより前のパターンに對してマッチの檢索が行はれる。マッチが 1 個のときは、それがパターンの位置に插入される。複數個のマッチがあつたときは、最も長い共通部分がパターンの位置に插入される。その結果がパターンより短い場合には、補完は行はれない。 ’incsearch’ がセットされてゐると、"/" や "?" で檢索パターンを入力するとき現在のマッチが表示され、CTRL-L を押すと現在のマッチの末尾から1文字追加する。’ignorecase’ と ’smartcase’ がセットされてゐてコマンドラインに大文字が含まれてゐないときは、追加された文字は小文字に變換される。
’incsearch’ が設定され "/" や "?" にパターンを入力して現在のマッチが表示されてゐる時に、CTRL-G を押すと次のマッチに移動する (|search-offset| は考慮しない)。CTRL-T を押すと前のマッチに移動する。Hint: 通常のキーボードでは、T
は G
より上にある。
’incsearch’ が設定され "/" や "?" にパターンを入力して現在のマッチが表示されてゐる時に、CTRL-T は前のマッチに移動する (|search-offset| は考慮しない)。CTRL-G を使ふと次のマッチに移動する。Hint: 通常のキーボードは、T
は G
より上にある。
オプション ’wildchar’ の既定値は <Tab> である (Vi 互換モードの場合は CTRL-E である。以前のバージョンでは <Esc> が使はれてゐた)。パターンがファイル名に對して適用されるときは標準のワイルドカード ’*’ と ’?’ が使用できる。’*’ はあらゆる文字列に一致し、’?’ はちやうど 1文字に一致する。
’wildchar’ や CTRL-Nを繰り返すと、マッチしたものを循環し、やがて入力したものに戾つてくる。もしも最初のマッチが望んでゐるものでなければ、入力したものに直ぐに戾るために <S-Tab> や CTRL-P を使ふことができる。
オプション ’wildignorecase’ を設定するとファイル名の大文字と小文字を區別しないやうにできる。
オプション ’wildmenu’ を設定するとコマンドラインのすぐ上にマッチしたものを表示する。
tcsh の autolist 補完が好みなら、このマッピングが使へる。
:cnoremap X <C-L><C-D>
(ここで X は使ひたいコマンドキー。<C-L> は CTRL-L, <C-D> は CTRL-D のこと)
これは最長のマッチを見つけ、マッチしたファイルを全て一覽表示する。
tcsh の autolist 補完が好みなら、オプション ’wildmode’ を使つてその動作をエミュレートできる。例へば、次の設定は autolist=ambiguous といふ設定を眞似る。
:set wildmode=longest,list
これは、最初の ’wildchar’ で最長のマッチを見つけ、次はマッチするファイルを全て一覽表示する。
ファイル名補完では、オプション ’suffixes’ を使ひ、ほぼ同じ名前のファイル名に優先度を設定できる。複數のマッチがあつたとき、あるファイルの擴張子が ’suffixes’ の値に含まれてゐると、そのファイルは無視される。既定値は ".bak,~,.o,.h,.info,.swp" であり、これは ".bak", "~", ".o", ".h", ".info", ".swp" で終はるファイルが無視されることがあるといふことである。
空の項目(つまり2つの連續するコンマ)は "." を含まないファイル名(つまり擴張子を持たない)にマッチする。これは "prog" を無視させ、かつ "prog.c" にマッチさせたいときに便利である。
例:
パターン: | 存在するファイル: | マッチ: |
test* | test.c test.h test.o | test.c |
test* | test.h test.o | test.h and test.o |
test* | test.i test.h test.c | test.i and test.c |
2 つのドットを持つ擴張子を無視することはできない。
(オプション ’suffixes’ による除外が行はれた後で) マッチするファイルが複數個あるときは、最初のファイル名が插入される。’wildchar’ のキーを 2 度打ち込んでも補完されたマッチが同じだつたら、マッチが 1 つしかないことが分かる。他のマッチは、’wildchar’ のキーまたは CTRL-N, CTRL-P を入力することで得られる。それには ’suffixes’ に設定された擴張子にマッチするものも含め、全てのファイルが含まれる。
ある擴張子のファイルを完全に無視するにはオプション ’wildignore’ を使ふこと。
入力されたテキストで終はるファイルにのみマッチさせるには、"$" をつけること。例として、".c" で終はるファイルにのみマッチさせるには:
:e *.c$
これは ".cpp" で終はるファイルにはマッチしない。"$" をつけないとマッチする。
オプションの、以前に設定された値は、’=’ の後で ’wildchar’ のキーを打ち込むことで得られる。例へば、":set dir=
" の後で ’wildchar’ のキーを打ち込むと、’dir’ の現在の値が插入される。この動作は、ファイル名を取るオプションに對するファイル名補完より優先する。
xterm で <S-Tab> を CTRL-P として使ひたいときは、このコマンドをユーザーの .cshrc に加へること。
xmodmap -e "keysym Tab = Tab Find"
そして次を .vimrc に加へること。
cmap <Esc>[1~ <C-P>
Ex コマンドはいくつかの特徵を持つてゐる。
行の最初に ’"’ があると、その行全てが無視される。’"’ がコマンドの後にあると、その行の殘りの部分が無視される。これはコメントを加へるために使はれる。例:
:set ai "set 'autoindent' option
シェルコマンド ":!cmd
" や ":map
" コマンド、そして ’"’ をその引數の一部として認識するやうな、他のいくつかのコマンド (式を豫想するやうな大部分のコマンド) にはコメントを付けることができない:
:argdo | |
:autocmd | |
:bufdo | |
:cexpr (and the like) | |
:cdo (and the like) | |
:command | |
:cscope (and the like) | |
:debug | |
:display | |
:echo (and the like) | |
:elseif | |
:execute | |
:folddoopen | |
:folddoclosed | |
:for | |
:grep (and the like) | |
:help (and the like) | |
:if | |
:let | |
:make | |
:map (and the like including :abbrev commands) | |
:menu (and the like) | |
:mkspell | |
:normal | |
:ownsyntax | |
:popup | |
:promptfind (and the like) | |
:registers | |
:return | |
:sort | |
:syntax | |
:tabdo | |
:tearoff | |
:vimgrep (and the like) | |
:while | |
:windo |
’|’ を使つてコマンドを區切ることができる。これにより一行に複數のコマンドを書き込める。引數に ’|’ を使ひたいときは、’\’ を前に置くこと。
以下のコマンドは ’|’ を引數として認識するため、後に他のコマンドを續けることはできない。
:argdo | |
:autocmd | |
:bufdo | |
:cdo | |
:cfdo | |
:command | |
:cscope | |
:debug | |
:folddoopen | |
:folddoclosed | |
:function | |
:global | |
:help | |
:helpfind | |
:lcscope | |
:ldo | |
:lfdo | |
:make | |
:normal | |
:perl | |
:perldo | |
:promptfind | |
:promptrepl | |
:pyfile | |
:python | |
:registers | |
:read ! | |
:scscope | |
:sign | |
:tcl | |
:tcldo | |
:tclfile | |
:vglobal | |
:windo | |
:write ! | |
:[range]! |
引數 "-bar" なしで定義されたユーザーコマンド |:command|
Note:
(Vi から繼承されたのだが) 次の點は混亂を招きやすいので注意: ’|’ は ":g" と共に使ふとコマンドの引數に含まれるが、":s" ではコマンドの區切りになる。
どうしても他のコマンドを使ひたいときは、コマンド ":execute
" を使ふこと。例 (バッファに外部コマンド "ls" の出力を追加し、最初の行にジャンプする):
:execute 'r !ls' | '[
例外が 1 點ある: オプション ’cpoptions’ にフラグ ’b’ が含まれるときは、":map
", ":abbr
" またはその類似コマンドの引數に ’|’ を使ふとき、’\’ の代はりに CTRL-V を使ふ必要がある。代はりに "<Bar>" を使ふこともできる。|map_bar| も參照。
例:
:!ls | wc | 2 つのコマンドの出力を見る |
:r !ls | wc | その出力をテキストに插入する |
:%g/foo/p|> | 一致した全ての行を shiftwidth 1 個分ずらす |
:%s/foo/bar/|> | 1 つの行を shiftwidth 1 個分ずらす |
:map q 10^V| | "q" に "10|" をマッピングする |
:map q 10\| map \ l | "q" に "10\" を、"\" に "l" をマッピングする (’b’ が ’cpoptions’ に含まれるとき) |
<NL> を使つて、’|’ と同樣にコマンドを區切ることができる。<NL> を插入するには CTRL-V CTRL-J を使ふこと。すると "^@" が表示される。’|’ を使ふ方が好ましいが、外部コマンドに對しては、’|’ が外部コマンドに含まれてしまふため、<NL> を使はなければならない。<NL> の特別な作用を避けるためには、前に ’\’ を置く必要がある。例:
:r !date<NL>-join
これは現在の日時をファイルに讀み込み、それを前の行につなげる。
Note:
’|’ の前のコマンドがエラーを起こしたときは、以降のコマンドは實行されないことに注意。
Vi との互換性のために、以下の奇妙なコマンドがサポートされてゐる。
:| | 現在行を表示する (":p" と同樣) |
:3| | 3 行目を表示する (":3p" と同樣) |
:3 | 3 行目に移動する |
範圍とコマンド名の閒にコロンを入れることができる。このコロンは無視される (これは Vi 互換の動作である)。例:
:1,$:s/パターン/文字列
ファイル名が入るべき場所に、文字 ’%’ または ’#’ が使はれてゐるときは、それらはカレントファイル名、代替ファイル名に展開される ("ファイルの編輯" の章を參照 |:_%| |:_#|)。
Amiga では、引數がファイル名1個になるはずのとき、空白を含むファイル名が使用できる。ファイル名末尾の空白は、’\’ や CTRL-V でエスケープされてゐない限り無視される。
Note:
コマンド ":next
" では、ファイル名の區切りに空白を使ふことに注意。ファイル名に空白を含むには、エスケープすること。例::next foo\ bar goes\ to school\かうすると3個のファイル "foo bar", "goes to", "school " の編輯を開始する。
コマンドで特別な文字 ’"’, ’|’ を使ひたいとき、あるいはファイル名に ’%’, ’#’ を使ひたいときは、’\’ を前に置く。範圍指定やコマンド ":substitute
" では ’\’ は必要ない。|`=| も參照のこと。
Ex コマンドの後に文字 ’!’ (bang) を置くと、コマンドの動作方法が變はる。’!’ はコマンドの直後に置かなければならず、閒に空白を入れてはならない。空白を插入すると、’!’ はコマンドの引數と見なされ、違つた意味を持つことになる。例:
:w! name | 現在のバッファをファイル "name" に保存し、ファイルがすでに存在してゐると上書きする |
:w !name | 現在のバッファを、標準入力からの入力としてコマンド "name" に送る |
Ex コマンドには、その前に行單位の範圍を指定できるものがある。これは [range] と表記される。それは ’,’ か ’;’ で區切られた、1個以上の行指定子から成る。
基本事項はユーザーマニュアルの |10.3| 章で說明されてゐる。
區切りに ’;’ を使ふと、次の行指定子を解釋する前にカーソル位置がその行に移動する。’,’ ではかうならない。例:
4,/この行/
4 行目から、カーソルより後の、"この行" がマッチする行まで。
5;/あの行/
5 行目から、5 行目より後の、"あの行" がマッチする行まで。
ほとんどのコマンドでは、範圍の既定値はカーソルのある行である。しかしコマンド ":write", ":global" での既定値はファイル全體 (1,$) である。
コマンドに必要以上の行指定子が指定されたときは、先頭の方に指定されたものから順に除外される。
行番號は以下の方法で指定できる:
{number} | 絕對的な行番號 |
. | 現在の行 |
$ | ファイルの最終行 |
% | 1,$と同じ (ファイル全體) |
’t | マーク tの位置 (小文字) |
’T | マーク Tの位置 (大文字); マーク位置が別ファイルにあるときには範圍指定には使へない |
/{pattern}[/] | 次に {pattern} のマッチする行 (下向き) |
?{pattern}[?] | 次に {pattern} のマッチする行 (上向き) |
\/ | 次に直前の檢索パターンのマッチする行 (下向き) |
\? | 次に直前の檢索パターンのマッチする行 (上向き) |
\& | 次に直前の置換元パターンのマッチする行 (下向き) |
これらの後に ’+’ または ’-’ と數値を付けてもよい (複數も可)。この數は直前の行番號に加算または減算される。數が省略された場合は 1 が指定されたと見なされる。
{pattern} の後の "/" と "?" は、パターンとその後の項目とを區別するために必要となる。
"/" と "?" は別の場所指定の後に付くことがある。すると檢索はそこから始まる。’;’ との違ひは、カーソルが移動しない點である。例:
/pat1//pat2/ | "pat1" を含む行より後の、"pat2" を含む行を見つける。このときカーソルは移動しない。 |
7;/pat2/ | 7行目より後の、"pat2" を含む行を見つける。このときカーソルは 7 行目に留まる。 |
{number} は 0 からファイルの行數までの數でなければならない。0 (零) を使ふと、コマンドの大半では 1 と解釋される。その數をカウントとして使ふコマンド (|:tag|, |:pop| 等) では確かに 0 として使はれる。0 を「先頭行の前」として解釋するコマンドもある (|:read|, 檢索パターン等)。
例:
.+3 | カーソルの 3 行下 |
/that/+1 | 次行より下の、"that" を含む行 |
.,$ | 現在行からファイル末尾まで |
0;/that | "that" を含む最初の行 (第 1 行にもマッチ可能) |
1;/that | 第 1 行より下の、"that" を含む行 |
いくつかのコマンドには、後にカウントを指定できる。そのコマンドは、最後の行指定子で指定された行 (既定値はカーソルの行) から始まる、そのカウントの行數の範圍に使はれる。カウントを取ることができるのは、範圍指定は取るがファイル名の引數を取らないコマンドである (ファイル名は數字でもよいから)。
例:
:s/x/X/g 5 | 現在行から始まる5行で ’x’ を ’X’ に置換 |
:23d 4 | 第23, 24, 25, 26行を削除 |
折り疊みがアクティブなときは、閉ぢられた折り疊み全體を含むやうに範圍が切り上げ/切り下げられる。|fold-behavior| を參照。
範圍には小さい行番號を先に指定しなければならない。さうでないときは、Vim はその行番號を入れ替へてよいかを尋ねる。
Backwards range given, OK to swap
ただしグローバルコマンド ":g" では尋ねない。
コマンドの前に ":silent
" をつけるとこの質問が出ないやうになる。そのときは常に範圍が入れ替へられる。
":" を入力する前にカウントを指定すると、次のやうに變換される。
:.,.+(count - 1)
つまりカーソルの行から始まる [count] 行のことである。例: 3 行を削除するにはかうする。
3:d<CR> は .,.+2d<CR> に變換される
ビジュアルに選擇された行を範圍として、コマンドライン入力を始める。この範圍指定にはコード ‘:’<,’>‘ が使はれるので、コマンドライン履歷から同樣のコマンド行を呼び出して、別のビジュアル選擇行にコマンドを繰り返すことができる。
ビジュアルモードがすでに終了してゐるときは、‘:*‘ を使ふことで簡單にビジュアル選擇を範圍指定できる。ただし "*" が ’cpo’ オプションに含まれてゐるときは使へない (|cpo-star| 參照)。そのときは ‘:’<,’>‘ を使ふ必要がある。
以下のフラグがExコマンドの選擇においてサポートされてゐる。これらはコマンドを實行した後にカーソルが移動する位置の行を表示する:
l | |:list| のやうに表示する |
# | 行番號をつける |
p | |:print| のやうに表示する |
これらのフラグは組み合はせることができる。つまり "l#" とすると行番號をつけて |:list| のスタイルで表示する。
Note:
以下はコマンドラインの實行における特別な文字である。CTRL-R コマンドを使ふとこれらの特別な文字列を插入することができる。例へば "%" は現在のファイル名を表す。CTRL-R %とするとその場に現在のファイル名を插入する。|c_CTRL-R| を參照。
Note:
Vim script 內で特別な文字をエスケープするには |fnameescape()| を使ふとよいかもしれない。|`=| も參照のこと。
Ex コマンドの、ファイル名が使へるところでは、以下の文字は特別な意味を持つ。これらは式や函數 |expand()| 內でも使ふことができる。
% | カレントファイル名に置き換へられる。 |
# | 代替ファイル名に置き換へられる。これはウィンドウごとに記憶される。 |
#n | (ここで n は數) バッファ n のファイル名に置き換へられる。"#0" は "#" と同じ。 |
## | 引數リスト內の全てのファイル名を、空白で區切つて列擧したものに置き換へられる。ファイル名の中の空白には、全て前に ’\’ が付けられる。 |
#<n | (n は > 0 の數値)。n 番目の old file 名に置き換へられる。この番號については |:oldfiles| や |v:oldfiles| を參照。 |
Note:
"#<n" 以外は、ユーザーに打ち込まれた通りのファイル名を與へることに注意 {譯注: 普通、カレントディレクトリのファイルは、パスを付けずにファイル名のみを打ち込んで編輯を始めるはずだが、その形でファイル名が呼び出される}。絕對パスが必要なとき (違ふディレクトリのファイル名を使ふとき) は、":p" を付け加へる必要がある。|filename-modifiers| を參照。
"#<n" は絕對パスを返す。ただしホームディレクトリ以下のファイルに對しては "~/" で始まる。
Note:
コマンドが適切に解釋できるやうに、スペースの前にはバックスラッシュがつく。しかしシェルコマンドに對してはこれは行はれない。シェルコマンドに對しては、引用符を使ふとよいかもしれない(しかしこれは引用符とワイルドカードを含む文字列に對しては失敗する)::!ls "%" :r !spell "%"
’%’ と ’#’ の特別な意味を避けるためには、その前に ’\’ を插入する。詳細: これらの文字の特別な意味は、’\’ がその前に置かれれば、それがいくつあるかにかかはらず、常にエスケープ (無效化) される。
打ち込むキー: | 結果 |
---|---|
# | 代替ファイル名 |
\# | # |
\\# | \# |
|`=| も參照のこと。
Note:
これらは文字通りに打ち込まれる、これらは特別なキーではない!
カーソル下の word に置き換へられる (|star| と同樣)
カーソル下の WORD に置き換へられる (|WORD| を參照)
カーソル下の word に置き換へられるが、C 言語の式を構成するためにより多くを含む。例へばカーソルが "ptr->arg" の "arg" 上にある時、結果は "ptr->arg" となる。カーソルが "list[idx]" の "]" 上にある時、結果は "list[idx]" となる。これは |v:beval_text| のために使はれる。
カーソル下のパス名に置き換へられる (|gf| が使ふものと同樣)
自動コマンドの實行時、操作されてゐるバッファの名前か、ファイルの讀み書き用のファイル名に置き換へられる
自動コマンドの實行時、カレントバッファの番號に置き換へられる (":r file" と ":so file" のときにもカレントバッファの番號に置き換へられる。讀み込まれてゐるファイルはバッファ內にない)
自動コマンドの實行時、この自動コマンドが實行されたときのマッチに置き換へられる。そのファイル名がマッチの檢索に使はれてゐないときのみ、<afile> と違ふ値になる (イベント FileType, Syntax, SpellFileMissing 用)。
コマンド ":source
" の實行時、取り込まれたファイルのファイル名に置き換へられる。
函數の實行時はこのやうに置き換へられる:
"function {函數名}[{行番號}]"
函數呼び出しのネスト (入れ子狀態) はこのやうに表される:
"function {函數名1}[{行番號}]..{函數名2}[{行番號}]"
Note:
函數內で <sfile> が使はれてゐる場合、ファイル名修飾子は無效になることに注意。
コマンド ":source
" の實行時、行番號に置き換へられる。函數の中では、函數の先頭からの相對的な行番號になる。
スクリプトを實行してゐる時に行番號と置き換へられる。 これはどのやうな狀況にあつても、スクリプトの行番號で置き換へられた <sflnum> 內の <slnum> からのものとは異る。
ファイル名修飾子は "%", "#", "#n", "<cfile>", "<sfile>", "<afile>", "<abuf>" の後で使ふことができる。これらは函數 |fnamemodify()| と使ふこともできる。Vim が |+modify_fname| 機能付きでコンパイルされてゐなければ、これらの修飾子を使ふことはできない。
これらの修飾子は次の順で指定できる。
ファイル名を完全パスにする。最初の修飾子でなければならない。また "~/" (およびUnixやVMSで使はれる "~user/" の形式のもの) もホームディレクトリのパスに變換する。
これが付けられたものがディレクトリ名に展開されるならば、パスの區切り文字が末尾に追加される。
これが付けられたものが、ディスク上に存在せず絕對パスを持たないファイルに展開されるときは、結果は豫期できない。MS-Windows では 8.3 形式のファイル名はロングファイル名に展開される。
パスを短い 8.3 形式に變換する (現在のところ MS-Windows 版でのみ)。パスの內、實際に存在する部分に對して機能する。
ファイル名をホームディレクトリについて相對的な名前に (可能ならば) 切り詰める。ファイルがホームディレクトリの下になければ、ファイル名は修正されない。
ファイル名をカレントディレクトリについて相對的な名前に (可能ならば) 切り詰める。ファイル名がカレントディレクトリの下になければファイル名は修正されないが、もしもカレントドライブであるなら、MS-Windows 上ではドライブが削除される。最も短く切り詰めるには ":~:." を使ふ。
ファイル名のヘッド (末尾の部分と全ての區切りが除かれたもの)。:e, :r, :t には使へない。繰り返すと、末尾から順に複數の部分を取り除くことができる。
ファイル名がパス區切りで終はるときは、パス區切りのみが取り除かれる。そのためディレクトリ名に ":p:h" を使ふと、(末尾にパス區切りなしの) ディレクトリ名そのものが得られる。
ファイル名が絕對パス (Unix では "/"; MS-DOS, WIN32, OS/2 では "x:\"; Amiga では "drive:" で始まるもの) のときは、この部分は取り除かれない。
ヘッドがないときは (パスがカレントディレクトリに對して相對的なとき)、結果は空となる。
ファイル名のテイル (名前の末尾の部分)。:r または :e よりも前に指定しなければならない。
ファイル名のルート (最後の擴張子が取り除かれたもの)。擴張子だけしかないときは (’.’ で始まるファイル名、例へば ".vimrc" 等)、それは取り除かれない。繰り返し使ふと、複數の擴張子を (最後のものから順に) 取り除くことができる。
ファイル名の擴張子。單獨で使はれたときのみ意味を持つ。擴張子がないときは、結果は空となる。
擴張子だけしかないときは (’.’ で始まるファイル名)、結果は空となる。繰り返すと、複數の擴張子が得られる。繰り返した回數より擴張子の數の方が少ないときは、可能なだけ取り込まれる (しかし最低でも 1 個はないと取り込まれない)。
最初に "pat" に一致したものを "sub" に置き換へる。これはコマンド |:s| と同樣に機能する。"pat" は正規表現である。’?’ には任意の文字を使へるが、"pat" や "sub" 內に現れてはならない。
この後、上述の修飾子を再び使ふことができる。例へば、":p" では置換した後でフルパスに變へる。
"pat" に一致したものを全て "sub" に置き換へる。その他の點では ":s" と同樣に機能する。
シェルコマンドで利用できるやうに特別な文字をエスケープする。(|shellescape()| を參照)。最後でなければならない。例:
:!dir <cfile>:S :call system('chmod +w -- ' . expand('%:S'))
ファイル名が "src/version.c"、カレントディレクトリが "/home/mool/vim" のときの例:
:p /home/mool/vim/src/version.c :p:. src/version.c :p:~ ~/vim/src/version.c :h src :p:h /home/mool/vim/src :p:h:h /home/mool/vim :t version.c :p:t version.c :r src/version :p:r /home/mool/vim/src/version :t:r version :e c :s?version?main? src/main.c :s?version?main?:p /home/mool/vim/src/main.c :p:gs?/?\\? \home\mool\vim\src\version.c
ファイル名が "src/version.c.gz" のときの例:
:p /home/mool/vim/src/version.c.gz :e gz :e:e c.gz :e:e:e c.gz :e:e:r c :r src/version.c :r:e c :r:r src/version :r:r:r src/version
"%", "#", "#n" または "CTRL-V p" に "<" を付け加へたとき、ファイル名の擴張子 (ファイル名の最後の ’.’ とそれ以降の全て) は取り除かれる。これは Vim version 3.0 との下位互換性のために殘されてをり、":r" 形式を使ふ方がよい。例:
% | カレントファイル名 |
%< | 擴張子なしのカレントファイル名 |
# | カレントウィンドウでの代替ファイル名 |
#< | 同上、ただし擴張子なし |
#31 | 代替ファイル番號 31 |
#31< | 同上、ただし擴張子なし |
<cword> | カーソル下の word |
<cWORD> | カーソル下の WORD (|WORD| を參照) |
<cfile> | カーソル下のパス名 |
<cfile>< | 同上、ただし擴張子なし |
Note:
ファイル名が來る筈の所では、ワイルドカードの展開が行はれる。Unix では展開にはシェルが使はれる。ただし Vim 內部でできない展開だけである (スピードのため)。|restricted-mode| でなければ、バッククォート ’‘’ も次のやうに使へる。:n `echo *.c`しかし展開は、’%’ や ’#’ 等が展開される前にワイルドカードが存在したときにのみ行はれる。これはファイル名に含まれるワイルドカードを展開しないためである。<cfile> の結果を展開したいときは、ワイルドカードの文字を追加すればよい。例: (代替ファイル名は "?readme?" とする)
コマンド 展開結果 :e # :e ?readme? :e ‘ls #‘ :e {"?readme?" にマッチしたファイル全て} :e #.* :e {"?readme?.*" にマッチしたファイル全て} :cd <cfile> :cd {カーソル下のファイル名} :cd <cfile>* :cd {カーソル下のファイル名に "*" を加へ展開したもの} |`=| も參照のこと。
展開された後のコマンド引數に "!" に含まれてゐて、それがシェルコマンドに使はれる (":!cmd", ":r !cmd" や ":w !cmd") とき、"!" は ’\’ でエスケープされ、前囘のコマンドに展開されるのを防ぐ。オプション ’shell’ の値が "sh" を含むときは、エスケープは 2 回行はれ、シェルが "!" を展開するのを防ぐ。
’\’ をディレクトリの區切りに使ふファイルシステム (MS-DOS, Windows, OS/2) では、次のキャラクタの特別な意味をエスケープする目的の ’\’ を認識するのが少し困難である。一般的な規則は次の通り。’\’ が普通のファイル名の文字の後にある場合は、特別な意味を持たない。したがつて、"\file\foo" は有效なファイル名であり、’\’ を 2 度打つ必要はない。
例外は ’$’ 記號である。これはファイル名で有效な文字である。しかし "$home" のやうなファイル名が環境變數として解釋されるのを避けるため、’\’ をこの前に付ける必要がある。從つてルートディレクトリのファイル "$home" の指定には、"/\$home" を使ふ必要がある。いくつかの例:
ファイル名 | その解釋 |
---|---|
$home | 環境變數 $home の値に展開される |
\$home | カレントディレクトリのファイル "$home" |
/\$home | ルートディレクトリのファイル "$home" |
\\$home | "\\" の後に $home の値を付け加へた名前のファイル |
|`=| も參照のこと。
コマンドラインウィンドウでは、普通のウィンドウでテキストを編輯するのと同じやうにコマンドラインを編輯できる。コマンドラインウィンドウは特殊なウィンドウで、普通の方法でそこから出ることはできない。
{Vim が |+cmdline_hist| 機能付きでコンパイルされたときのみ有效}
コマンドラインウィンドウを開くには 2 通りの方法がある。
Note:
打ち込んだキーの記錄中にはこの方法は使へないことに注意 (そのときは "q" では記錄が終了する)。
コマンドラインウィンドウが開かれたとき、中にはコマンドラインの履歷が竝んでゐる。末尾の行には、その時點までに打ち込まれたコマンドが含まれる。左の列には、編輯されてゐるコマンドラインの種類を表す1文字が表示される。|cmdwin-char| を參照。
コマンドラインウィンドウが開かれたとき、Vim はノーマルモードに移るが、オプション ’insertmode’ がオンのときは插入モードに移る。
コマンドラインウィンドウの高さはオプション ’cmdwinheight’ で指定できる (ただし餘裕がないとこれより低くなる)。常に幅は最大になり、場所はコマンドラインの直上である。
コマンドラインウィンドウ內では、コマンドを使つてあちこちへ移動したり、ウィンドウ內のテキストを編輯できる。ノーマルモードと插入モードが使へる。
":" や "/" を始めとする、コマンドラインを使ふコマンドも使へるが、そこから別のコマンドラインウィンドウを開くことはできない。コマンドラインウィンドウはネスト(入れ子狀になること) できない。 コマンドラインウィンドウは普通のウィンドウではないので、別のウィンドウに移動したり、別のバッファを編輯したりはできない。コマンドラインウィンドウでは、それらを行ふコマンドは無效化されてゐる。もちろんコマンドラインウィンドウで入力したコマンドならどんなものでも 實 行 可 能 である。他のテキスト編輯はコマンドラインウィンドウを閉ぢるときに破毀される。
コマンドラインウィンドウを終了するには、以下の通りの方法がある。
<CR> | カーソル下のコマンドラインを實行する。插入モードと Normal モードの兩方で有效である。 |
CTRL-C | コマンドラインモードとして繼續する。カーソル下のコマンドラインが引き繼がれる。插入モードとノーマルモードの兩方で有效である。再描畫は行はれないので、ウィンドウは可視狀態のままになる。 |
:quit | コマンドラインを破毀してノーマルモードに戾る。":close", ":exit", ":xit" や CTRL-\ CTRL-N も有效である。 |
:qall | Vim を終了する (他のバッファに變更がない限り)。 |
:qall! | Vim を終了し、どのバッファの變更も破毀する。 |
コマンドラインウィンドウが閉ぢられると、他のウィンドウのサイズは復元される。實行されたコマンドはコマンドラインウィンドウの開始元のウィンドウやバッファに適用される。これはコマンドラインウィンドウがなかつたかのやうに動作するが、畫面の再描畫だけは餘計に行はれる。
コマンドラインウィンドウに使はれたバッファは削除される。<CR> で實行された行以外に對する變更は、全て失はれる。
カーソル下のコマンドを實行した後、もう一度コマンドラインウィンドウを開きたければ、このマップを使ふとよいかもしれない:
:autocmd CmdwinEnter * map <buffer> <F5> <CR>q:
’filetype’ | "vim" (Ex コマンドラインの編輯時に) これは、可能なら Vim script に對する構文强調表示を開始する |
’rightleft’ | オフ |
’modifiable’ | オン |
’buftype’ | "nofile" |
’swapfile’ | オフ |
コマンドラインウィンドウの內容をファイルに書き出すことができる。かうすれば、簡單にコマンドライン履歷を保存し、後で讀み込むことができる。
オプション ’wildchar’ が <Tab> であり、コマンドラインウィンドウが Ex コマンドに對して使はれてゐるときは、以下の 2 個のマッピングが追加され、コマンドラインウィンドウ內でも <Tab>
で補完ができるやうになる。
:imap <buffer> <Tab> <C-X><C-V> :nmap <buffer> <Tab> a<C-X><C-V>
Note:
ノーマルモードで<Tab>
を打ち込むと、カーソルの次の文字の位置で補完を行ふことに注意。この方法なら行末でも補完が行はれる。それらのマッピングを望まないなら、次のやうにして無效化すること。au CmdwinEnter [:>] iunmap <Tab> au CmdwinEnter [:>] nunmap <Tab>ユーザーの .vimrc ファイルに上の行を書き込んでおけばよい。
コマンドラインウィンドウ內では、マウスでカーソルを別のウィンドウに移したり、別のウィンドウのステータスラインをドラッグしたりはできない。コマンドラインウィンドウ自身のステータスラインはドラッグできる。上向きにずつとドラッグすると、直上のウィンドウのステータスラインも動き、コマンドラインウィンドウがさらに廣くなる。
|getcmdwintype()| 函數は開いてゐるコマンドラインの種類を返す。値の說明は |cmdwin-char| 參照。
2 種類の 自動コマンドのイベントが使はれる: |CmdwinEnter| と |CmdwinLeave|。コマンドラインウィンドウに對して特別に設定をするには、イベント Cmdwin を使ふ。副作用を引き起こさないよう注意!
例:
:au CmdwinEnter : let b:cpt_save = &cpt | set cpt=. :au CmdwinLeave : let &cpt = b:cpt_save
これはカレントウィンドウで |i_CTRL-N| によつて補完を行ふよう ’complete’ を設定する。
別の例:
:au CmdwinEnter [/?] startinsert
かうすれば、コマンドラインウィンドウでは Vim は插入モードに移る。
パターンに使はれる文字は、コマンドラインの種類を表す。
: | 普通の Ex コマンド |
> | デバッグモードのコマンド |debug-mode| |
/ | 前方檢索に使はれる文字列 |
? | 後方檢索に使はれる文字列 |
= | Expression レジスタ "= 用の expression |expr-register| |
函數 |input()| に對して入力する文字列 | |
- | コマンド |:insert| や |:append| に對して入力する文字列 |