*visual.txt* For Vim バージョン 8.1. Last change: 2019 Nov 02 VIMリファレンスマニュアル by Bram Moolenaar
ビジュアルモード
ビジュアルモードは利用者にとつてテキストの部分を選擇する柔軟で簡單な方法である。矩形 (くけい) 範圍のテキスト (ブロック) を選擇する唯一の方法でもある。
ユーザーマニュアルの |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| 機能は常に含まれる}
ビジュアルモードを使ふには 3 つの部分から構成される:
ビジュアルモードでの强調表示の仕方を設定するのに、’highlight’ オプションを使用することができる。
文字のない場所を選擇するには ’virtualedit’ を設定する。
强調されたテキストにはカーソルの下の文字も含まれる。けれども、’selection’ オプションが "exclusive" に設定されてゐて、カーソルが Visual エリアの後にあるとき、カーソルの下の文字は含まれない。
"v" では開始位置より前と、終了位置より後のテキストは强調されない。しかし全ての大文字とアルファベット以外のキーによる操作は、"~" と "U" を除いて、表示に關係なく行單位で働く。下記の操作一覽を參照。
CTRL-V (矩形ビジュアルモード) は開始位置からカーソルの位置まで、テキストを矩形に强調する。しかし、幾つかの操作 (下記のリストを參照) はそれとは關係無く行單位で適用される。「變更」と「置き換へ」の操作は强調されたテキストを削除し、選擇範圍の左上より插入を開始する。
文字單位のビジュアルモードを開始する。[count] を指定すると、最後に實行したビジュアル操作の文字數または行數が選擇される。ただし、選擇位置は現在のカーソル位置であり、[count] を掛けた値が選擇される。最後のビジュアル操作が矩形選擇なら、幅と高さが [count] 倍される。 最後に實行したビジュアル操作がない場合は、[count] 文字が選擇される。つまり、カーソルを右に [count] 文字動かした範圍が選擇される。’selection’ が "exclusive" でない場合は 1 文字少なくなる。
行單位のビジュアルモードを開始する。[count] を指定すると、最後のビジュアル操作と同じモードで同じ行數を選擇する。ただし、現在の位置で選擇を開始し、行數に [count] を掛ける。最後に實行したビジュアル操作がない場合は、[count] 行數が選擇される。
矩形ビジュアルモードを開始する。
Note:
Windows では CTRL-V はテキストの貼り付けにマップされることがあり、その際にはビジュアルモードを開始できない。|CTRL-V-alternative| を參照。
[count] を指定した場合は、上記の ‘v‘ と同樣。
ビジュアルモードの最中に <Esc>
を使用したり、マウスの右ボタンをクリックしたり、または他のバッファに移動するコマンドを使用した場合には、强調は停止しテキストには何の操作も行はれない。文字單位のビジュアルモード中に "v" を叩いた時や、矩形ビジュアルモード時の "CTRL-V"、行單位のビジュアルモードでの "V" も同樣である。CTRL-Z を押すと强調は停止し、エディタが一時停止するか新しいシェルが開始される |CTRL-Z|。
タイプ後の新モード:
舊モード | "v" | "CTRL-V" | "V" |
---|---|---|---|
ノーマル | ビジュアル | 矩形ビジュアル | 行ビジュアル |
ビジュアル | ノーマル | 矩形ビジュアル | 行ビジュアル |
矩形ビジュアル | ビジュアル | ノーマル | 行ビジュアル |
行ビジュアル | ビジュアル | 矩形ビジュアル | ノーマル |
最後に使用したのと同じ範圍のビジュアルモードを開始する。ビジュアルモードで使用すると、現在の選擇領域と以前のものとが交換される。ビジュアルモードで "p" や "P" を實行した後にこれを使ふと、プットしたテキストが選擇される。
最後に使はれた檢索パターンを前方檢索し (‘n‘ のやうに)、マッチしたものを選擇してビジュアルモードを開始する。カーソルがマッチの上にあるときは、それをビジュアル選擇する。
オペレータ待ちのときは、マッチに對してオペレータを實行する。例: "dgn" は次のマッチを削除する。すでにビジュアルモードなら、次のマッチの末尾まで選擇範圍を擴大する。
’wrapscan’ が適用されます。
Note:
‘n
‘ とは異なり、檢索方向は前の檢索コマンドには依存しないことに注意してください。
|gn| と同じだが、後方檢索する (‘N‘ のやうに)。
現在のカーソル位置を設定する。ビジュアルモードが活動中の場合は停止する。オプション ’mouse’ が ’n’ もしくは ’a’ を含むときだけ働く。指定した位置がスクリーンの下端から ’so’ 行以內の時にはテキストがスクロールアップする。指定した位置がスクリーンの上端から ’so’ 行以內の時にはテキストがスクロールダウンする。
ビジュアルモードが活動してゐないのならば開始する。カーソルの位置からクリックした位置までのテキストが强調される。ビジュアルモードが既に活動してゐるならば、開始位置か終了位置のどちらか近いほうがクリックした位置になる。オプション ’mouse’ が ’n’ もしくは ’a’ を含むときだけ働く。
Note:
’mousemodel’ が "popup" の時には <RightMouse> の代はりに <S-LeftMouse> を使用する。
<LeftMouse> と同じ位置でなければ、これは <LeftMouse> のやうに働く。古い xterm では實行されてゐるディスプレイ (環境變數 DISPLAY
もしくは -display 引數による) へのアクセスが無い限り、xterm 上ではボタンが離されるまで選擇領域を見ることはできない。’mouse’ オプションが ’n’ もしくは ’a’ を含むときだけ働く。
ビジュアルモードが活動してゐない時に "v"、"V" もしくは CTRL-V が數字 (カウント) の後に使用されると、以前の强調領域の大きさが開始位置から使用される。その時カーソルは强調領域の終了位置へ移動し通常の操作を行ふことができる。領域の形式 (文字、行、矩形) は過去のものが使用される。
テキストの開始位置はカーソルの位置となる。强調テキストを擴張するための最後のコマンドとして "$" コマンドが使用された場合、領域は最長の行の最右端のカラムまで擴張される。
前囘の時と全く同じ領域を强調したいときには、"gv" を使用できる |gv| |v_gv|。
ビジュアルモード時: ビジュアルモードを停止する。
ビジュアルモード時: ビジュアルモードを停止する。插入モードがぶら下がつてゐる時には (モードメッセージが "‘-- (insert) VISUAL --’" となる)、そちらも終了する。
强調されたテキストのもう一方の端へ移動する: 現在のカーソルの位置が强調されたテキストの開始地點になり、カーソルは强調されたテキストのもう一方の端に移動する。强調された領域は同じままに保たれる。
强調されたテキストのもう一方の端へ移動する: これは "o" に近い動作だが、矩形ビジュアルモードではカーソルが同じ行內のもう一方のコーナーに移動する。移動した先のキャラクタが畫面上で 1 つ以上の文字幅を占有してゐる場合 (例へば <Tab> 文字)、强調される範圍は變更・擴張される。
矩形ビジュアルモード時に "$" コマンドを使用すると、選擇されるテキストの右終端は選擇されてゐるラインのうち一番長いものによつて決定される。この狀態は水平方向への移動コマンドを使ふことで終了する。
ブロックの終端へ移動するために色々なコマンドを使ふことができるが、Ex コマンド、變更を加へるコマンド、もしくはファイルを抛棄するコマンドは使用できない。次の文字で開始するコマンド ".
", "&
", CTRL-^, "Z
", CTRL-], CTRL-T, CTRL-R, CTRL-I, CTRL-O を使用するとブザー音が發生し、ビジュアルモードが繼續される。
同じバッファを表示してゐる別のウィンドウに切り替へるとき、そのウィンドウのカーソル位置はビジュアル選擇に合はせて調整される。これは特にビジュアル選擇の開始位置や終了位置を確認するのに便利である。選擇範圍を變更するのに <RightMouse> が使へる。(’mousemodel’ が "popup" に設定されてゐるときは <S-LeftMouse>)。
施すことのできる操作:
~ | 大/小文字の切替 | |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
" コマンドを使ふことができることに注意。例へば、"/" をビジュアル領域を擴張するのではなくて、選擇したテキストによる檢索を行はせたい場合には:
:vmap / y/<C-R>"<CR>
(<> 表記 |<>| の中身は、これを入力する時には文字通り入力すれば良い; ただし ’cpoptions’ から ’B’ と ’<’ のフラグを外しておく必要がある)
""" コマンドを使用してレジスタ名を指定したい場合には、操作キーを入力する前にタイプする: "v{move-around}"xd"。
コマンドの回數を指定したい場合には、操作キーを入力する前にタイプする: "v{move-around}3>" (行を 3 單位、右へインデントする)。
{move-around} は一聯の移動コマンドのシーケンス。1 つの移動コマンドを意味する {motion} とは異なるので注意。
ビジュアル領域に對して操作を行ふもう 1 つの方法は、パターンにアイテム |/\%V| を含めることがある。例へば、ビジュアル領域內のすべての ’(’ を ’X’ に置換するには:
:'<,'>s/\%V(/#/g
Note:
"’<,’>" はビジュアルモードで ":" を押すと自動的に插入される。
參考: ’virtualedit’ オプションを設定して、行末を越えた選擇や、Tab 文字の (表示上の) 途中での選擇ができる。
矩形選擇中に、I{文字列}<ESC> を行ふとブロック內の全ての行のブロック先頭にその文字列が插入され、行の長さはその分擴張される。選擇ブロックの左側のカラムより短い行は變更されない。タブは見た目のカラムを保つやうに分解される。行にテキストを追加する時のみ働き、削除では働かない。|v_b_I_example| を參照。
矩形選擇中に、A{文字列}<ESC> を行ふとブロック內の全ての行のブロック末尾にその文字列が插入される。ブロックの右端が眞つ直ぐでない時には、行の長さの違ひによつて異なる動作がある。
|v_b_A_example|を參照。
Note:
"I" と "A" は變更によつて行が擴張されるときに違ふ動作をする。これはわざとさうなつてゐて、あなたがしたいやうにできる。行にテキストを追加する時のみ働き、削除では働かない。
矩形選擇されたテキストの全てが同じテキスト文字列によつて置き換へられる。"c" を押した時には選擇されたテキストが消去された後に插入モードに入る。テキスト (改行を除く) を入力できる。<Esc>
を叩くと、選擇されてゐた行全てに同じ文字列が入力される。
小文字の "c" と同樣だが、選擇領域が各行の末尾まで擴張される。
ブロックが ’shiftwidth’ によりシフトされる。ブロックの右端には據らない。ブロックの左端がどのポイントから右シフトを適用するかを決定し、’ts’ と ’et’ に從ひ最適なタブ文字が埋め込まれる (パディング)。ブロックの左端が何處まで左シフトするかを決定する。|v_b_>_example| を參照。|v_b_<_example| を參照。
强調された領域の全ての畫面上の文字が同じ文字で置き換へられ、タブ文字は畫面上のレイアウトを保持するために假想的な空白文字に置き換へられる。|v_b_r_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 つにする |
選擇したテキストを檢索に使用することを可能にするマッピングのアイデアがここにある:
:vmap X y/<C-R>"<CR>
(<> 表記 |<>| の中身は、これを入力する時には文字通り入力すれば良い; ただし ’cpoptions’ から ’B’ と ’<’ のフラグを外しておく必要がある)
特別なキャラクタ(’.’ や ’*’ のやうなもの)が問題を引き起こすことに注意。
以下のテキストを使つて、矩形モードのコマンドの使用法と結果を示していく。どのケースでも、初めカーソルはテストテキストの最初の行の先頭の ’a’ の上にあるものとする。以下、modeline の設定は ":ts=8:sw=4:" であることを假定してゐる。
次のやうに設定しておくと理解の助けになるだらう。
:set hls /<TAB>
<TAB> と書かれてゐる場所は本物のタブに讀み替へる。これが操作を可視化してくれる。
テストテキストは:
abcdefghijklmnopqrstuvwxyz abc defghijklmnopqrstuvwxyz abcdef ghi jklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
abcdefghijklmnSTRINGopqrstuvwxyz abc STRING defghijklmnopqrstuvwxyz abcdef ghi STRING jklmnopqrstuvwxyz abcdefghijklmnSTRINGopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzSTRING abc defghijklmnopqrstuvwxyzSTRING abcdef ghi jklmnopqrstuvwxyzSTRING abcdefghijklmnopqrstuvwxyzSTRING
abcdefghijklmnopqrstuvwxyz abc defghijklmnopqrstuvwxyz abcdef ghi jklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
abcdefghijklmn opqrstuvwxyz abc defghijklmnopqrstuvwxyz abcdef ghi jklmnopqrstuvwxyz abcdefghijklmn opqrstuvwxyz
abcdefghijklmnXXXXXXuvwxyz abc XXXXXXhijklmnopqrstuvwxyz abcdef ghi XXXXXX jklmnopqrstuvwxyz abcdefghijklmnXXXXXXuvwxyz
選擇モードはビジュアルモードに似てゐるやうに見えるが、受け付けるコマンドが少し異なる。これは Microsoft Windows の選擇モードに似てゐる。オプション ’showmode’ が設定されてゐる時には、"‘-- SELECT --’" が最下の行に表示される。
それ以外では、入力された文字はビジュアルモードと同樣に扱はれる。
選擇モードで操作が行はれると、行選擇の時には、選擇された行が操作對象になるが、文字選擇の時のやうに扱はれる。例へば、行全體を削除した時には、後でその內容を行の中閒に貼り付けることができる。
コマンド |:vmap| や |:vmenu| で定義したマッピングとメニューはビジュアルモードと選擇モードの兩方で働く。選擇モードでは、それらのマッピングやメニューが實行される直前に自動的にビジュアルモードに切り替はるので、ビジュアルモードと同じ動作が行はれる。ビジュアルモードと選擇モードで別々にマッピングを定義するときは |:xmap| や |:smap| を使ふこと。
ユーザーは印字可能な文字を押すと選擇された領域が置換されることを期待してゐる。そのため、選擇モードで印字可能な文字にマップするのは避けること。または |:map| と |:vmap| のあとで |:sunmap| をして選擇モードに對するマップを削除すること。
マッピング及びメニューが終了した後には、選擇領域が削除されるか、他のバッファに切り替はるか、ウィンドウのレイアウトが變更されない限り、選擇領域が再び有效になり選擇モードになる。
文字が入力されたとき、選擇領域が削除されて插入モードに入り、その文字に對し插入モードのマッピングが適用される。これは、選擇モードで入力された文字に插入モードのマッピングが適用されることを意味するため、おそらく混亂を招くだらう。そのうへ言語マッピングも適用される。
選擇モードのマッピング及びメニューが終了したあとでビジュアル領域が再度自動的に選擇されるのを抑制する。マッピングやメニューの終はる直前にこれを使用する。少なくともセレクションのあらゆる操作の後に行はれるべきである。
文字選擇モードを開始する。これは "v" に似てゐるが、ビジュアルモードの代はりに選擇モードを開始する。覺え方: "get highlighted"
行選擇モードを開始する。これは "V" に似てゐるが、ビジュアルモードの代はりに選擇モードを開始する。覺え方: "get Highlighted".
矩形選擇モードを開始する。これは CTRL-V に似てゐるが、ビジュアルモードの代はりに選擇モードを開始する。覺え方: "get Highlighted".