1. 概要

Vim は、人気のある強力なテキストエディタです。 さまざまな種類のテキスト編集操作を効率的に実行するのに役立つ多くの優れた機能をサポートしています。

このチュートリアルでは、Vimレジスタを詳しく見ていきます。

2. Vimレジスタの紹介

2.1. Vimレジスタとは何ですか?

通常のVimユーザーとして、「Vimレジスタ」という用語について聞いたことがないかもしれません。 しかし、おそらく、私たちはすでに何度もレジスターを使用していますが、それを認識していませんでした。

すでに何度も使用しているレジスタの使用例を見てみましょう。コピーして貼り付けます。

Vimでは、テキストをコピー/ヤンク( y )して、他の場所に貼り付ける( p )ことができることを知っています。 copy / yankコマンドを実行すると、コピーされたテキストがレジスタ(名前のないレジスタ “” )に格納されます。 後で貼り付けコマンドを実行すると、名前のないレジスタの内容が読み取られて貼り付けられます。

Vimレジスタは、Vimがテキストや操作の詳細を保存するために使用するメモリ内のスペースです。 これらの各スペースには、後でアクセスできるように識別子があります。

Vimレジスタを参照する場合は、二重引用符の後にレジスタ名を使用します。たとえば、「a は、Vimレジスタaおよび[ X170X]“:は、 Vimレジスタ:を意味します。

実際、レジスタはVimのいたるところで使用されています。 Vimレジスタの一般的な使用法の例をいくつか見てみましょう。

  • たとえば、 x コマンドを使用してテキストを削除すると、削除されたテキストは名前のないレジスタ「」に保存されます。
  • VimでExコマンド(:Command )を実行すると、レジスタ“:がコマンドを保持します
  • / somePattern でテキストを検索すると、検索パターンは“/レジスタに格納されます。

2.2. 通常モードでVimレジスタのコンテンツを取得する

Vimノーマルモードでは、「xp」を使用してレジスタxの内容を貼り付けることができます。レジスタを指定しない場合、名前のないレジスタ「」の内容が貼り付けられます。 レジスターの内容を貼り付ける方法を理解するための簡単な例を見てみましょう。

Vimエディターを開いて、テキストを1行入力してみましょう。

Vim is a powerful editor.

まず、 Normal モードで、最後の単語「 editor 」にカーソルを移動し、 yow を押して、単語エディターを名前のないレジスタにヤンクします。 ]“”

次に、カーソルを空の行に移動し、レジスタ名を指定せずにpを押します。 ヤンクされたテキスト「editor」が貼り付けられているのがわかります。

次に、:s / powerful / wonderful / [enter] と入力して、「powerful」を「wonderful」に置き換えるコマンドを実行します。 その後、コマンドは“:レジスタに格納されます。

したがって、“:p を使用して、このレジスタの内容を貼り付けることができます。

簡単なデモでpコマンドの使用法を見てみましょう。

2.3. InsertモードでVimレジスタのコンテンツを取得する

Insert モードでレジスターの内容を取得したい場合は、「Ctrl-r」に続けてレジスターの名前を押すことができます。

たとえば、 “:の内容を Insert モードで登録したい場合は、「 Ctrl-r」と「:[ X131X]”。

繰り返しになりますが、デモでそれを行う方法を見てみましょう。

2.4. コマンドモードでVimレジスタのコンテンツを取得する

さらに、:registers (または短縮形:reg )コマンドを使用して、Vimレジスタの値を確認できます。

レジスタ名を指定しない場合、:reg コマンドは、すべてのレジスタとその内容、およびレジスタが書き込まれている場合は内容のタイプを一覧表示します。

:reg
Type Name Content
  c  ""    editor
  c  "0    editor
  l  "1   ...
  b  "2   ...
  b  "3    ^J ^J ^J
  b  "4   3. ^J7. ^J9. ^J10.
...
  c  ":   s/powerful/wonderful/    

上記の出力で、 Type 列は、コンテンツのタイプを意味します。 3つの異なる値が含まれる場合があります。

  • c –文字ごとのテキスト
  • l –行方向のテキスト
  • b –ブロック単位のテキスト

Vimの3つのテキスト選択タイプを参照します。 レジスタの内容を貼り付ける場合、内容の種類によって改行の制御が異なります。

:reg コマンドにレジスタ名を渡して、特定のレジスタを一覧表示するように指示することもできます。

:reg 0 : "                         
Type Name Content
  c  ""    editor
  c  "0    editor
  c  ":   s/powerful/wonderful/

2.5. Vimレジスタの種類

これまで、名前のないレジスタ“” と、最後に実行されたコマンドを保持するレジスタ“:の例を見てきました。 これらは2つの異なるレジスタタイプです。

Vimには10種類のレジスタがあります

  1. 名前のないレジスタ「」
  2. 26名前付きレジスタ“aから“z(または “Aから“Z)
  3. 小さな削除レジスタ“-
  4. 10個の番号付きレジスタ“0から“9
  5. 選択およびドロップレジスタ“*” +、および “〜
  6. 3つの読み取り専用レジスタ“:“。、および “%
  7. 代替ファイルレジスタ“#
  8. 式レジスタ“ =
  9. 最終検索パターンレジスタ“ /
  10. ブラックホールレジスタ“ _

このチュートリアルでは、それらすべてについて詳しく説明します。

さらに、例を通じてこれらのレジスタの使用方法を学習します。

3. 名前のないレジスタ“”

コマンドd D x X s [を使用してテキストを削除すると、Vimは名前のないレジスタを埋めます。 X127X]、 S c C 、またはyまたはYでテキストをヤンクします。

名前のないレジスタは非常に頻繁に使用されます。 一般的なシナリオは、通常のシステムクリップボードを使用するようなクイックコピーアンドペースト操作です。

でも、 クリップボードと名前のないレジスタには大きな違いがあります。 クリップボードは削除されたテキストを自動的に保存しませんが、Vimの名前のないレジスタは保存します。 場合によっては、これが問題になることがあります。

例は、問題をすばやく理解するのに役立ちます。 Vimバッファにテキストがあるとしましょう:

correct: (right-text)
wrong: (wrong-text)
wrong: (another wrong text)
wrong: (wrong again)

私たちがやろうとしているのは、「 wrong:」で始まる行のすべての「(…。)」を「(right-text)」に置き換えることです。 。

簡単なコピー&ペースト作業のように見えます。 通常モードya(コマンドで「(右テキスト)」をヤンクしてから、各「」を削除します。 (…)」を da(に置き換え、p。を使用してヤンクされたテキストを貼り付けます

次に、小さなデモを通じて、この方法で実行できるかどうかを見てみましょう。 デモでは、テキストをヤンクして削除した後、:reg” コマンドを実行して、コンテンツを監視します。

デモが示すように、 da(]を実行した後、名前のないレジスタの内容が削除されたテキスト「(wrong-text)」に変更されました。 したがって、ヤンクされた値を失いました。

通常のクリップボードを使用する場合と同じように、レジスタのコンテンツが自動的に更新されないようにして、ヤンクされたテキストを常に取得できるようにするとよいと思うかもしれません。

実際、Vimレジスタはそれ以上のことができます。 今度は26個の名前付きレジスタを見てみましょう。

4. 名前付きレジスタ

Vimには26個の名前付きレジスタ「a/A」から「z/Z」があります。 Vimは、そうするように指示した場合にのみ、これらのレジスタの内容を埋めたり更新したりします。 つまり、Vimには26個のクリップボードがあります!

4.1. 26クリップボード

これで、名前付きレジスタを使用して、前のセクションの問題を簡単に解決できます。 私たちにできることは、テキストをヤンクするときに押すことです 「aya( テキストをレジスタに保存するには 「a。 同様に、削除後に貼り付けたい場合は、Vimにコンテンツを貼り付けるように指示します。 「a を使用して登録する 「ap

それがどのように行われるか見てみましょう:

さらに、さまざまな名前のレジスタにさまざまなテキストをヤンクして、必要なレジスタから貼り付けることができます。

上記のデモが示すように、複数のクリップボードを操作するのと同じように、非常に便利です。 異なるテキストをコピーするために前後に移動する必要はありません。

4.2. 「a–」Zと「a–」Z

名前付きレジスタは、小文字または大文字を使用して参照できます。 たとえば、“a“Aは同じレジスタを参照します。 したがって、52個ではなく26個の名前付きレジスタがあります。

ただし、小文字とそれに対応する大文字は同じレジスタを参照しますが、を使用すると動作が異なります。 小文字のレジスタ名を使用して名前付きレジスタにテキストを書き込むと、Vimはそのレジスタの既存のコンテンツを上書きします。 ただし、大文字のレジスタ名を使用すると、Vimは代わりに新しいコンテンツを指定されたレジスタに追加します。

デモを通して、小文字と大文字のレジスタを使用する違いを見てみましょう。

デモでわかるように、たとえば “Byiw のように大文字のレジスタでテキストをヤンクすると、その単語は“bに追加されます。

名前付きレジスタは非常に便利です。 ただし、次の点に注意する必要があります。 名前付きレジスタを使用して削除またはヤンクされたテキストを保持している場合でも(たとえば、「adiw」または「ayiw」)、名前のないレジスタもいっぱいになります。 つまり、名前のないレジスタは、名前のあるレジスタと同じ内容になります。

5. スモールデリートレジスタ“-

名前付きレジスターを指定するかどうかに関係なく、名前なしレジスターは、削除およびヤンクされたテキストによって自動的に埋められることを学びました。

Vimには名前のないレジスタに似た別のレジスタがあります:小さな削除レジスタ 「-。 名前が示すように、 小さな削除レジスタは「小さな削除」を自動的に保存します。 削除されたテキストが1行未満の場合、Vimはそれを小さな削除と見なします。

名前のないレジスタとは異なり、「-レジスタはヤンクされたテキストで埋められません。

また、削除コマンドに名前付きレジスタを指定すると、小さな削除であっても、削除されたテキストは「-register」にも保存されません。

いつものように、小さな削除レジスタをすばやく理解するためのデモを見てみましょう。

デモが示すように、 “-レジスタは、1行未満を削除し、名前付きレジスタを指定せずに削除した場合にのみ、削除されたテキストで埋められます。 ただし、名前のないレジスタ“”は常にいっぱいになります。

6. 番号付きレジスタ

Vimは10個の番号付きレジスタ“0” 9 も提供し、yankおよびdeleteコマンドからこれらの番号付きレジスタを埋めます。

yankコマンドで別のレジスタを指定しない限り、最後にヤンクされたテキストは「0レジスタ」を埋めます。例:「ayaw」。

ただし、番号付きレジスタ“ 1 には、最新の削除または変更コマンドによって削除されたテキストが含まれています。

“ 1 レジスタは、次の2つの要件が満たされた場合にのみ自動的に埋められます。

  • 削除コマンドは、別のレジスタを指定してはなりません。 たとえば、コマンド“adawによって削除された単語は“1レジスタに移動しません
  • 変更または削除されたテキストは1行以上です(「-レジスタ」はそれ以外の場合に使用されます)

これまで、“0“1について説明してきましたが、まだ “2 “9があります。 これらの8つのレジスタは、削除履歴を保持します。 変更または削除が成功するたびに、Vimはレジスタ「1」の前のコンテンツ をレジスタ「2」に、「2」を「3」にシフトし、レジスタ「9」の前のコンテンツは次のようになります。破棄されました。

いつものように、デモを通じて番号付きレジスタがどのように満たされるかを見てみましょう。

7. 選択レジスタとドロップレジスタ

7.1. 選択レジスタ:“ * および“ +

これまで、かなりの数のタイプのVimレジスタについて説明してきました。 Vimレジスタを使用してテキストをコピーして貼り付けることができることはわかっています。 さらに、Vimレジスタは複数のクリップボードを使用する可能性を提供します。 テキストを編集するときにとても便利です。

ただし、これまでに学習したVimレジスタと通常のシステムクリップボードにはまだ大きな違いが1つあります。これらのVimレジスタを使用すると、Vim内でのみコピーして貼り付けることができます。

時々、Vimにシステムクリップボードと通信させたいことがあります。 たとえば、WebページからテキストをコピーしてVimに貼り付けて編集したり、Vimのテキストをコピーして別のアプリケーションに貼り付けたりする必要がある場合があります。

これは、テキストエディタの非常に基本的な機能でもあります。 強力なエディターとして、Vimは確かにシステムクリップボードとも通信できます。 選択レジスタは、Vimとシステムクリップボードを接続するためのブリッジです。 Vimには、“*“+の2つの選択レジスタがあります。

7.2. オペレーティングシステムと選択レジスタ

WindowsシステムでVimを実行している場合、「*」レジスタと「+」レジスタに違いはありません。 両方のレジスタがシステムクリップボードと通信します。

たとえば、 Normal モードコマンド“ + yaw (または“ * yow )は、カーソルの下の単語をシステムクリップボードにコピーしますが、“ + p (または“ * p )は、システムクリップボードからVimに値を貼り付けます。

ただし、VimがX11を搭載した* nixシステムで実行されている場合、“+“*は異なります。

“+ レジスタを使用する場合でも、VimはWindowsシステムでの動作と同様に、システムクリップボードと通信します。 ただし、“ * レジスタは、 Xウィンドウのプライマリ選択と通信します。これは通常、マウス選択によって保存され、マウスの中クリックで読み取られます。

次に、Vim選択レジスタがシステムクリップボードとXウィンドウ選択の読み取りと書き込みを行う方法を理解するためのデモを見てみましょう。

ついに、 システムクリップボードへのアクセスをサポートするには、Vimを+クリップボード機能でコンパイルする必要があることに注意してください。 また、「*」を使用してX Windows選択と通信するには、+x11選択機能を有効にする必要があります。

Vimは、ほとんどの最新のディストリビューションのパッケージリポジトリで上記の機能を有効にしています。 したがって、おそらく私たちのVimではこれらの機能も有効になっています。

結局、 Vimで:versionコマンドを実行して、必要な機能が現在のVimで有効になっているかどうかを確認できます。 

7.3. ドロップレジスタ“〜

ドロップレジスタ“〜は、最後のドラッグアンドドロップ操作でドロップされたテキストを保存します。 このレジスタは、GVimでのみ使用できます。

短いデモでは、このレジスタについて簡単に説明します。

ドロップレジスタを使用するには、GVimを +dnd[X69X]機能でコンパイルする必要があります。

8. 3つの読み取り専用レジスタ“:“。、および “%

実際、“:は私たちにとって新しいものではありません。 最近実行されたコマンドが含まれています。 前のデモで最後に実行されたコマンドを貼り付けるデモを見てきました。

The 「% registerには現在のファイルの名前が含まれ、 「。 registerは、最後に挿入されたテキストを保持します。

デモを通じて、これら3つのレジスタの使用法を示しましょう。

“:、“。、“%は読み取り専用のVimレジスタです。それらの内容はVimによって自動的に設定されます。 それらの値のみを読み取ることができます。

9. 代替ファイルレジスタ“#

まず、代替ファイルレジスタについて説明する前に、Vimの代替ファイルとは何かを理解する必要があります。

Vimで複数のファイルを開くことができます。 各ファイルはVimバッファーで開かれます。 :ls コマンドは、現在のウィンドウのすべてのバッファーを一覧表示します。

Vimでfile1file2の2つのファイルを開き、file1の編集を開始するとします。 後で、 file2 にいくつかの変更を加えたいので、file2バッファーに切り替えます。

この時点で、現在のファイルは file2 ですが、同じVimウィンドウで最後に編集されたファイルはfile1です。

同じVimウィンドウで最後に編集されたファイルまたはバッファを代替ファイルまたはバッファと呼びます。 したがって、この例では、 file1 代替ファイルです。

file2からfile1に戻すと、 file1 が再び現在のファイルになり、file2が代替ファイルになります。

“#レジスタは、代替ファイルを格納します。

いつものように、デモを通してVim代替ファイルと“#レジスターを理解しましょう。

デモでは、1つのVimウィンドウで2つのファイルを開き、それらを切り替えてから、 “%および“#レジスタの内容を一覧表示します。

デモでは、コマンド:buf[buferNo]を使用してバッファーを切り替えました。 通常モードで現在のファイルと代替ファイルをすばやく切り替えたい場合は、Ctrl-^を押します。

10. 式レジスタ“ =

さまざまなタイプのVimレジスタを見てきました。 通常、レジスタにはテキストが格納されます。 ただし、次に確認するレジスタは特別なレジスタです。 式レジスタ“=です。

「=Vim式を保存します。 Vimは式を計算し、結果を返すことができます。 編集中に表現を評価したい場合に非常に便利です。

“=の一般的な使用法は次のとおりです。

  • 通常モードでは、“ = AnExpression を押してレジスタを設定し、コマンド:put=を使用して結果を出力できます。
  • Insert モードでは、 Ctrl-R = AnExpression を押すことができ、Enterキーを押すと、AnExpressionの結果がカーソル位置に挿入されます。

これらの使用法の実際を見てみましょう。

11. 最終検索パターンレジスタ“ /

Vimでは、さまざまな方法でテキストを検索できます。 たとえば、 / pattern コマンドを使用して前方検索を適用したり、?pattern を使用して後方検索を実行したり、*と#を押して現在の単語を前方および後方に検索したりできます。

Vimは、最新の検索パターンを検索パターンレジスタ「/」に格納します。 nまたはNを押して次または前のオカレンスに移動すると、「/」の内容が使用されます

「/は読み取り専用ではないレジスタです。 ただし、テキストをヤンクまたは削除して「/レジスタ」に保存することはできません。 検索を適用すると自動的に設定されます。 デモに示すように、コンテンツを手動で変更する場合は、コマンド:let @ /=’newPattern’を使用できます。

12. ブラックホールレジスタ“ _

これまで、ほとんどの種類のVimレジスタについて説明してきました。 テキストを変更、削除、またはヤンクすると、一部のレジスタが自動的に更新されることを学びました。たとえば、名前のないレジスタ“”などです。 ただし、“” など、レジスタを変更せずにテキストを変更または削除したい場合があります。

ブラックホールレジスタ“ _ は、それを実現するための鍵です。 その名前が示すように、 ブラックホールレジスタにテキストを書き込むとき、何も起こりません。 このレジスタの内容を読み取っても、何も返されません。

したがって、deleteまたはchangeコマンドでこのレジスタを指定して、変更または削除されたテキストを飲み込むように「ブラックホール」に要求できます。 たとえば、ブラックホールレジスタで現在の単語を削除するには、“ _dawを使用できます。

ブラックホールレジスタがある場合とない場合の削除の違いを理解するためのデモを見てみましょう。

デモが示すように、“ _は、通常のレジスタに干渉することなくテキストを変更または削除する場合に適しています。

13. 結論

この記事では、Vimレジスタとは何かとその使用方法を学びました。

さらに、Vimレジスタの各タイプについて説明し、例を通してそれらを示しました。

Vimでファイルを編集する場合、Vimレジスタを適切に使用すると生産性が向上します。