*visual.txt* For
Vim バージョン 7.3. Last change: 2010 Feb 17
VIMリファレンスマニュアル by Bram Moolenaar
ビジュアルモード
*Visual* *Visual-mode* *visual-mode*
ビジュアルモードは利用者にとってテキストの部分を選択する柔軟で簡単な方法であ
る。矩形範囲のテキスト(ブロック)を選択する唯一の方法でもある。
ユーザーマニュアルの
|04.4|で簡単に説明されている。
1. ビジュアルモードを使う
|visual-use|
2. ビジュアルモードの開始と終了
|visual-start|
3. ビジュアル領域の変更
|visual-change|
4. ビジュアル領域での操作
|visual-operators|
5. 矩形範囲の操作
|blockwise-operators|
6. 繰り返し
|visual-repeat|
7. 使用例
|visual-examples|
8. 選択モード
|Select-mode|
{Vi にはビジュアルモードは無く、"visual"という名前はExモードとは区別するため
に、ノーマルモードを指して使われている}
{コンパイル時に
|+visual|が無効にされていると使えません}
==============================================================================
1. ビジュアルモードを使う
*visual-use*
ビジュアルモードを使うには3つの部分から構成される:
1. 選択したいテキストの開始位置を"v"、"V"または
CTRL-Vでマークする。
カーソルの下の文字が開始位置として使用される。
2. 選択したいテキストの終了位置に移動する。
ビジュアルモードの開始位置からカーソルの下の文字を含むテキストが強調され
る。
3. 操作キー(オペレータ)を押す。
強調された文字が操作対象になる。
ビジュアルモードでの強調表示の仕方を設定するのに、
'highlight'オプションを使用
することができる。
文字のない場所を選択するには
'virtualedit'を設定する。
強調されたテキストにはカーソルの下の文字も含まれる。
けれども、
'selection'オプションが"exclusive"に設定されていて、カーソルが
Visualエリアの後にあるとき、カーソルの下の文字は含まれない。
"v"では開始位置より前と、終了位置より後のテキストは強調されない。しかし全ての
大文字とアルファベット以外のキーによる操作は、"~"と"U"を除いて、表示に関係なく
行単位で働く。下記の操作一覧を参照。
*visual-block*
CTRL-V(矩形ビジュアルモード)は開始位置からカーソルの位置まで、テキストを矩形に
強調する。しかし、幾つかの操作(下記のリストを参照)はそれとは関係無く行単位で適
用される。「変更」と「置き換え」の操作は強調されたテキストを削除し、選択範囲の
左上より挿入を開始する。
==============================================================================
2. ビジュアルモードの開始と終了
*visual-start*
*v* *characterwise-visual*
v 文字単位のビジュアルモードを開始する。
*V* *linewise-visual*
V 行単位のビジュアルモードを開始する。
*CTRL-V* *blockwise-visual*
CTRL-V 矩形ビジュアルモードを開始する。
Note: ウィンドウズでは
CTRL-Vはテキストの貼り付けにマップされることがあり、そ
の際にはビジュアルモードを開始できない。
|CTRL-V-alternative|を参照。
ビジュアルモードの最中に
<Esc>を使用したり、マウスの右ボタンをクリックしたり、
または他のバッファに移動するコマンドを使用した場合には、強調は停止しテキストに
は何の操作も行なわれない。文字単位のビジュアルモード中に"v"を叩いた時や、矩形
ビジュアルモード時の"
CTRL-V"、行単位のビジュアルモードでの"V"も同様である。
CTRL-Zを押すと強調は停止し、エディタが一時停止するか新しいシェルが開始される
|CTRL-Z|。
タイプ後の新モード:
*v_v* *v_CTRL-V* *v_V*
旧モード "v" "CTRL-V" "V"
ノーマル ビジュアル 矩形ビジュアル 行ビジュアル
ビジュアル ノーマル 矩形ビジュアル 行ビジュアル
矩形ビジュアル ビジュアル ノーマル 行ビジュアル
行ビジュアル ビジュアル 矩形ビジュアル ノーマル
*gv* *v_gv* *reselect-Visual*
gv 最後に使用したのと同じ範囲のビジュアルモードを開始す
る。ビジュアルモードで使用すると、現在の選択領域と以前
のものとが交換される。
ビジュアルモードで"p"や"P"を実行した後にこれを使うと、
プットしたテキストが選択される。
*<LeftMouse>*
<LeftMouse> 現在のカーソル位置を設定する。ビジュアルモードが活動中
の場合は停止する。オプション
'mouse'が'n'もしくは'a'を
含むときだけ働く。指定した位置がスクリーンの下端から
'so'行以内の時にはテキストがスクロールアップする。指定
した位置がスクリーンの上端から
'so'行以内の時にはテキス
トがスクロールダウンする。
*<RightMouse>*
<RightMouse> ビジュアルモードが活動していないのならば開始する。カー
ソルの位置からクリックした位置までのテキストが強調され
る。ビジュアルモードが既に活動しているならば、開始位置
か終了位置のどちらか近いほうがクリックした位置になる。
オプション
'mouse'が'n'もしくは'a'を含むときだけ働く。
Note:
'mousemodel'が"popup"の時には
<RightMouse>の代わ
りに
<S-LeftMouse>を使用する。
*<LeftRelease>*
<LeftRelease> <LeftMouse>と同じ位置でなければ、これは
<LeftMouse>のよ
うに働く。古いxtermでは実行されているディスプレイ(環境
変数DISPLAYもしくは-display引数による)へのアクセスが無
い限り、xterm上ではボタンが離されるまで選択領域を見る
ことはできない。
'mouse'オプションが'n'もしくは'a'を含
むときだけ働く。
ビジュアルモードが活動していない時に"v"、"V"もしくは
CTRL-Vが数字(カウント)の後
に使用されると、以前の強調領域の大きさが開始位置から使用される。その時カーソル
は強調領域の終了位置へ移動し通常の操作を行なうことができる。領域の形式(文字、
行、矩形)は過去のものが使用される。
- 行ビジュアルモード: 行数がカウント倍される。
- 矩形ビジュアルモード; 行数とカラム数がカウント倍される。
- 1行内の通常ビジュアルモード: 文字数がカウント倍される。
- 複数行にまたがる通常ビジュアルモード: 行数がカウント倍され、最終行だけは前回
の強調領域の最終行と同じ文字数が使用される。
テキストの開始位置はカーソルの位置となる。強調テキストを拡張するための最後のコ
マンドとして"$"コマンドが使用された場合、領域は最長の行の最右端のカラムまで拡
張される。
前回の時と全く同じ領域を強調したいときには、"gv"を使用できる
|gv| |v_gv|。
*v_<Esc>*
<Esc> ビジュアルモード: ビジュアルモードを停止する。
*v_CTRL-C*
CTRL-C ビジュアルモード: ビジュアルモードを停止する。挿入モー
ドがぶら下がっている時には(モードメッセージが"--
(insert) VISUAL --"となる)、そちらも終了する。
==============================================================================
3. ビジュアル領域の変更
*visual-change*
*v_o*
o 強調されたテキストのもう一方の端へ移動する: 現在のカー
ソルの位置が強調されたテキストの開始地点になり、カーソ
ルは強調されたテキストのもう一方の端に移動する。強調さ
れた領域は同じままに保たれる。
*v_O*
O 強調されたテキストのもう一方の端へ移動する: これは"o"
に近い動作だが、ビジュアル矩形モードではカーソルが同じ
行内のもう一方のコーナーに移動する。移動した先のキャラ
クタが画面上で1つ以上の文字幅を占有している場合(例えば
<Tab>文字)、強調される範囲は変更・拡張される。
*v_$*
矩形(ブロック)選択モード時に"$"コマンドを使用すると、選択されるテキストの右終
端は選択されているラインのうち一番長いものによって決定される。この状態は水平方
向への移動コマンドを使うことで終了する。
ブロックの終端へ移動するために色々なコマンドを使うことができるが、Exコマンド、
変更を加えるコマンド、もしくはファイルを放棄するコマンドは使用できない。次の文
字で開始するコマンド".", "&",
CTRL-^, "Z",
CTRL-],
CTRL-T,
CTRL-R,
CTRL-I,
CTRL-O を使用するとブザー音が発生し、ビジュアルモードが継続される。
同じバッファを表示している別のウインドウに切り替えるとき、そのウインドウのカー
ソル位置はVisual選択に合わせて調整されます。これは特にVisual選択の開始位置や終
了位置を確認するのに便利です。選択範囲を変更するのに
<RightMouse>が使えます。
(
'mousemodel'が"popup"に設定されているときは
<S-LeftMouse>)。
==============================================================================
4. ビジュアル領域での操作
*visual-operators*
施すことのできる操作:
~ 大/小文字の切替
|v_~|
d 削除
|v_d|
c 変更 (4)
|v_c|
y ヤンク
|v_y|
> 右シフト (4)
|v_>|
< 左シフト (4)
|v_<|
! 外部コマンドによるフィルタ (1)
|v_!|
=
'equalprg'オプションで指定されたフィルタ (1)
|v_=|
gq
'textwidth'の長さによる行の整形 (1)
|v_gq|
使用できるオブジェクト:
aw (空白文字を含む) 1語(訳注:
|word|)
|v_aw|
iw 1語(訳注:
|word|)
|v_iw|
aW (空白文字を含む) 1語(訳注:
|WORD|)
|v_aW|
iW 1語(訳注:
|WORD|)
|v_iW|
as (空白文字を含む) 1文
|v_as|
is 1文
|v_is|
ap (空白文字を含む) 1段落
|v_ap|
ip 1段落
|v_ip|
ab (丸括弧文字を含む) ()のブロック
|v_ab|
ib ()のブロックの中身
|v_ib|
aB (波括弧文字を含む) {}のブロック
|v_aB|
iB {}のブロックの中身
|v_iB|
at (タグ自身を含む)
<tag> </tag> ブロック
|v_at|
it
<tag> </tag> ブロックの中身
|v_it|
a< (大小記号文字を含む) <>のブロック
|v_a<|
i< <>のブロックの中身
|v_i<|
a[ (各カッコ文字を含む) []のブロック
|v_a[|
i] []のブロックの中身
|v_i[|
a" (クォートを含む) ダブルクォート文字列
|v_aquote|
i" ダブルクォート文字列の中身
|v_iquote|
a' (クォートを含む) シングルクォート文字列
|v_a'|
i' シングルクォート文字列の中身
|v_i'|
a` (backtick を含む) backtick 文字列
|v_a`|
i` backtick 文字列の中身
|v_i`|
加えて続くコマンドが使用可能:
: 強調された行にExコマンドを適用 (1)
|v_:|
r 変更 (4)
|v_r|
s 変更
|v_s|
C 変更 (2)(4)
|v_C|
S 変更 (2)
|v_S|
R 変更 (2)
|v_R|
x 削除
|v_x|
D 削除 (3)
|v_D|
X 削除 (2)
|v_X|
Y ヤンク (2)
|v_Y|
p 貼り付け
|v_p|
J 連結 (1)
|v_J|
U 大文字化
|v_U|
u 小文字化
|v_u|
^] タグ検索
|v_CTRL-]|
I ブロック挿入
|v_b_I|
A ブロック追加
|v_b_A|
(1): 常に全部の行、
|:visual_example|を参照。
(2):
CTRL-Vを使ってないときは全部の行。
(3):
CTRL-Vを使ってないときは全部の行、
CTRL-Vを使っているときは行の最後までを
削除。
(4):
CTRL-Vを使っているときにはブロックにのみ作用。
ビジュアルモードでは特別なキー割り当てを行なうために":vmap"コマンドを使うこと
が出来ることに注意。例えば、"/"をビジュアル領域を拡張するのではなくて、選択し
たテキストによる検索を行なわせたい場合には:
(<>表記
|<>| の中身は、これを入力する時には文字通り入力すれば良い; ただし
'cpoptions'から'B'と'<'のフラグを外しておく必要がある)
"""コマンドを使用するときにレジスタ名を指定したい場合には、操作キーを入力する
前にタイプする: "v
{move-around}"xd"。
コマンドの回数を指定したい場合には、操作キーを入力する前にタイプする:
"v
{move-around}3>" (行を3単位、右へインデントする)。
*{move-around}*
{move-around}は一連の移動コマンドのシーケンス。1つの移動コマンドを意味する
{motion}とは異なるので注意。
ビジュアル領域に対して操作を行うもう1つの方法は、パターンにアイテム
|/\%V|を含
めることがある。例えば、ビジュアル領域内のすべての'('を'X'に置換するには:
==============================================================================
5. 矩形範囲の操作
*blockwise-operators*
{
|+visualextra|機能を無効にしてコンパイルした場合には利用できない}
注意:
'virtualedit'オプションを設定して、行末を越えた選択や、Tab文字の(表示上
の)途中での選択ができる。
ビジュアル矩形挿入
*v_b_I*
矩形選択中に、I文字列
<ESC> を行なうとブロック内の全ての行のブロック先頭にその
文字列が挿入され、行の長さはその分拡張される。選択ブロックの左側のカラムより短
い行は変更されない。タブは見た目のカラムを保つように分解される。
|v_b_I_example|を参照。
ビジュアル矩形追加
*v_b_A*
矩形選択中に、A文字列
<ESC> を行なうとブロック内の全ての行のブロック末尾ににそ
の文字列が挿入される。ブロックの右端が真っ直ぐでない時には、行の長さの違いに
よって異なる動作がある。
1. ブロックが
<C-v>$ で作成された場合
このケースでは各行の最後に文字列が追加される。
2. ブロックが
<C-v>{move-around}で作成された場合。
このケースではブロック内の各行のブロック末尾に文字列が追加され、行長が拡張
される。さらにブロックの末尾を揃えるために空白文字が挿入される。
|v_b_A_example|を参照。
Note: "I"と"A"は変更によって行が拡張されるときに違う動作をする。これはわざとそ
うなっていて、あなたがしたいようにできる。
ビジュアル矩形変更
*v_b_c*
矩形選択されたテキストの全てが同じテキスト文字列によって置き換えられる。"c"を
押した時には選択されたテキストが消去された後に挿入モードに入る。テキスト(改行
を除く)を入力できる。
<Esc>を叩くと、選択されていた行全てに同じ文字列が入力され
る。
ビジュアル矩形変更(大文字)
*v_b_C*
小文字の"c"と同様だが、選択領域が各行の末尾まで拡張される。
*v_b_<*
ビジュアル矩形シフト
*v_b_>*
ブロックが
'shiftwidth'によりシフトされる。ブロックの右端には拠らない。ブロック
の左端がどのポイントから右シフトを適用するかを決定し、
'ts'と
'et'に従い最適なタ
ブ文字が埋め込まれる(パディング)。ブロックの左端が何処まで左シフトするかを決定
する。
|v_b_>_example|を参照。
|v_b_<_example|を参照。
ビジュアル矩形置換
*v_b_r*
強調された領域の全ての画面上の文字が同じ文字で置き換えられ、タブ文字は画面上の
レイアウトを保持するために仮想的な空白文字に置き換えられる。
|v_b_r_example|を参照。
==============================================================================
6. 繰り返し
*visual-repeat*
ビジュアルモードの操作を繰り返して行なう時には、最後の時と同じ量のテキストに対
して操作が適用されている:
- 行ビジュアルモード: 同じ行数
- 矩形ビジュアルモード: 同じ行数とカラム数
- 1行内の通常ビジュアルモード: 同じ文字数
- 複数行にまたがる通常ビジュアルモード: 同じ行数で、最終行だけは前回の時の最
終行と同じ文字数。
テキストの開始位置は現在の位置となる。最後のコマンドとして強調されたテキストを
拡張するために"$"が使用された場合には、繰り返されるコマンドへは一番長い行の右
端のカラムが適用される。
==============================================================================
7. 使用例
*visual-examples*
*:visual_example*
現在":"コマンドは行全体に対して働くだけである。行の一部を選択して、":!date"の
ような何かを行なっても1行全体が置換わってしまう。行の一部だけを置き換えたい場
合には何かマッピングのようなものを作らなければならないだろう。将来のリリースで
は":"は部分的に動作するようになるだろう。
ここに1つ、選択されたテキストを"date"の出力に置き換える例がある:
(<>表記
|<>| の中身は、これを入力する時には文字通り入力すれば良い; ただし
'cpoptions'から'B'と'<'のフラグを外しておく必要がある)
これが何をしているかというと:
<Esc> ビジュアルモードを終了する
`> 選択領域の最後に移動する
a
<CR><Esc> 選択領域の直後に改行を挿入する
`< 選択領域の先頭に移動する
i
<CR><Esc> 選択領域の直前に改行を挿入する
!!date
<CR> 選択されたテキストをdateでフィルタリングする
kJJ 分割した行を連結して1つにする
*visual-search*
選択したテキストを検索に使用することを可能にするマッピングのアイデアがここにあ
る:
(<>表記
|<>| の中身は、これを入力する時には文字通り入力すれば良い; ただし
'cpoptions'から'B'と'<'のフラグを外しておく必要がある)
特別なキャラクタ('.'や'*'のようなもの)が問題を引き起こすことに注意。
矩形ビジュアルモードの例
*blockwise-examples*
以下のテキストを使って、矩形モードのコマンドの使用法と結果を示していく。どの
ケースでも、初めカーソルはテストテキストの最初の行の先頭の'a'の上にあるものと
する。
以下、modelineの設定は ":ts=8:sw=4:" であることを仮定している。
次のように設定しておくと理解の助けになるだろう。
:set hls
/
<TAB>
<TAB>とかかれている場所は本物のタブに読み替える。これが操作を可視化してくれ
る。
テストテキストは:
abcdefghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abcdef ghi jklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
1. fo
<C-v>3jISTRING
<ESC> *v_b_I_example*
abcdefghijklmnSTRINGopqrstuvwxyz
abc STRING defghijklmnopqrstuvwxyz
abcdef ghi STRING jklmnopqrstuvwxyz
abcdefghijklmnSTRINGopqrstuvwxyz
2. fo
<C-v>3j$ASTRING
<ESC> *v_b_A_example*
abcdefghijklmnopqrstuvwxyzSTRING
abc defghijklmnopqrstuvwxyzSTRING
abcdef ghi jklmnopqrstuvwxyzSTRING
abcdefghijklmnopqrstuvwxyzSTRING
3. fo
<C-v>3j3l<..
*v_b_<_example*
abcdefghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abcdef ghi jklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
4. fo
<C-v>3j>..
*v_b_>_example*
abcdefghijklmn opqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abcdef ghi jklmnopqrstuvwxyz
abcdefghijklmn opqrstuvwxyz
5. fo
<C-v>5l3jrX
*v_b_r_example*
abcdefghijklmnXXXXXXuvwxyz
abc XXXXXXhijklmnopqrstuvwxyz
abcdef ghi XXXXXX jklmnopqrstuvwxyz
abcdefghijklmnXXXXXXuvwxyz
==============================================================================
8. 選択モード
*Select* *Select-mode*
選択モードはビジュアルモードに似ているように見えるが、受け付けるコマンドが少し
異なる。これはMicrosoft Windowsの選択モードに似ている。オプション
'showmode'が
設定されている時には、"-- SELECT --"が最下の行に表示される。
選択モードに入るには:
-
'selectmode'が"mouse"を含んだ状態で、マウスを使って領域を選択する。
'mouse'が現在のモードのフラグを含んでなければならない。
-
'selectmode'が"key"を含んだ状態で、シフトキーを押しながら表示できない移動コ
マンドを使用する。例えば:
<S-Left>や
<S-End>。
'keymodel'が"startsel"を含んで
いる必要もある。
-
'selectmode'が"cmd"を含んだ状態で "v", "V" もしくは
CTRL-Vを使用する。
- ノーマルモードで "gh", "gH" もしくは "g_
CTRL-H" コマンドを使用する。
- ビジュアルモードで
CTRL-Gを押す。
*v_CTRL-G*
選択モードのコマンド:
- 表示可能な文字、及び
<NL>と
<CR>は選択領域を削除し、Vimは入力モードに移行す
る。タイプした文字は挿入される。
- シフトキーを押しながらの表示不可能な移動コマンド、は選択領域を拡張する。
'keymodel'は"startsel"を含まねばならない。
- シフトキーを押さずに表示不可能な移動コマンドを使用すると、選択モードを終了す
る。
'keymodel'は"stopsel"を含まねばならない。
- ESCは選択モードを終了する。
-
CTRL-Oでビジュアルモードに切り替え1つだけコマンドを実行する。
*v_CTRL-O*
-
CTRL-Gでビジュアルモードに切り替える。
それ以外では、入力された文字はビジュアルモードと同様に扱われる。
選択モードで操作が行なわれると、行選択の時には、選択された行が操作対象になる
が、文字選択の時のように扱われる。例えば、行全体を削除した時には、後でその内容
を行の中間に貼り付けることが出来る。
選択モード時のマッピングとメニュー
*Select-mode-mapping*
コマンド
|:vmap|や
|:vmenu|で定義したマッピングとメニューはビジュアルモードと選
択モードの両方で働く。選択モードでは、それらのマッピングやメニューが実行される
直前に自動的にビジュアルモードに切り替わるので、ビジュアルモードと同じ動作が行
われる。ビジュアルモードと選択モードで別々にマッピングを定義するときは
|:xmap|
や
|:smap|を使うこと。
ユーザーは印字可能な文字を押すと選択された領域が置換されることを期待している。
そのため、選択モードで印字可能な文字にマップするのは避けること。または
|:map|
と
|:vmap|のあとで
|:sunmap| をして選択モードに対するマップを削除すること。
マッピング及びメニューが終了した後には、選択領域が削除されるか、他のバッファに
切り替わるか、ウィンドウのレイアウトが変更されない限り、選択領域が再び有効にな
り選択モードになる。
文字が入力されたとき、選択領域が削除され挿入モードにはいると挿入モードのマッピ
ングが適用されます。選択モードで入力された文字に挿入モードのマッピングが適用さ
れると言うのはおそらく混乱を招きます。そのうえ言語マッピングも適用されます。
*gV* *v_gV*
gV 選択モードのマッピング及びメニューが終了したあとでビ
ジュアル領域が再度自動的に選択されるのを抑制する。マッ
ピングやメニューの終わる直前にこれを使用する。少なくと
もセレクションのあらゆる操作の後に行なわれるべきであ
る。
*gh*
gh 文字選択モードを開始する。これは"v"に似ているが、ビ
ジュアルモードの代わりに選択モードを開始する。
覚え方: "get highlighted"
*gH*
gH 行選択モードを開始する。これは"V"に似ているが、
ビジュアルモードの代わりに選択モードを開始する。
覚え方: "get Highlighted".
*g_CTRL-H*
g
CTRL-H 矩形選択モードを開始する。これは
CTRL-Vに似ているが、ビ
ジュアルモードの代わりに選択モードを開始する。
覚え方: "get Highlighted".
vim:tw=78:ts=8:ft=help:norl: