Visual
Nvimの:help
ページは、生成されたもので、ソースをtree-sitter-vimdocパーサーを使って変換したものです。
ビジュアルモードは、オペレーターに対してテキストの一部を選択するための柔軟で簡単な方法です。テキストのブロックを選択する唯一の方法でもあります。
これは、ユーザーマニュアルの
04.4セクションで紹介されています。
ビジュアルモードの使用は、次の3つの部分で構成されています。1. "v"、"V"、またはCTRL-V
でテキストの開始をマークします。カーソル下の文字が開始として使用されます。2. テキストの終わりに移動します。ビジュアルモードの開始からカーソル下の文字まで(それを含む)のテキストがハイライト表示されます。3. オペレーターコマンドを入力します。ハイライト表示された文字が操作されます。
通常、ハイライト表示されたテキストには、カーソル下の文字が含まれます。ただし、
'selection'オプションが"exclusive"に設定されており、カーソルがビジュアルエリアの後にある場合、カーソル下の文字は含まれません。
"v"を使用すると、開始位置の前と終了位置の後のテキストはハイライト表示されません。ただし、"~"と"U"を除くすべての大文字および非アルファベットのオペレーターは、いずれにしても行全体で機能します。以下のオペレーターのリストを参照してください。
visual-block CTRL-V
(ブロック単位ビジュアルモード)を使用すると、ハイライト表示されたテキストは開始位置とカーソル間の長方形になります。ただし、一部のオペレーターは、いずれにしても行全体で機能します(以下のリストを参照)。変更および置換オペレーターは、ハイライト表示されたテキストを削除し、左上の位置で挿入を開始します。
v charwise-visual [count]v 文字単位でビジュアルモードを開始します。[count]を使用して、最後のビジュアル操作で使用されたのと同じ数の文字または行を、現在のカーソル位置で、[count]倍選択します。以前のビジュアル操作がブロック上であった場合、ブロックの幅と高さの両方が[count]倍になります。以前のビジュアル操作がなかった場合、[count]文字が選択されます。これは、カーソルを右にN * [count]文字移動するようなものです。
'selection'が"exclusive"でない場合は1つ少なくなります。
V linewise-visual [count]V 行単位でビジュアルモードを開始します。[count]を使用して、最後のビジュアル操作で使用されたのと同じ数の行を、現在のカーソル位置で、[count]倍選択します。以前のビジュアル操作がなかった場合、[count]行が選択されます。
ビジュアルモード中に
<Esc>
を使用するか、左マウスボタンをクリックするか、別のバッファへのジャンプを行うコマンドを使用すると、ハイライト表示は停止し、テキストは影響を受けません。文字単位のビジュアルモードで"v"、ブロック単位のビジュアルモードで"CTRL-V"、または行単位のビジュアルモードで"V"を押した場合も同様です。CTRL-Zを押すと、ハイライト表示が停止し、エディターが中断されるか、新しいシェルが開始されます
CTRL-Z。
通常 ビジュアル ブロック単位ビジュアル 行単位ビジュアル ビジュアル 通常 ブロック単位ビジュアル 行単位ビジュアル ブロック単位ビジュアル ビジュアル 通常 行単位ビジュアル 行単位ビジュアル ビジュアル ブロック単位ビジュアル 通常
gv v_gv reselect-Visual gv 前の領域と同じ領域とモードでビジュアルモードを開始します。ビジュアルモードでは、現在のビジュアル領域と前のビジュアル領域が交換されます。ビジュアルモードで"p"または"P"を使用した後、挿入されたテキストが選択されます。
gn v_gn gn
n
と同様に、最後に使用した検索パターンを前方検索し、一致を選択するためにビジュアルモードを開始します。カーソルが一致している場合、視覚的に選択します。オペレーターが保留中の場合、一致に対して操作を実行します。たとえば、"dgn"は次のマッチのテキストを削除します。ビジュアルモードがアクティブな場合、次のマッチの末尾まで選択範囲を拡張します。
'wrapscan'が適用されます。
注: n
とは異なり、検索方向は前の検索コマンドに依存しません。
<LeftMouse>
<LeftMouse>
現在のカーソル位置を設定します。ビジュアルモードがアクティブな場合は停止します。
'mouse'オプションに'n'または'a'が含まれている場合にのみ。位置が画面上の最後の行から
'so'行以内にある場合、テキストが上にスクロールされます。位置が画面上の最初の行から
'so'行以内にある場合、テキストが下にスクロールされます。
<RightMouse>
<RightMouse>
ビジュアルモードがアクティブでない場合は開始します。カーソル位置からクリック位置までのテキストがハイライト表示されます。ビジュアルモードがすでにアクティブな場合は、ハイライト表示されたテキストの開始または終了のいずれか近い方を、クリック位置に移動します。
'mouse'オプションに'n'または'a'が含まれている場合にのみ。
注: 'mousemodel'が"popup"に設定されている場合、
<RightMouse>
の代わりに
<S-LeftMouse>
を使用する必要があります。
<LeftRelease>
<LeftRelease>
これは、
<LeftMouse>
と同じ位置にない場合は、
<LeftMouse>
のように機能します。古いバージョンのxtermでは、ボタンが離されるまで選択された領域は表示されません。これは、xtermが実行されているディスプレイにアクセスできる場合(DISPLAY環境変数または-display引数経由)を除きます。
'mouse'オプションに'n'または'a'が含まれている場合にのみ。
ビジュアルモードがアクティブでなく、"v"、"V"、または
CTRL-V
の前にカウントがある場合、以前にハイライト表示された領域のサイズが開始に使用されます。その後、ハイライト表示された領域の末尾を移動して、オペレーターを与えることができます。古い領域のタイプ(文字、行、またはブロック単位)が使用されます。
行単位のビジュアルモード: 行数はカウントで乗算されます。
ブロック単位のビジュアルモード: 行数と列数はカウントで乗算されます。
1行内の通常のビジュアルモード: 文字数はカウントで乗算されます。
複数の行を持つ通常のビジュアルモード: 行数はカウントで乗算されます。最後の行では、以前にハイライト表示された領域の最後の行と同じ数の文字が使用されます。テキストの開始はカーソル位置です。 "$"コマンドが、ハイライト表示されたテキストを拡張するための最後のコマンドの1つとして使用された場合、領域は最長の行の最も右の列まで拡張されます。
前回とまったく同じ領域をハイライト表示したい場合は、"gv"
gv v_gvを使用できます。
v_<Esc>
<Esc>
ビジュアルモードの場合: ビジュアルモードを停止します。
v_META v_ALT ALT (
META)は、コードがマップされていない場合、
<Esc>
のように動作することがあります。たとえば、
<A-x>
にビジュアルモードマッピングがない場合、
<A-x>
は
<Esc>
xのように動作します。
v_CTRL-C CTRL-C ビジュアルモードの場合: ビジュアルモードを停止します。挿入モードが保留中の場合(モードメッセージに"-- (insert) VISUAL --"と表示される場合)、それも停止されます。MS-Windowsでは、
CTRL-Break
を押す必要がある場合があります。
v_o o ハイライト表示されたテキストの反対側に移動: 現在のカーソル位置がハイライト表示されたテキストの開始になり、カーソルがハイライト表示されたテキストの反対側に移動します。ハイライト表示された領域は同じままです。
v_O O ハイライト表示されたテキストの反対側に移動します。これは"o"に似ていますが、ブロック単位ビジュアルモードでは、カーソルは同じ行の反対側の隅に移動します。隅が画面上で複数の位置を占める文字(たとえば、
<Tab>
)にある場合、ハイライト表示されたテキストが変更される可能性があります。
v_$ ブロック単位ビジュアルモードで "$"コマンドが使用される場合、ハイライト表示されたテキストの右端は、ハイライト表示された最も長い行によって決定されます。これは、まっすぐ上または下に移動しないモーションコマンドが使用されると停止します。
ブロックの末尾を移動するために多くのコマンドを使用できますが、Exコマンド、変更を行うコマンド、またはファイルを破棄するコマンドは使用できません。".", "&", CTRL-^
, "Z", CTRL-]
, CTRL-T
, CTRL-R
, CTRL-I
および CTRL-O
(で始まる)コマンドはビープ音を鳴らし、ビジュアルモードは継続します。
同じバッファの別のウィンドウに切り替える場合、そのウィンドウ内のカーソル位置が調整され、同じビジュアル領域が選択されたままになります。これは、1つのウィンドウでビジュアル領域の開始を表示し、別のウィンドウで終了を表示するのに特に役立ちます。その後、
<RightMouse>
(または
'mousemodel'が"popup"の場合は
<S-LeftMouse>
)を使用して、ビジュアル領域のいずれかの端をドラッグできます。
使用できるオブジェクトは以下のとおりです: aw 単語 (空白を含む)
v_aw iw 内側の単語
v_iw aW 大文字の単語 (空白を含む)
v_aW iW 内側の大文字の単語
v_iW as 文 (空白を含む)
v_as is 内側の文
v_is ap 段落 (空白を含む)
v_ap ip 内側の段落
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` バッククォート内の文字列 (バッククォート付き)
v_a` i` 内側のバッククォート内の文字列
v_i`
(1): 常に全行、
:visual_example を参照してください。(2):
CTRL-V
を使用しない場合は全行。(3):
CTRL-V
を使用しない場合は全行、
CTRL-V
を使用する場合は行末まで削除。(4):
CTRL-V
を使用する場合はブロックのみに作用。
":vmap" コマンドは、Visual モードで特定のキーをマッピングするために使用できることに注意してください。たとえば、"/" コマンドで Visual エリアを拡張するのではなく、ハイライトされたテキストを検索したい場合など。
:vmap / y/<C-R>"<CR>
(<> 表記 (
<>) では、入力時に文字どおりに入力する必要があります。
'cpoptions' から 'B' フラグを削除する必要があります。)
""" コマンドを使用してレジスタ名を指定する場合は、演算子文字を入力する直前にこれを行います: "v{move-around}"xd".
コマンドに回数を指定する場合は、演算子文字を入力する直前にこれを行います: "v{move-around}3>" (行を右に 3 インデント移動)。
{move-around} {move-around}
は、移動コマンドの任意のシーケンスです。
{motion}
は 1 つの移動コマンドのみであることに注意してください。
Visual エリアを操作する別の方法は、パターン内の
/\%V 項目を使用することです。たとえば、Visual エリア内のすべての '(' を '#' に置き換えるには、次のようにします。
:'<,'>s/\%V(/#/g
Visual モードで ":" を押すと、"'<,'>" が自動的に表示されることに注意してください。
リマインダー: 行の末尾の後やタブの途中から開始または終了するブロックを選択できるようにするには、
'virtualedit' を使用してください。
Visual-block 挿入
v_b_Iブロック単位の選択で、I{文字列}<ESC> は、行がブロックまで拡張されている場合に、ブロックの各行の先頭に
{文字列}
を挿入します。したがって、短い行は変更されません。TAB は、視覚的な列を保持するために分割されます。行へのテキストの追加のみに機能し、削除には機能しません。
v_b_I_example を参照してください。
Visual-block 追加
v_b_Aブロック単位の選択で、A{文字列}<ESC> は、ブロックの各行の末尾に
{文字列}
を追加します。行の長さが異なるため、ブロックの右側がまっすぐでない場合に、いくつかの異なる動作があります。
1. ブロックが
<C-v>
$ で作成された場合。この場合、文字列は各行の末尾に追加されます。2. ブロックが
<C-v>
{move-around}
で作成された場合。この場合、文字列は各行のブロックの末尾に追加され、空白はブロックの末尾の列まで埋めるために挿入されます。
v_b_A_example を参照してください。
注: "I" と "A" は、選択されたブロックまで拡張されていない行では異なる動作をします。これは、必要な方法で実行できるように意図的に行われました。行へのテキストの追加のみに機能し、削除には機能しません。
Visual-block 変更
v_b_cブロック内で選択されたすべてのテキストは、同じテキスト文字列で置き換えられます。"c" を使用すると、選択したテキストが削除され、挿入モードが開始されます。次に、(改行なしで) テキストを入力できます。
<Esc>
を押すと、同じ文字列が以前に選択したすべての行に挿入されます。
Visual-block 変更
v_b_C"c" を使用する場合と同様ですが、選択範囲はすべての行の行末まで拡張されます。
Visual-block 置換
v_b_r強調表示された領域内のすべての画面文字は、同じ文字で置き換えられます。つまり、TAB が分割され、仮想空白が置き換えられ、画面レイアウトが維持されます。
v_b_r_example を参照してください。
Visual モード演算子を繰り返すと、演算子は前回と同じ量のテキストに適用されます。
行単位の Visual モード: 同じ数の行。
ブロック単位の Visual モード: 同じ数の行と列。
1 行内の通常の Visual モード: 同じ数の文字。
複数行の通常の Visual モード: 同じ数の行、最後の行では、最後の行の最後の文字と同じ数の文字。テキストの開始はカーソル位置です。"$" コマンドがハイライトされたテキストを拡張するための最後のコマンドの 1 つとして使用された場合、繰り返しは最も長い行の右端の列まで適用されます。.
コマンドに渡された回数は使用されません。
123(hello)321 456(world)654 456(NOT THIS)654
レジスタ "x" に yi(VP
コマンドが含まれている場合、最初の 2 行を視覚的に選択して @x
と入力すると、次のようになります。
hello world 456(NOT THIS)654
:visual_example 現在、":" コマンドは全行でのみ機能します。行の一部を選択すると、":!date" のような操作を行うと、行全体が置き換えられます。行の一部のみを置き換えたい場合は、マッピングを作成する必要があります。今後のリリースでは、":" は部分行でも機能するようになる可能性があります。
以下は、選択したテキストを "date" の出力で置き換える例です。
:vmap _a <Esc>`>a<CR><Esc>`<i<CR><Esc>!!date<CR>kJJ
(<> 表記 (
<>) では、入力時に文字どおりに入力する必要があります。
'cpoptions' から 'B' フラグを削除する必要があります。)
これは次の処理を行います: <Esc>
Visual モードを停止 > Visual エリアの末尾に移動 a<CR><Esc> Visual エリアの後に行を分割 < Visual エリアの先頭にジャンプ i<CR><Esc> Visual エリアの前に行を分割 !!date<CR> date を通して Visual テキストをフィルタリング kJJ 行を結合して元に戻す
visual-search 以下は、選択したテキストの検索を可能にするマッピングのアイデアです。
:vmap X y/<C-R>"<CR>
(<> 表記 (
<>) では、入力時に文字どおりに入力する必要があります。
'cpoptions' から 'B' フラグを削除する必要があります。)
特殊文字 ('.' や '*' など) は問題を引き起こすことに注意してください。
Visual-block 例
blockwise-examples以下のテキストで、ブロックを作成するためのコマンドと、以下の結果を示します。すべての場合において、カーソルはテストテキストの最初の行の 'a' から開始されます。次のモデルライン設定が想定されています: ":ts=8:sw=4:".
:set hls /<TAB> と設定すると役立ちます。ここで、<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
選択モードは Visual モードのように見えますが、受け入れられるコマンドは大きく異なります。これは Microsoft Windows の選択モードに似ています。
'showmode' オプションが設定されている場合、最後の行に "-- SELECT --" が表示されます。
選択モードへの移行
Shift キーを押しながら印刷不可能な移動コマンドを使用し、
'selectmode' に "key" が含まれている場合。例:
<S-Left>
と
<S-End>
。
'keymodel' にも "startsel" が含まれている必要があります。
ノーマルモードで "gh"、"gH"、または "g_CTRL-H" コマンドを使用する場合。
選択モードでのコマンド
印刷可能な文字、<NL>
、および <CR>
を入力すると、選択範囲が削除され、Vim が挿入モードになります。入力された文字が挿入されます。
Shift キーを押しながら印刷不可能な移動コマンドを使用すると、選択範囲が拡張されます。
'keymodel' に "startsel" が含まれている必要があります。
Shift キーを押さずに印刷不可能な移動コマンドを使用すると、選択モードが停止します。
'keymodel' に "stopsel" が含まれている必要があります。
ESC を押すと選択モードが停止します。
CTRL-O
は、1 つのコマンドの実行中のみ Visual モードに切り替えます。
v_CTRL-O CTRL-G
は Visual モードに切り替えます。
CTRL-R
{register}
は、テキストを入力したときに削除されるテキストに使用するレジスタを選択します。
v_CTRL-R"_" (ブラックホール) レジスタを指定しない限り、無名レジスタも上書きされます。
それ以外の場合、入力された文字はビジュアルモードと同じように処理されます。
選択モードでオペレーターを使用する場合、選択範囲が行単位である場合、選択された行が操作されますが、文字単位の選択と同様です。たとえば、行全体が削除された場合、後でその行の中央に貼り付けることができます。
:vmap または
:vmenu コマンドでマッピングとメニューを定義すると、ビジュアルモードと選択モードの両方で動作します。これらを選択モードで使用すると、Vim は自動的にビジュアルモードに切り替わり、ビジュアルモードと同じ動作が有効になります。これが必要ない場合は、
: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"。