Usr_04

Nvimの :help ページは、生成されており、ソースから tree-sitter-vimdoc パーサーを使用して生成されています。


VIM ユーザーマニュアル - Bram Moolenaar 著
小さな変更を加える
この章では、修正やテキストの移動を行うためのいくつかの方法を紹介します。テキストを変更するための3つの基本を学びます。オペレーターとモーション、Visual モード、テキストオブジェクトです。
04.1 オペレーターとモーション 04.2 テキストの変更 04.3 変更の繰り返し 04.4 Visual モード 04.5 テキストの移動 04.6 テキストのコピー 04.7 クリップボードの使用 04.8 テキストオブジェクト 04.9 置換モード 04.10 結論
次の章: usr_05.txt 設定を行う 前の章: usr_03.txt 移動する 目次: usr_toc.txt

オペレーターとモーション

第2章で、1文字を削除する "x" コマンドを学びました。また、カウントを使って "4x" とすると4文字削除できます。"dw" コマンドは単語を削除します。"w" コマンドが単語移動コマンドであると気づいたかもしれません。実際、"d" コマンドは任意のモーションコマンドに続けることができ、カーソルの現在位置からカーソルが最終的に移動する場所までを削除します。例えば、"4w" コマンドはカーソルを4単語分移動させます。"d4w" コマンドは4単語を削除します。
過ちは人の常。本当にしくじるにはコンピューターが必要だ。
------------------> d4w
過ちは人の常。コンピューターが必要だ。
Vimは、モーションがカーソルを移動させる位置までしか削除しません。それは、おそらく単語の最初の文字を削除したくないだろうとVimが知っているからです。"e" コマンドを使って単語の末尾に移動する場合、Vimはその最後の文字を含めたいと推測します。
過ちは人の常。コンピューターが必要だ。
--------> d2e
過ちは人の常。コンピューター。
カーソル下の文字が含まれるかどうかは、その文字に移動するために使用したコマンドによって異なります。リファレンスマニュアルでは、文字が含まれない場合を「排他的」、含まれる場合を「包括的」と呼んでいます。
"$" コマンドは行末に移動します。"d$" コマンドはカーソルから行末までを削除します。これは包括的なモーションなので、行末の文字も削除操作に含まれます。
過ちは人の常。コンピューター。
------------> d$
過ちは人の常
ここにはパターンがあります:オペレーター-モーションです。最初にオペレーターコマンドを入力します。例えば、"d" は削除オペレーターです。次に、"4l" や "w" のようなモーションコマンドを入力します。このようにして、移動できるテキストに対して操作できます。

04.2 テキストの変更

もう1つのオペレーターは "c"、変更です。これは "d" オペレーターとほぼ同じように動作しますが、Insert モードに入ります。例えば、"cw" は単語を変更します。より具体的に言うと、単語を削除し、Insert モードにします。
過ちは人の常
-------> c2wbe<Esc>
人間であること
この "c2wbe<Esc>" には次の要素が含まれています
c 変更オペレーター 2w 2単語移動 (削除され、Insert モードが開始) be このテキストを挿入 <Esc> Normal モードに戻る
奇妙なことに気づいたでしょう。"human" の前のスペースは削除されていません。"cw" コマンドの例は、シンプルで明確ですが、間違っているという答えがあるという格言があります。"c" オペレーターは "d" オペレーターとまったく同じように動作しますが、1つの例外があります。"cw" です。実際には、"ce" (単語の末尾まで変更) のように動作します。したがって、単語の後のスペースは含まれません。これは古い Vi にまでさかのぼる例外です。多くの人が慣れているため、この不整合は Vim に残っています。

その他の変更

"dd" が行全体を削除するように、"cc" は行全体を変更します。ただし、既存のインデント (先頭の空白) は保持されます。
"d$" が行末まで削除するように、"c$" は行末まで変更します。これは、テキストを削除するために "d$" を実行し、新しいテキストを追加するために "a" でInsert モードを開始するようなものです。

ショートカット

オペレーター-モーションコマンドの中には、頻繁に使用されるため、1文字のコマンドが割り当てられているものがあります
x は dl (カーソル下の文字を削除) を表す X は dh (カーソルの左の文字を削除) を表す D は d$ (行末まで削除) を表す C は c$ (行末まで変更) を表す s は cl (1文字変更) を表す S は cc (行全体を変更) を表す

カウントの場所

"3dw" と "d3w" はどちらも3単語を削除します。細かく言えば、最初の "3dw" は1単語を3回削除し、"d3w" は3単語を1回削除します。これは区別がない違いです。実際には、2つのカウントを入力できます。例えば、"3d2w" は2単語を3回繰り返して削除し、合計6単語を削除します。

1文字で置換

"r" コマンドはオペレーターではありません。文字の入力を待機し、カーソル下の文字をそれで置き換えます。"cl" や "s" コマンドでも同じことができますが、"r" の場合はInsert モードから抜けるために <Esc> を押す必要はありません。
ここに何かおかしい
rT rt rw
ここに何かおかしい
"r" でカウントを使用すると、その数だけ文字が同じ文字で置換されます。例
ここに何かおかしい
5rx
ここに xxxxx がある
文字を改行で置き換えるには、"r<Enter>" を使用します。これは1文字を削除し、改行を挿入します。ここでのカウントは、削除される文字数のみに適用されます。"4r<Enter>" は4文字を1つの改行で置き換えます。

04.3 変更の繰り返し

"." コマンドは、Vimで最もシンプルでありながら強力なコマンドの1つです。これは、最後の変更を繰り返します。例えば、HTMLファイルを編集していて、すべての <B> タグを削除したいとします。最初の < にカーソルを合わせ、"df>" コマンドで <B> を削除します。次に、次の < に移動します。
/B> そして "." コマンドを使って削除します。"." コマンドは、最後の変更コマンド (この場合は "df>") を実行します。別のタグを削除するには、カーソルを < に合わせ、"." コマンドを使用します。
<B>生成</B>する目次<B>
f< 最初の < を検索 ---> df> > まで削除 --> f< 次の < を検索 ---------> . df> を繰り返す ---> f< 次の < を検索 -------------> . df> を繰り返す -->
"." コマンドは、"u" (アンドゥ)、CTRL-R (リドゥ)、およびコロン (:) で始まるコマンドを除く、すべての変更に対して機能します。
別の例: 単語 "four" を "five" に変更したいとします。テキストに複数回表示されます。次のコマンドシーケンスでこれをすばやく実行できます。
/four<Enter> 最初の文字列 "four" を検索 cwfive<Esc> 単語を "five" に変更 n 次の "four" を検索 . "five" への変更を繰り返す n 次の "four" を検索 . 変更を繰り返す など

04.4 Visual モード

単純な項目を削除するには、オペレーター-モーションによる変更が非常に効果的です。しかし、変更したいテキスト上でどのコマンドが移動するかを判断するのは簡単ではありません。そんな時は、Visual モードが使えます。
"v" を押してVisual モードを開始します。操作したいテキスト上でカーソルを移動します。移動すると、テキストが強調表示されます。最後にオペレーターコマンドを入力します。例えば、単語の真ん中から別の単語の真ん中までを削除する場合
これはVisualモードのサンプルです
----------> velllld
これはVisualモードの例です
これを行う際、正しい位置に到達するために "l" を何回押す必要があるかを実際には数える必要はありません。 "d" を押すと、どのテキストが削除されるかをすぐに確認できます。
強調表示されたテキストを何も操作したくない場合は、いつでも <Esc> を押すと、何もせずにVisual モードが停止します。

行の選択

行全体を操作したい場合は、"V" を使用してVisual モードを開始します。カーソルを移動しなくても、行全体が強調表示されます。左右に移動しても何も変わりません。上下に移動すると、選択は一度に複数行に拡張されます。例えば、"Vjj" で3行を選択します
+------------------------+ | テキスト テキストを追加 | >> | テキストを追加 テキストを追加 | | 選択された行 >> | テキスト テキスト テキスト | | Vjj >> | テキスト 追加 | V | テキストを追加 テキストを追加 | +------------------------+

ブロックの選択

文字の長方形のブロックを操作したい場合は、CTRL-V を使用してVisual モードを開始します。これは、テーブルを操作する際に非常に便利です。
名前 Q1 Q2 Q3 pierre 123 455 234 john 0 90 39 steve 392 63 334
真ん中の "Q2" 列を削除するには、カーソルを "Q2" の "Q" に移動します。CTRL-V を押して、ブロックワイズVisual モードを開始します。次に、"3j" でカーソルを3行下に移動し、"w" で次の単語に移動します。最後の列の最初の文字が含まれていることがわかります。除外するには、"h" を使用します。次に、"d" を押すと、真ん中の列が削除されます。

反対側へ移動する

Visual モードでテキストを選択し、選択のもう一方の端を変更する必要があることに気づいた場合は、"o" コマンドを使用します (ヒント: o は反対側の端の o)。カーソルがもう一方の端に移動し、カーソルを移動して選択の開始位置を変更できます。"o" を再度押すと、もう一方の端に戻ります。
ブロックワイズ選択を使用する場合、4つの角があります。"o" は、他の角の1つに斜めに移動するだけです。"O" を使用して、同じ行のもう一方の角に移動します。
Visual モードでの "o" および "O" は、Normal モードでの動作とは大きく異なり、カーソルの下または上に新しい行を開きます。

04.5 テキストの移動

"d"、"x"、またはその他のコマンドで何かを削除すると、そのテキストが保存されます。"p" コマンドを使用すると、そのテキストを貼り付けることができます。(Vimでのこの名前は「put」です)。これがどのように機能するかを見てみましょう。まず、削除したい行にカーソルを合わせて "dd" と入力して、行全体を削除します。次に、行を配置したい場所にカーソルを移動し、"p" (put) コマンドを使用します。行がカーソルの下の行に挿入されます。
行 行 行 2行目 dd 3行目 p 3行目 3行目 2行目
行全体を削除したため、"p" コマンドはテキストを行をカーソルの下に配置しました。行の一部 (例えば単語) を削除した場合、"p" コマンドはカーソルの直後にそれを配置します。
退屈なテキストコマンドを試してみましょう。
----> dw
退屈なテキストコマンドを試してみましょう。
-------> welp
退屈なテキストを試してみてコマンド。

PUTTINGの詳細

"P" コマンドは "p" のようにテキストを配置しますが、カーソルの前に配置します。"dd" で行全体を削除した場合、"P" はカーソルの上にそれを戻します。"dw" で単語を削除した場合、"P" はカーソルの直前にそれを戻します。
好きなだけputを繰り返すことができます。同じテキストが使用されます。
"p"と"P"にはカウントを指定できます。テキストは、カウントで指定された回数だけ繰り返されます。したがって、"dd"を実行してから"3p"を実行すると、削除した行のコピーが3つ挿入されます。

2つの文字を入れ替える

タイプしていると、指が脳よりも先に行き過ぎる(またはその逆?)ことがよくあります。その結果、「the」を「teh」とタイプミスすることがあります。Vimでは、このような問題を簡単に修正できます。「teh」の「e」にカーソルを合わせ、「xp」コマンドを実行します。これは次のように動作します。「x」は文字「e」を削除し、レジスタに配置します。「p」は、カーソルの後ろ、つまり「h」の後ろにテキストを挿入します。
teh th the
x p

04.6 テキストのコピー

ある場所から別の場所にテキストをコピーするには、テキストを削除し、"u"で削除を元に戻してから、"p"で別の場所に挿入する方法が考えられます。より簡単な方法があります。ヤンクです。"y"オペレーターは、テキストをレジスタにコピーします。その後、"p"コマンドを使用して挿入できます。ヤンクは、Vimにおけるコピーの別名です。"c"という文字は既に変更オペレーターに使用されており、"y"はまだ使用可能でした。このオペレーターを「ヤンク」と呼ぶことで、「y」キーを使用することを覚えやすくしました。
"y"はオペレーターなので、単語をヤンクするには"yw"を使用します。カウントも通常通り可能です。2つの単語をヤンクするには、"y2w"を使用します。例
let sqr = LongVariable *
--------------> y2w
let sqr = LongVariable *
p
let sqr = LongVariable * LongVariable
"yw"には、単語の後の空白が含まれることに注意してください。これが不要な場合は、"ye"を使用します。
"yy"コマンドは、"dd"が1行全体を削除するのと同じように、1行全体をヤンクします。
テキスト行 yy テキスト行 テキスト行 行2 行2 p 行2 最後の行 最後の行 テキスト行 最後の行
"Y"は元々、「行全体をヤンクする」という意味でしたが、「D」は「行末まで削除する」という意味です。"Y"は、「行末までヤンクする」という意味に再マップされ、「D」の動作と一貫性を持たせました。マッピングについては、後の章で説明します。

04.7 クリップボードの使用

VimのGUIバージョン(gvim)を使用している場合は、「編集」メニューに「コピー」項目があります。まず、Visualモードでテキストを選択し、次に「編集/コピー」メニュー項目を使用します。選択したテキストがクリップボードにコピーされます。他のプログラムにもテキストを貼り付けることができます。Vim自体にもです。
別のアプリケーションでクリップボードにコピーしたテキストがある場合は、「編集/貼り付け」メニュー項目を使用してVimに貼り付けることができます。これは、ノーマルモードと挿入モードで動作します。Visualモードでは、選択したテキストが貼り付けたテキストに置き換えられます。
「切り取り」メニュー項目は、テキストをクリップボードに置く前に削除します。「コピー」、「切り取り」、および「貼り付け」項目は、ポップアップメニューにもあります(もちろん、ポップアップメニューがある場合のみ)。Vimにツールバーがある場合は、そこにもこれらの項目があります。
GUIを使用していない場合、またはメニューの使用が嫌いな場合は、別の方法を使用する必要があります。通常の「y」(ヤンク)および「p」(貼り付け)コマンドを使用しますが、その前に「*(二重引用符とアスタリスク)」を付加します。1行をクリップボードにコピーするには
"*yy
クリップボードからテキストをテキストに戻すには
"*p
これは、クリップボードサポートを含むバージョンのVimでのみ機能します。クリップボードの詳細については、セクション09.3とこちらをご覧ください:clipboard

