visual.txt For Vim バージョン 9.1. Last change: 2023 Sep 19
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
{Vim 7.4.200 からは +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
[count]v 文字単位のビジュアルモードを開始する。
[count] を指定すると、最後に実行したビジュアル操作の文
字数または行数が選択される。ただし、選択位置は現在の
カーソル位置であり、[count] を掛けた値が選択される。
最後のビジュアル操作が矩形選択なら、幅と高さが [count]
倍される。
最後に実行したビジュアル操作がない場合は、[count] 文字
が選択される。つまり、カーソルを右に [count] 文字動か
した範囲が選択される。
'selection' が "exclusive" でない場合は 1 文字少なくな
る。
V linewise-visual
[count]V 行単位のビジュアルモードを開始する。
[count] を指定すると、最後のビジュアル操作と同じモード
で同じ行数を選択する。ただし、現在の位置で選択を開始
し、行数に [count] を掛ける。最後に実行したビジュアル
操作がない場合は、[count] 行数が選択される。
CTRL-V blockwise-visual
[count]CTRL-V 矩形ビジュアルモードを開始する。Note: Windowsでは
CTRL-Vはテキストの貼り付けにマップされることがあり、そ
の際にはビジュアルモードを開始できない。
CTRL-V-alternativeを参照。
[count] を指定した場合は、上記の v と同様。
ビジュアルモードの最中に <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" を実行した後にこれを使う
と、プットしたテキストが選択される。
gn v_gn
gn 最後に使われた検索パターンを前方検索し (n のように)、
マッチしたものを選択してビジュアルモードを開始する。
カーソルがマッチの上にあるときは、それをビジュアル選択
する。
オペレータ待ちのときは、マッチに対してオペレータを実行
する。例: "dgn" は次のマッチを削除する。
すでにビジュアルモードなら、次のマッチの末尾まで選択範
囲を拡大する。
'wrapscan' が適用される。
Note: n とは異なり、検索方向は前の検索コマンドには依
存しない。
gN v_gN
gN gn と同じだが、後方検索する (N のように)。
<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'
を含むときだけ働く。
<LeftMouseNM> 内部のマウスコードで、ステータスラインをクリックして
<LeftReleaseNM> ウィンドウをフォーカスするときに使われる。NM は
non-mappable (マップできない) の略。
これらは使用できないが、一部の場所に表示されることがあ
る。
ビジュアルモードが活動していない時に "v"、"V" もしくは CTRL-V が数字 (カウント)
の後に使用されると、以前の強調領域の大きさが開始位置から使用される。その時カー
ソルは強調領域の終了位置へ移動し通常の操作を行うことができる。領域の形式 (文
字、行、矩形) は過去のものが使用される。
- 行ビジュアルモード: 行数がカウント倍される。
- 矩形ビジュアルモード: 行数とカラム数がカウント倍される。
- 1行内の通常ビジュアルモード: 文字数がカウント倍される。
- 複数行にまたがる通常ビジュアルモード: 行数がカウント倍され、最終行だけは前回
の強調領域の最終行と同じ文字数が使用される。
テキストの開始位置はカーソルの位置となる。強調テキストを拡張するための最後のコ
マンドとして "$" コマンドが使用された場合、領域は最長の行の最右端のカラムまで
拡張される。
前回の時と全く同じ領域を強調したいときには、"gv" を使用できる gv v_gv。
v_<Esc>
<Esc> ビジュアルモード時: ビジュアルモードを停止する。
v_CTRL-C
CTRL-C ビジュアルモード時: ビジュアルモードを停止する。挿入
モードがぶら下がっている時には (モードメッセージが
"-- (insert) VISUAL --" となる)、そちらも終了する。
MS-Windows では、CTRL-Break を押す必要があるかもしれな
い dos-CTRL-Break。
==============================================================================
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
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' に置換するには:
Note "'<,'>" はビジュアルモードで ":" を押すと自動的に挿入される。
==============================================================================
5. 矩形範囲の操作 blockwise-operators
参考: '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でビジュアルモードに切り替える。
- CTRL-R {register} テキスト入力時に削除されるテキストに使用するレジスタを選択
する。 v_CTRL-R
"_" (消去専用) レジスタを指定しない限り、無名レジスタも上書きされる。
それ以外では、入力された文字はビジュアルモードと同様に扱われる。
選択モードで操作が行われると、行選択の時には、選択された行が操作対象になるが、
文字選択の時のように扱われる。例えば、行全体を削除した時には、後でその内容を行
の中間に貼り付けることができる。
選択モード時のマッピングとメニュー 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:noet:ft=help:norl:
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
{Vim 7.4.200 からは +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
[count]v 文字単位のビジュアルモードを開始する。
[count] を指定すると、最後に実行したビジュアル操作の文
字数または行数が選択される。ただし、選択位置は現在の
カーソル位置であり、[count] を掛けた値が選択される。
最後のビジュアル操作が矩形選択なら、幅と高さが [count]
倍される。
最後に実行したビジュアル操作がない場合は、[count] 文字
が選択される。つまり、カーソルを右に [count] 文字動か
した範囲が選択される。
'selection' が "exclusive" でない場合は 1 文字少なくな
る。
V linewise-visual
[count]V 行単位のビジュアルモードを開始する。
[count] を指定すると、最後のビジュアル操作と同じモード
で同じ行数を選択する。ただし、現在の位置で選択を開始
し、行数に [count] を掛ける。最後に実行したビジュアル
操作がない場合は、[count] 行数が選択される。
CTRL-V blockwise-visual
[count]CTRL-V 矩形ビジュアルモードを開始する。Note: Windowsでは
CTRL-Vはテキストの貼り付けにマップされることがあり、そ
の際にはビジュアルモードを開始できない。
CTRL-V-alternativeを参照。
[count] を指定した場合は、上記の v と同様。
ビジュアルモードの最中に <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" を実行した後にこれを使う
と、プットしたテキストが選択される。
gn v_gn
gn 最後に使われた検索パターンを前方検索し (n のように)、
マッチしたものを選択してビジュアルモードを開始する。
カーソルがマッチの上にあるときは、それをビジュアル選択
する。
オペレータ待ちのときは、マッチに対してオペレータを実行
する。例: "dgn" は次のマッチを削除する。
すでにビジュアルモードなら、次のマッチの末尾まで選択範
囲を拡大する。
'wrapscan' が適用される。
Note: n とは異なり、検索方向は前の検索コマンドには依
存しない。
gN v_gN
gN gn と同じだが、後方検索する (N のように)。
<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'
を含むときだけ働く。
<LeftMouseNM> 内部のマウスコードで、ステータスラインをクリックして
<LeftReleaseNM> ウィンドウをフォーカスするときに使われる。NM は
non-mappable (マップできない) の略。
これらは使用できないが、一部の場所に表示されることがあ
る。
ビジュアルモードが活動していない時に "v"、"V" もしくは CTRL-V が数字 (カウント)
の後に使用されると、以前の強調領域の大きさが開始位置から使用される。その時カー
ソルは強調領域の終了位置へ移動し通常の操作を行うことができる。領域の形式 (文
字、行、矩形) は過去のものが使用される。
- 行ビジュアルモード: 行数がカウント倍される。
- 矩形ビジュアルモード: 行数とカラム数がカウント倍される。
- 1行内の通常ビジュアルモード: 文字数がカウント倍される。
- 複数行にまたがる通常ビジュアルモード: 行数がカウント倍され、最終行だけは前回
の強調領域の最終行と同じ文字数が使用される。
テキストの開始位置はカーソルの位置となる。強調テキストを拡張するための最後のコ
マンドとして "$" コマンドが使用された場合、領域は最長の行の最右端のカラムまで
拡張される。
前回の時と全く同じ領域を強調したいときには、"gv" を使用できる gv v_gv。
v_<Esc>
<Esc> ビジュアルモード時: ビジュアルモードを停止する。
v_CTRL-C
CTRL-C ビジュアルモード時: ビジュアルモードを停止する。挿入
モードがぶら下がっている時には (モードメッセージが
"-- (insert) VISUAL --" となる)、そちらも終了する。
MS-Windows では、CTRL-Break を押す必要があるかもしれな
い dos-CTRL-Break。
==============================================================================
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
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" コマンドを使うこと
ができることに注意。例えば、"/" をビジュアル領域を拡張するのではなくて、選択し
たテキストによる検索を行わせたい場合には:
:vmap / y/<C-R>"<CR>
(<>表記 <> の中身は、これを入力する時には文字通り入力すれば良い; ただし'cpoptions' から 'B' と '<' のフラグを外しておく必要がある)
""" コマンドを使用してレジスタ名を指定したい場合には、操作キーを入力する前にタ
イプする: "v{move-around}"xd"。
コマンドの回数を指定したい場合には、操作キーを入力する前にタイプする:
"v{move-around}3>" (行を3単位、右へインデントする)。
{move-around}
{move-around}は一連の移動コマンドのシーケンス。1つの移動コマンドを意味する
{motion}とは異なるので注意。
ビジュアル領域に対して操作を行うもう1つの方法は、パターンにアイテム/\%Vを含
めることがある。例えば、ビジュアル領域内のすべての '('を 'X' に置換するには:
:'<,'>s/\%V(/#/g
Note "'<,'>" はビジュアルモードで ":" を押すと自動的に挿入される。
==============================================================================
5. 矩形範囲の操作 blockwise-operators
参考: '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" の出力に置き換える例がある:
:vmap _a <Esc>`>a<CR><Esc>`<i<CR><Esc>!!date<CR>kJJ
(<>表記 <> の中身は、これを入力する時には文字通り入力すれば良い; ただし
'cpoptions' から 'B' と '<' のフラグを外しておく必要がある)
これが何をしているかというと:
<Esc> ビジュアルモードを終了する
`> 選択領域の最後に移動する
a<CR><Esc> 選択領域の直後に改行を挿入する
`< 選択領域の先頭に移動する
i<CR><Esc> 選択領域の直前に改行を挿入する
!!date<CR> 選択されたテキストをdateでフィルタリングする
kJJ 分割した行を連結して1つにする
visual-search
選択したテキストを検索に使用することを可能にするマッピングのアイデアがここにあ
る:
:vmap X y/<C-R>"<CR>
(<>表記 <> の中身は、これを入力する時には文字通り入力すれば良い; ただし
'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でビジュアルモードに切り替える。
- CTRL-R {register} テキスト入力時に削除されるテキストに使用するレジスタを選択
する。 v_CTRL-R
"_" (消去専用) レジスタを指定しない限り、無名レジスタも上書きされる。
それ以外では、入力された文字はビジュアルモードと同様に扱われる。
選択モードで操作が行われると、行選択の時には、選択された行が操作対象になるが、
文字選択の時のように扱われる。例えば、行全体を削除した時には、後でその内容を行
の中間に貼り付けることができる。
選択モード時のマッピングとメニュー Select-mode-mapping
コマンド:vmapや:vmenuで定義したマッピングとメニューはビジュアルモードと選
択モードの両方で働く。選択モードでは、それらのマッピングやメニューが実行される
直前に自動的にビジュアルモードに切り替わるので、ビジュアルモードと同じ動作が行
われる。ビジュアルモードと選択モードで別々にマッピングを定義するときは:xmap
や:smapを使うこと。
以下は特定のエッジケースの一例:
:vnoremap <C-K> <Esc>
これは、ビジュアルモードの時はビジュアルモードが終了するが、選択モードの時は、マップされたキーの実行後に選択モードが復元されるため動作しない。以下を使用する
必要がある:
:snoremap <C-K> <Esc>
ユーザーは印字可能な文字を押すと選択された領域が置換されることを期待している。
そのため、選択モードで印字可能な文字にマップするのは避けること。または :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:noet:ft=help:norl: