Usr_03

Nvim の:helpページ。 生成されたもので、 ソースtree-sitter-vimdoc パーサーを使用して生成されています。


VIM ユーザーマニュアル - Bram Moolenaar 著
カーソルの移動
テキストの挿入や削除を行う前に、カーソルを正しい位置に移動する必要があります。Vimには、カーソルの位置を調整するための多くのコマンドがあります。この章では、最も重要なコマンドの使い方を説明します。これらのコマンドの一覧は、下記の Q_lr を参照してください。
03.1 ワード単位の移動 03.2 行頭または行末への移動 03.3 特定の文字への移動 03.4 括弧の対応位置への移動 03.5 特定の行への移動 03.6 現在位置の確認 03.7 スクロール 03.8 簡単な検索 03.9 簡単な検索パターン 03.10 マーカーの使用
次の章: usr_04.txt 小さな変更を行う 前の章: usr_02.txt Vim の最初のステップ 目次: usr_toc.txt

ワード単位の移動

"w"コマンドを使用すると、カーソルを1ワード分前に移動できます。ほとんどのVimコマンドと同様に、数値プレフィックスを使用して複数のワードを移動できます。たとえば、「3w」は3ワード分移動します。図にその動作を示します(「x」でマークされた位置から開始します)。
これは、例として示すテキストを含む行です。
x-->-->->-----------------> w w w 3w
"w"は、既に単語の先頭にある場合、次の単語の先頭に移動することに注意してください。"b"コマンドは、前の単語の先頭に後方に移動します。
これは、例として示すテキストを含む行です。
<----<--<-<---------<--x b b b 2b b
また、次の単語の末尾に移動する"e"コマンドと、前の単語の末尾に移動する"ge"コマンドもあります。
これは、例として示すテキストを含む行です。
<----<----x---->------------> 2ge ge e 2e
行の最後の単語にいる場合、「w」コマンドは次の行の最初の単語に移動します。したがって、これを用いると「l」を使用するよりもはるかに高速に段落を移動できます。「b」は反対方向に同じ動作をします。
単語は「。」、「-」、または「)」などの非単語文字で終わります。Vimで単語と見なすものを変更するには、'iskeyword' オプションを参照してください。ヘルプ内で直接これを実行しようとすると、例が機能するためには 'iskeyword' をリセットする必要があります。
:set iskeyword&
空白で区切られたWORD単位で移動することもできます。これは通常の単語ではないため、大文字を使用しています。WORD単位で移動するコマンドも大文字になります。図に示すとおりです。
ge b w e <- <- ---> --->
これは、特別な/区切られた/単語(およびその他いくつか)を含む行です。
<----- <----- --------------------> -----> gE B W E
小文字と大文字のコマンドを組み合わせることで、段落を前後にすばやく移動できます。

03.2 行頭または行末への移動

"$"コマンドは、カーソルを行末に移動します。キーボードに<End>キーがある場合、同じ動作をします。
"^"コマンドは、行の最初の非空白文字に移動します。"0"コマンド(ゼロ)は行の一番最初の文字に移動し、<Home>キーも同じ動作をします。図で示すと(「。」はスペースを示します)。
^ <-----------x
.....これは、例として示すテキストを含む行です。
<----------------x x--------------> 0 $
(「.....」はここで空白を示します)
"$"コマンドは、ほとんどの移動コマンドと同様にカウントを取ります。しかし、行末に複数回移動しても意味がありません。そのため、エディターは別の行の末尾に移動します。たとえば、「1$」は最初の行(現在いる行)の末尾に、「2$」は次の行の末尾に移動します。以降も同様です。"0"コマンドはカウント引数を取りません。なぜなら「0」がカウントの一部になるからです。" ^ "にカウントを使うと、予期せぬことに何も効果がありません。

03.3 特定の文字への移動

最も便利な移動コマンドの1つは、1文字検索コマンドです。"fx"コマンドは、行内で単一の文字xを前方検索します。ヒント:「f」は「Find(検索)」を表します。たとえば、次の行の先頭にいます。 "human"の"h"に移動したいとします。"fh"コマンドを実行するだけで、カーソルは"h"の上に配置されます。
To err is human. To really foul up you need a computer.
---------->---------------> fh fy
これにより、「fy」コマンドが「really」の末尾に移動することも示されています。カウントを指定できるため、「3fl」で「foul」の「l」に移動できます。
To err is human. To really foul up you need a computer.
---------------------> 3fl
"F"コマンドは左方向に検索します。
To err is human. To really foul up you need a computer.
<--------------------- Fh
"tx"コマンドは"fx"コマンドと同様に機能しますが、検索文字の手前1文字で停止します。ヒント:「t」は「To(〜まで)」を表します。このコマンドの後方版は「Tx」です。
To err is human. To really foul up you need a computer.
<------------ -------------> Th tn
これらの4つのコマンドは「;」で繰り返すことができます。「,」は反対方向に繰り返します。カーソルは別の行に移動することはありません。文が続いている場合でも同様です。
検索を開始したものの、間違ったコマンドを入力したことに気付く場合があります。たとえば、後方検索のために「f」を入力したものの、実際には「F」を意味していたことに気付いたとします。検索を中止するには、<Esc>を押します。「f<Esc>」は中断された前方検索であり、何も実行しません。注記:<Esc>は、検索だけでなく、ほとんどの操作をキャンセルします。

03.4 括弧の対応位置への移動

プログラムを作成する際には、多くの場合、入れ子になった()構造が作成されます。そのような場合、「%」コマンドは非常に便利です。対応する括弧に移動します。カーソルが「(」上にある場合、「)」に移動します。カーソルが「)」上にある場合、「(」に移動します。
% <----->
if (a == (b * c) / d)
<----------------> %
これは、[]と{}のペアにも機能します。(これは、'matchpairs' オプションで定義できます。)
カーソルが有用な文字上にない場合、「%」は前方検索して1つを見つけます。したがって、カーソルが前の例の行の先頭にある場合、「%」は前方検索して最初の「(」を見つけます。次に、その対応する括弧に移動します。
if (a == (b * c) / d)
---+----------------> %
コードを移動する他の方法は、usr_29.txtにあります。

03.5 特定の行への移動

CまたはC++プログラマーであれば、次のようなエラーメッセージをよく目にします。
prog.c:33: j undeclared (first use in this function)
これは、33行目を修正する必要があることを示しています。では、33行目を見つけるにはどうすればよいでしょうか?1つの方法は、「9999k」を実行してファイルの先頭に移動し、「32j」を実行して32行下へ移動することです。良い方法ではありませんが、機能します。はるかに良い方法は、「G」コマンドを使用することです。カウントを指定すると、このコマンドは指定された行番号の位置にカーソルを移動します。たとえば、「33G」は33行目に移動します。(コンパイラのエラーリストをより適切に確認する方法は、usr_30.txt(:makeコマンドに関する情報)を参照してください。)引数を指定しないと、「G」はファイルの末尾にカーソルを移動します。ファイルの先頭に移動する簡単な方法は「gg」を使用することです。「1G」も同じ動作をしますが、少しだけ入力が増えます。
| ファイルの最初の行 ^ | テキスト テキスト テキスト テキスト | | テキスト テキスト テキスト テキスト | gg 7G | テキスト テキスト テキスト テキスト | | テキスト テキスト テキスト テキスト | テキスト テキスト テキスト テキスト V テキスト テキスト テキスト テキスト | テキスト テキスト テキスト テキスト | G テキスト テキスト テキスト テキスト | ファイルの最後の行 V
行に移動する別の方法は、「%」コマンドとカウントを使用することです。たとえば、「50%」はファイルの中央に、「90%」はファイルのほぼ最後に移動します。
上記は、現在表示されているかどうかに関係なく、ファイル内の行に移動することを前提としています。表示されている行の1つに移動したい場合はどうでしょうか?この図は、使用できる3つのコマンドを示しています。
+---------------------------+ H --> | テキストサンプルテキスト | | サンプルテキスト | | テキストサンプルテキスト | | サンプルテキスト | M --> | テキストサンプルテキスト | | サンプルテキスト | | テキストサンプルテキスト | | サンプルテキスト | L --> | テキストサンプルテキスト | +---------------------------+
ヒント:「H」はHome(先頭)、「M」はMiddle(中央)、「L」はLast(最後)を表します。あるいは、「H」はHigh(上)、「M」はMiddle(中央)、「L」はLow(下)を表すこともできます。

03.6 現在位置の確認

ファイル内の現在位置を確認するには、3つの方法があります。
1. CTRL-Gコマンドを使用します。'ruler'オプションがオフの場合、次のようなメッセージが表示されます。
"usr_03.txt" line 233 of 650 --35%-- col 45-52
これにより、編集しているファイル名、カーソルがある行番号、行の総数、ファイル内の割合、カーソルの列が表示されます。分割された列番号が表示される場合があります。たとえば、「col 2-9」です。これは、カーソルが2番目の文字に配置されていることを示していますが、1番目の文字がタブであり、8スペース分の列を占めているため、画面の列は9になります。
2. 'number'オプションを設定します。これにより、各行の前に行番号が表示されます。
:set number
これをオフにするには
:set nonumber
'number'はブール値のオプションであるため、「no」をその名前に付けることでオフにすることができます。ブール値のオプションには、オンとオフの2つの値しかありません。Vimには多くのオプションがあります。ブール値のオプション以外にも、数値値を持つオプションと文字列オプションがあります。これらは使用される場所で例を示します。
3. 'ruler'オプションを設定します。これにより、Vimウィンドウの右下隅にカーソル位置が表示されます。
:set ruler
'ruler'オプションを使用する利点は、あまりスペースを取らないため、テキストのためのスペースが増えることです。

03.7 スクロール

CTRL-Uコマンドは、テキストを半画面分下へスクロールします。テキストを見て、そのビューウィンドウをウィンドウの高さの半分だけ上に移動するイメージです。したがって、ウィンドウはテキストの上を上に移動し、ファイル内では後ろに移動します。どちらの端が上かを覚えるのに苦労しても心配しないでください。ほとんどのユーザーが同じ問題を抱えています。CTRL-Dコマンドは、ファイル内でビューウィンドウを半画面分下へ移動し、テキストを半画面分上へスクロールします。
+----------------+ | いくつかのテキスト | | いくつかのテキスト | | いくつかのテキスト | +---------------+ | いくつかのテキスト | | いくつかのテキスト | CTRL-U --> | | | | | 123456 | | 123456 | +----------------+ | 7890 | | | +----------------+ | 例 | CTRL-D --> | 7890 | +---------------+ | | | 例 | | 例 | | 例 | | 例 | +----------------+
1行ずつスクロールするには、CTRL-E(上スクロール)とCTRL-Y(下スクロール)を使用します。CTRL-Eは、1行分Extra(追加)することを想像してください。(MS-Windows互換のキーマッピングを使用している場合、CTRL-Yは変更のやり直しになり、スクロールしません。)
画面全体(2行を除く)を前方にスクロールするには、CTRL-Fを使用します。後方にスクロールするには、CTRL-Bを使用します。これは覚えやすいでしょう:FはForward(前方)、BはBackward(後方)です。
よくある問題として、「j」で多くの行を下に移動した後、カーソルが画面の一番下にくることがあります。カーソルのある行のコンテキストを見たい場合、「zz」コマンドを使用します。
+------------------+ +------------------+ | 前のテキスト | | 前のテキスト | | 前のテキスト | | 前のテキスト | | 前のテキスト | | 前のテキスト | | 前のテキスト | zz --> | カーソルのある行 | | 前のテキスト | | 後のテキスト | | 前のテキスト | | 後のテキスト | | カーソルのある行 | | 後のテキスト | +------------------+ +------------------+
「zt」コマンドはカーソル行を上に、「zb」コマンドはカーソル行を下に移動します。スクロールコマンドは他にもいくつかあります。Q_scを参照してください。カーソルの周囲に常に数行のコンテキストを維持するには、'scrolloff'オプションを使用します。

03.8 簡単な検索

文字列を検索するには、「/文字列」コマンドを使用します。例えば、「include」という単語を見つけるには、次のコマンドを使用します。
/include
「/」を入力すると、コロンコマンドの場合と同様に、カーソルがVimウィンドウの最終行にジャンプすることに気付くでしょう。そこで単語を入力します。バックスペースキー(左矢印または<BS>)を押して修正できます。必要に応じて、<Left><Right>カーソルキーを使用します。<Enter>を押すとコマンドが実行されます。
注意:文字 .*[]^%/\?~$ は特別な意味を持ちます。検索で使用したい場合は、前にバックスラッシュ \ を付ける必要があります。以下を参照してください。
同じ文字列の次の出現箇所を見つけるには、「n」コマンドを使用します。カーソル以降の最初の「#include」を見つけるには、
/#include
そして「n」を数回入力します。テキスト内の各「#include」に移動します。目的のマッチが分かっている場合は、カウントを使用することもできます。「3n」は3番目のマッチを見つけます。「/」にもカウントを使用できます。「4/the」は「the」の4番目のマッチに移動します。
「?」コマンドは「/」と同様に機能しますが、逆方向に検索します。
?word
「N」コマンドは、最後の検索を逆方向に繰り返します。したがって、「/」コマンドの後に「N」を使用すると逆方向に検索され、「?」コマンドの後に「N」を使用すると順方向に検索されます。

大文字と小文字の区別を無視する

通常、見つけたいものを正確に入力する必要があります。単語の大文字と小文字を区別しない場合は、'ignorecase'オプションを設定します。
:set ignorecase
これで「word」を検索すると、「Word」や「WORD」にも一致するようになります。再び大文字と小文字を区別する場合は
:set noignorecase

履歴

3つの検索を行うとします。
/one
/two
/three
<Enter>を押さずに単純な「/」を入力して検索を始めましょう。<Up>(カーソルキー)を押すと、Vimはコマンドラインに「/three」を置きます。この時点で<Enter>を押すと、「three」が検索されます。<Enter>を押さずに代わりに<Up>を押すと、Vimはプロンプトを「/two」に変更します。さらに<Up>を押すと「/one」に移動します。<Down>カーソルキーを使用して、逆方向に検索コマンドの履歴を移動することもできます。
以前に使用したパターンの先頭が何か分かっている場合、それを再利用するには、<Up>を押す前にその文字を入力します。前の例では、「/o<Up>」と入力すると、Vimはコマンドラインに「/one」を置きます。
「:」で始まるコマンドにも履歴があります。これにより、以前のコマンドを呼び出して再度実行できます。これらの2つの履歴は別々です。
テキスト内の単語の検索
テキストに「TheLongFunctionName」という単語が表示され、その次の出現箇所を見つけたいとします。「/TheLongFunctionName」と入力できますが、これは入力が多いです。間違いをするとVimは見つけられません。より簡単な方法があります。カーソルを単語に置き、「*」コマンドを使用します。Vimはカーソル下の単語を取得して検索文字列として使用します。「#」コマンドは逆方向に同じことを行います。カウントを前に付けることができます。「3*」はカーソル下の単語の3番目の出現箇所を検索します。

単語全体の検索

「/the」と入力すると、「there」にも一致する可能性があります。「the」で終わる単語だけを見つけるには、
/the\>
「\>」は、単語の終わりにのみ一致する特別なマーカーです。同様に「\<」は単語の先頭でのみ一致するマーカーです。したがって、「the」という単語だけを検索するには
/\<the\>
これは「there」や「soothe」には一致しません。「*」と「#」コマンドは、単語全体の検索にこれらの単語の先頭と末尾のマーカーを使用します(部分一致を行うには「g*」と「g#」を使用できます)。

一致箇所の強調表示

プログラムの編集中に「nr」という変数が見つかりました。それがどこで使用されているかを確認したいとします。「nr」にカーソルを移動して「*」コマンドを使用し、「n」を押してすべての一致箇所に移動できます。
Vimはすべての一致箇所にハイライトを付けます。これは、コマンドを入力する必要なく、変数がどこで使用されているかを確認する非常に良い方法です。これをオフにするには
:set nohlsearch
次に、次の検索コマンドで使用する場合、再びオンにする必要があります。
:set hlsearch
ハイライトだけを削除する場合は、次のコマンドを使用します。
:nohlsearch
これはオプションをリセットしません。代わりに、ハイライトを無効にします。検索コマンドを実行するとすぐに、ハイライトが再び使用されます。「n」コマンドと「N」コマンドでも同様です。

検索の調整

検索の動作を変更するオプションがいくつかあります。重要なものは次のとおりです。
:set nowrapscan
これにより、ファイルの終わりで検索が停止します。または、逆方向に検索している場合は、ファイルの先頭で検索が停止します。'wrapscan'オプションはデフォルトでオンになっているため、検索はファイルの終わりを回り込みます。
:set noincsearch
これにより、検索文字列を入力している間の一致箇所の表示が無効になります。

インターメッツォ

前述のオプションのいずれかを気に入っており、Vimを使用するたびに設定する場合は、そのコマンドをVimの起動ファイルに配置できます。例えば、
:edit ~/.config/nvim/init.vim
次に、Vimで入力したのと同じように、オプションを設定するコマンドを含む行を追加します。例
Go:set hlsearch<Esc>
「G」はファイルの最後に移動します。「o」は新しい行を開始し、そこで「:set」コマンドを入力します。挿入モードは<Esc>で終了します。次に、ファイルを保存して閉じます。
ZZ
これでVimを再度起動すると、'hlsearch'オプションが既に設定されています。

03.9 簡単な検索パターン

Vimエディターは、検索対象を指定するために正規表現を使用します。正規表現は、検索パターンを指定するための非常に強力でコンパクトな方法です。残念ながら、このパワーには代償があり、正規表現の指定は少し複雑です。このセクションでは、いくつかの重要なものだけを説明します。検索パターンとコマンドの詳細については、第27章usr_27.txtを参照してください。完全な説明はこちらにあります。pattern.
行の先頭と行の終わり
^文字は行の先頭に一致します。米国英語キーボードでは、6の上にあります。「include」パターンは行内のどこかに「include」という単語に一致します。しかし、「^include」パターンは、「include」という単語が行の先頭にある場合にのみ一致します。「$」文字は行の終わりに一致します。したがって、「was$」は「was」という単語が行の終わりにある場合にのみ一致します。
この例では、「/the」に一致する箇所に「x」を付けます。
the solder holding one of the chips melted and the
xxx xxx xxx
「/the$」を使用して、この一致を見つけます。
the solder holding one of the chips melted and the
xxx
そして、「/^the」でこれを見つけます。
the solder holding one of the chips melted and the
xxx
「/^the$」で検索してみてください。「the」だけで構成される行にのみ一致します。空白文字はここで重要です。したがって、行に単語の後に空白文字がある場合(「the 」など)、パターンは一致しません。

任意の1文字に一致する

「.」 (ドット) 文字は、存在する任意の文字に一致します。例えば、「c.m」パターンは、最初の文字がc、2番目の文字が任意の文字、3番目の文字がmである文字列に一致します。例
We use a computer that became the cummin winter.
xxx xxx xxx

特殊文字に一致する

ドットに本当に一致させたい場合は、その特別な意味を回避するために、前にバックスラッシュを付ける必要があります。「ter.」を検索すると、次のマッチが見つかります。
We use a computer that became the cummin winter.
xxxx xxxx
「ter\.」を検索すると、2番目のマッチのみが見つかります。

03.10 マーカーの使用

「G」コマンドで位置にジャンプすると、Vimはジャンプ前の位置を記憶します。この位置はマーカーと呼ばれます。来た場所に戻るには、次のコマンドを使用します。
``
これはバッククォートまたは左シングルクォート文字です。同じコマンドを2回目に使用すると、再びジャンプします。これは「`」コマンド自体がジャンプであり、ジャンプ前の位置が記憶されているためです。
一般的に、同じ行内よりも遠くまでカーソルを移動できるコマンドを実行するたびに、ジャンプと呼ばれます。これには検索コマンド「/」と「n」が含まれます(一致がどれだけ離れていても関係ありません)。しかし、「fx」や「tx」などの文字検索や「w」や「e」などの単語移動は含まれません。「j」と「k」も、カウントを使用してかなり離れた場所にカーソルを移動する場合でも、ジャンプとは見なされません。
「``」コマンドは2点間を前後にジャンプします。「CTRL-O」コマンドは古い位置にジャンプします(ヒント:OはOlderの頭文字)。「CTRL-I」は新しい位置にジャンプします(ヒント:多くの一般的なキーボードレイアウトでは、IはOのすぐ隣にあります)。次のコマンドシーケンスを考えてみてください。
33G
/^The
CTRL-O
最初に33行目にジャンプし、次に「The」で始まる行を検索します。次に「CTRL-O」を使用して33行目にジャンプします。もう1回「CTRL-O」を使用すると、開始位置に戻ります。ここで「CTRL-I」を使用すると、再び33行目にジャンプします。そして「The」の一致箇所に「CTRL-I」でジャンプします。
| 例のテキスト ^ | 33G | 例のテキスト | CTRL-O | CTRL-I | 例のテキスト | | V 33行目のテキスト ^ V | 例のテキスト | | /^The | 例のテキスト | CTRL-O | CTRL-I V そこにあります | V 例のテキスト
注意:CTRL-I<Tab>と同じです。
「:jumps」コマンドは、ジャンプした位置のリストを表示します。最後に使用したエントリには「>」が表示されます。

名前付きマーカー bookmark

Vimでは、テキスト内に独自のマークを置くことができます。「ma」コマンドは、カーソル下の位置をマークaとしてマークします。テキスト内には26個のマーク(a~z)を置くことができます。これらのマークは目に見えません。Vimが記憶する位置情報です。マークに移動するには、「{mark}」コマンドを使用します。ここで{mark}はマーク文字です。したがって、aマークに移動するには
`a
「'mark」(シングルクォーテーションマーク、またはアポストロフィ)コマンドは、マークを含む行の先頭に移動します。これは、「`mark」コマンドとは異なり、マークされた列にも移動します。
ファイル内の2つの関連部分で作業する場合、マークは非常に役立ちます。ファイルの先頭付近にあるテキストを見て、ファイルの末尾付近にあるテキストで作業する必要があるとします。先頭のテキストに移動し、そこにs(開始)マークを置きます。
ms
次に、作業するテキストに移動し、そこにe(終了)マークを置きます。
me
これで自由に移動できます。ファイルの先頭を見たいときは、これを使ってそこにジャンプします。
's
その後、''を使用して元の位置に戻るか、'eを使用して最後に作業していたテキストにジャンプできます。sを始点に、eを終点に使用することに特別な意味はありません。単に覚えやすいからです。
このコマンドを使用して、マークの一覧を取得できます。
:marks
いくつかの特別なマークに気付くでしょう。これらには以下が含まれます。
' ジャンプする前のカーソル位置 " ファイルを最後に編集したときのカーソル位置 [ 最後の変更の開始 ] 最後の変更の終了
次の章: usr_04.txt 小さな変更を加える
著作権: manual-copyrightを参照してください vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンド索引
クイックリファレンス