04.8 テキストオブジェクト

カーソルが単語の真ん中にあり、その単語を削除したい場合は、"dw"を実行する前に、カーソルを単語の先頭に戻す必要があります。これを行う簡単な方法があります。"daw"です。
これはいくつかの例のテキストです。
daw
これはいくつかのテキストです。
"daw"の"d"は削除オペレーターです。"aw"はテキストオブジェクトです。ヒント:"aw"は「A Word」の略です。したがって、"daw"は「単語を削除する」です。正確には、単語の後の空白も削除されます(または、行末にある場合は単語の前の空白)。
テキストオブジェクトを使用することは、Vimで変更を行うための3番目の方法です。オペレーター移動とVisualモードはすでにありました。次に、オペレーターテキストオブジェクトを追加します。これはオペレーター移動に非常によく似ていますが、移動コマンドの前後のカーソル位置の間のテキストを操作する代わりに、テキストオブジェクト全体が使用されます。カーソルがオブジェクトのどこにあるかは関係ありません。
文全体を変更するには、"cis"を使用します。このテキストを見てください。
こんにちは。 これ
は例です。 ただ
いくつかのテキスト。
2行目の先頭、「is an」に移動します。次に、"cis"を使用します。
こんにちは。 ただ
いくつかのテキスト。
カーソルは最初の行の空白の間にあります。ここで、新しい文「別の行。」を入力します。
こんにちは。 別の行。 ただ
いくつかのテキスト。
"cis"は、"c"(変更)オペレーターと"is"テキストオブジェクトで構成されます。これは「Inner Sentence」の略です。「as」(「A Sentence」)オブジェクトもあります。違いは、"as"には文の後の空白が含まれ、"is"には含まれないことです。文を削除する場合は、同時に空白も削除したいため、"das"を使用します。新しいテキストを入力する場合は、空白を残すことができるため、"cis"を使用します。
Visualモードでテキストオブジェクトを使用することもできます。Visual選択にテキストオブジェクトが含まれます。Visualモードは継続するため、これを数回実行できます。たとえば、"v"でVisualモードを開始し、"as"で文を選択します。これで、"as"を繰り返して、より多くの文を含めることができます。最後に、オペレーターを使用して選択した文で何かを行います。
テキストオブジェクトの長いリストは、こちらにあります:text-objects

04.9 置換モード

"R"コマンドを使用すると、Vimが置換モードになります。このモードでは、入力した各文字がカーソルの下にある文字を置き換えます。これは<Esc>を入力するまで続きます。この例では、「text」の最初の「t」で置換モードを開始します。
これはテキストです。
R興味深い。<Esc>
これは興味深いです。
このコマンドでは、行の5文字が12文字に置き換えられたことに気づいたかもしれません。「R」コマンドは、置き換える文字がなくなると、自動的に行を拡張します。次の行に継続することはありません。
<Insert>キーを使用すると、挿入モードと置換モードを切り替えることができます。
<BS>(バックスペース)を使用して修正を行うと、古いテキストが元に戻ることに気づくでしょう。したがって、これは以前に入力した文字の取り消しコマンドのように機能します。

04.10 まとめ

オペレーター、移動コマンド、テキストオブジェクトを使用すると、多数の組み合わせを作成できます。これらの動作がわかったので、N個のオペレーターとM個の移動コマンドを使用して、N * M個のコマンドを作成できます!
オペレーターのリストは、こちらにあります:operator
たとえば、テキストの一部を削除する方法は他にもたくさんあります。以下にいくつかの一般的なものを紹介します。
x カーソル下の文字を削除する("dl"の短縮形) X カーソル前の文字を削除する("dh"の短縮形) D カーソルから行末まで削除する("d$"の短縮形) dw カーソルから次の単語の先頭まで削除する db カーソルから前の単語の先頭まで削除する diw カーソル下の単語を削除する(空白を除く) daw カーソル下の単語を削除する(空白を含む) dG ファイルの末尾まで削除する dgg ファイルの先頭まで削除する
"d"の代わりに"c"を使用すると、変更コマンドになります。そして、"y"を使用すると、テキストをヤンクします。などなど。
変更を加えるための、他の場所には当てはまらないいくつかの一般的なコマンドがあります。
~ カーソル下の文字の大文字と小文字を切り替え、カーソルを次の文字に移動します。これはオペレーターではありません('tildeop'が設定されていない限り)。したがって、移動コマンドで使用することはできません。Visualモードでは機能し、選択したすべてのテキストの大文字と小文字を切り替えます。
I カーソルを行の最初の空白以外の文字に移動した後、挿入モードを開始します。
A カーソルを行末に移動した後、挿入モードを開始します。
次の章:usr_05.txt 設定をする
著作権:manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンドインデックス
クイックリファレンス